跳转到内容

面向 Goose 用户

Goose 靠扩展干活。加一个懂你仓库的。

Goose 通过扩展完成工作,而每个扩展都是一个 MCP 服务器。Maguyva 就是那个索引你代码库的扩展,于是 Goose 会直接问东西在哪里,而不是一层层列目录。

Free 层级:3 个代码仓库, 最多 5 万行索引代码,无需信用卡。

.goosehints 管怎么做事,Maguyva 管代码现在怎么写。

关于 Goose 需要知道的

四条 Goose 专属事实。

// 配置文件

config.yaml

扩展放在 ~/.config/goose/config.yaml 的 extensions 下。goose configure → Add Extension 也会替你写入同类条目。

// 传输方式

一个远程扩展

Maguyva 是一个 streamable_http 扩展,Goose 会自己连接端点:没有本地进程,也不需要 Node.js。URL 写在 uri 里,不是 url。

// 密钥

headers

Goose 每次请求都会发送 headers 映射,所以密钥放在 Authorization 请求头里。Goose 也可以从 env_keys 中列出的环境变量填入它。

// 工具筛选

available_tools

扩展可以只暴露部分工具:把想要的工具列在 available_tools 下,留空则全部启用。

Goose 提示是一份工作约定,好好用它。

# .goosehints
- 用 pnpm,别用 npm。
- 宣布改动完成之前,先跑集成测试。

Goose 默认加载 AGENTS.md 和 .goosehints:全局提示来自 ~/.config/goose/.goosehints,项目提示来自仓库,进入子文件夹工作时还会读取嵌套的文件。提示需要启用 Developer 扩展。适合写进去的有:

  • 工具选型和命令。
  • Goose 应当遵守的约定。
  • 文档放在哪里。

提示描述的是项目。它们回答不了“什么依赖于它?”

提示和 shell 不够用的地方

Goose 靠 shell 命令、一次一个文件填补的三个缺口。

// 目录列表不是地图

面对陌生仓库,Goose 用目录列表和读文件来摸清情况。每一步都在任务开始前就消耗上下文。

// grep 找到的是字符串,不是调用方

文本搜索分不清真正的调用、注释、mock 和同名方法。

// 提示会跑偏

上个季度写的提示文件,描述的是上个季度的布局。Goose 照样会遵循。

作为 Goose 扩展的 Maguyva

一条 extensions 条目让 Goose 获得:

  • 面向已索引仓库的 11 个工具 语义、结构(AST)、图和文本搜索,外加符号查找、依赖方和文件检索。
  • 带文件路径和行号的答案 覆盖 285+ 种语言。
  • 只读的工具 Maguyva 的工具只查询索引,没有一个会修改你的文件。

提示告诉 Goose 怎么工作。

Maguyva 给 Goose 一张代码地图。

两种工作流

先看地图,再让 Goose 跑起来。

// workflow 01

把缺陷追溯到源头

goose> 为什么有些导出结束时是零行?

semantic_search("export job empty result")
  src/export/runner.ts:118   flushBatch()
  src/export/filters.ts:40   applyTenantFilter()

→ Goose 只读两个文件,而不是整个 export 包。
[exit 0]

在 Goose 打开 shell 之前,排序结果就已缩小了搜索范围。

// workflow 02

重构之前先查依赖方

goose> 把 Notifier 类拆成邮件和短信两部分

dependency_search("Notifier", dependents)
  分布在 5 个包中的 11 处引用

→ 第一次编辑之前,规划已覆盖全部十一处。
[exit 0]

Goose 一次调用就拿到完整的依赖方列表,不必一连串 grep。

在 Goose 中配置

三个步骤。Free 层级:3 个代码仓库, 最多 5 万行索引代码,无需信用卡。

  1. // step 01

    在 maguyva.ai 索引一个代码仓库

    挑一个你已经熟悉的,这样你能给答案打分。

  2. // step 02

    在 config.yaml 的 extensions 中添加 Maguyva

    ~/.config/goose/config.yaml

    extensions:
      maguyva:
        name: maguyva
        type: streamable_http
        uri: https://maguyva.tools/mcp
        enabled: true
        headers:
          Authorization: Bearer mgv_xxxx
        timeout: 300
    
  3. // step 03

    替换占位符,然后开始一个会话

    把 mgv_xxxx 换成你的 API 密钥,运行 goose session,然后问一个你已经知道答案的问题。YAML 对缩进敏感:请用空格,不要用 Tab。