# Goose 靠擴充功能運作。加一個懂你程式碼庫的。

Canonical source: https://maguyva.ai/zh-hant/for-goose

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Goose 透過擴充功能完成工作，而每個擴充功能都是一個 MCP 伺服器。Maguyva 就是那個為你的程式碼庫建立索引的擴充功能，所以 Goose 會直接問東西在哪裡，而不是一層層列出目錄。

> .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 提示是一份工作約定，儘管用。

```text
# .goosehints
- 用 pnpm，別用 npm。
- 宣告變更完成前，先跑整合測試。
```

Goose 預設會載入 `AGENTS.md` 和 `.goosehints`：全域提示來自 `~/.config/goose/.goosehints`，專案提示來自程式碼庫，進到子資料夾工作時還會讀取巢狀的檔案。提示需要啟用 Developer 擴充功能。適合寫進去的有：

- 工具選擇與指令。
- Goose 應該遵守的慣例。
- 文件放在哪裡。

提示描述的是專案。它們回答不了“什麼依賴於它？”

## 提示和 shell 不夠用的地方

Goose 靠 shell 指令、一次一個檔案補上的三個缺口。

### // 目錄清單不是地圖

面對陌生的程式碼庫，Goose 用目錄清單和讀檔來摸清狀況。每一步都在任務開始前就消耗脈絡。

### // grep 找到的是字串，不是呼叫端

文字搜尋分不清真正的呼叫、註解、測試替身和同名方法。

### // 提示會走樣

上一季寫的提示檔，描述的是上一季的結構。Goose 照樣會遵循。

## 作為 Goose 擴充功能的 Maguyva

一筆 extensions 項目讓 Goose 獲得：

- **針對已索引程式碼庫的 11 個工具**: 語意、結構（AST）、圖譜與文字搜尋，外加符號查找、依賴方與檔案擷取。
- **附檔案路徑與行號的答案**: 涵蓋 285+ 種語言。
- **只會讀取的工具**: Maguyva 的工具只查詢索引，沒有一個會修改你的檔案。

> 提示告訴 Goose *怎麼工作*。
> Maguyva 給 Goose *一張程式碼地圖*。

## 兩種工作流程

先看地圖，再讓 Goose 上工。

### 01. 把缺陷追到源頭

```text
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 之前，排序結果就已縮小搜尋範圍。

### 02. 重構前先查依賴方

```text
goose> 把 Notifier 類別拆成電子郵件和簡訊兩部分

dependency_search("Notifier", dependents)
  分布在 5 個套件中的 11 處參照

→ 第一次編輯前，規劃已涵蓋全部十一處。
[exit 0]
```

Goose 一次呼叫就拿到完整的依賴方清單，不必連續 grep。

## 在 Goose 中設定

三個步驟。Free 方案：3 個儲存庫, 最多索引 5 萬行儲存庫程式碼，免信用卡。

### 01. 在 maguyva.ai 索引一個程式碼庫

挑一個你已經熟悉的，這樣你才能評分答案。

### 02. 在 config.yaml 的 extensions 中加入 Maguyva

`~/.config/goose/config.yaml`

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

```

### 03. 替換預留位置，然後開始一個工作階段

把 `mgv_xxxx` 換成你的 API 金鑰，執行 `goose session`，再問一個你已經知道答案的問題。YAML 對縮排很敏感：請用空格，不要用 Tab。

Goose 的 [擴充功能文件](https://goose-docs.ai/docs/getting-started/using-extensions/) 說明了遠端擴充功能、逾時與工具篩選。

## 索引一個你已經熟悉的程式碼庫。

透過 MCP 連接 Goose，然後問一個你能查證的問題。
