# Gooseは拡張機能で動く。リポジトリを知っている拡張機能を足そう。

Canonical source: https://maguyva.ai/ja/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特有の4つの事実。

### config.yaml

拡張機能は`~/.config/goose/config.yaml`の`extensions`の下に置きます。`goose configure` → Add Extensionでも同じ種類のエントリが書き込まれます。

### リモート拡張機能

Maguyvaは`streamable_http`拡張機能なので、Gooseがエンドポイントに直接接続します。ローカルプロセスもNode.jsも不要です。URLは`url`ではなく`uri`に書きます。

### headers

Gooseはリクエストのたびに`headers`マップを送るので、キーは`Authorization`ヘッダーに書きます。`env_keys`に列挙した環境変数から埋めることもできます。

### available_tools

拡張機能はツールの一部だけを公開できます。使いたいツールを`available_tools`に列挙するか、空のままにしてすべてを使います。

## Gooseのヒントは作業上の取り決めです。使いましょう。

```text
# .goosehints
- npmではなくpnpmを使う。
- 変更を完了とする前に結合テストを実行する。
```

Gooseはデフォルトで`AGENTS.md`と`.goosehints`を読み込みます。グローバルなヒントは`~/.config/goose/.goosehints`から、プロジェクトのヒントはリポジトリから、さらにサブフォルダで作業する際にはネストされたファイルも読みます。ヒントにはDeveloper拡張機能が必要です。向いているのは:

- ツールの選択とコマンド。
- Gooseが従うべき規約。
- ドキュメントの置き場所。

ヒントはプロジェクトを説明します。“これに依存しているのは何?”には答えません。

## ヒントとシェルの限界

Gooseがシェルコマンドで1ファイルずつ埋めている3つの穴。

### // 一覧は地図ではない

見慣れないリポジトリでは、Gooseはディレクトリ一覧とファイルの読み込みで状況を把握します。そのたびに、タスクが始まる前からコンテキストを消費します。

### // grepは呼び出し元ではなく文字列を見つける

テキスト検索では、本当の呼び出しと、コメントやモックや同名のメソッドとを区別できません。

### // ヒントはずれていく

前の四半期に書かれたヒントファイルは、前の四半期の構成を説明しています。それでもGooseは従います。

## Gooseの拡張機能としてのMaguyva

extensionsのエントリ1つで、Gooseが得られるもの:

- **インデックス済みリポジトリに対する11個のツール**: セマンティック、構造（AST）、グラフ、テキスト検索に加え、シンボル検索、依存元、ファイル取得。
- **ファイルパスと行番号付きの回答**: 285以上の言語に対応。
- **読み取りだけのツール**: Maguyvaのツールはインデックスを照会するだけです。あなたのファイルを編集するものはありません。

> ヒントは、Gooseに*作業の仕方*を教える。
> Maguyvaは、Gooseに*コードの地図*を与える。

## 2つのワークフロー

まず地図、それからGooseに任せる。

### 01. バグを発生源までたどる

```text
goose> エクスポートが0行で終わることがあるのはなぜ?

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

→ Gooseはexportパッケージ全体ではなく、2つのファイルを読みます。
[exit 0]
```

Gooseがシェルを開く前に、ランク付けされた結果が探す範囲を絞り込みます。

### 02. リファクタリングの前に依存元を確認する

```text
goose> Notifierクラスをメール用とSMS用に分割して

dependency_search("Notifier", dependents)
  5パッケージにまたがる11件の参照

→ 最初の編集の前に、計画が11件すべてをカバーします。
[exit 0]
```

Gooseはgrepを何度も重ねる代わりに、1回の呼び出しで依存元の完全なリストを得ます。

## Gooseでのセットアップ

3ステップ。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`を実行して、答えをすでに知っている質問を1つしてみましょう。YAMLはインデントに敏感です。タブではなくスペースを使ってください。

Gooseの[拡張機能ドキュメント](https://goose-docs.ai/docs/getting-started/using-extensions/)に、リモート拡張機能、タイムアウト、ツールフィルターの説明があります。

## すでに知っているリポジトリを1つインデックス化。

MCP経由でGooseを接続し、確認できる質問を1つしてみましょう。
