brownfield について
brownfield は、既存の Git リポジトリを登録し、インタビューのコンテキストに使うデフォルトを管理する Ouroboros スキルです。トピック検索や、プロジェクトから mechanical.toml を生成する機能もあります。
主な機能
- 01登録リポジトリとデフォルトの一覧表示
- 02リポジトリのスキャンと検索インデックス更新
- 03トピックに基づくリポジトリ検索
- 04インタビュー用リポジトリの選択
- 05mechanical.toml のコマンド生成
活用シーン
- 01インタビューのコンテキストに使うリポジトリの選択
- 02変更後のリポジトリ登録情報の更新
- 03トピックに関連するリポジトリの検索
- 04プロジェクトの評価コマンドの準備
MCP 対応
リポジトリの一覧表示、スキャン、検索、デフォルト選択には Ouroboros MCP サーバーの brownfield ツールを使います。detect サブコマンドは Ouroboros CLI を呼び出します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ q00/ ouroboros --skill brownfieldインストール後、Claude Code で/brownfieldを入力して読み込まれたか確認します。
詳細
/ouroboros:brownfield
既存の git リポジトリとリンクされたワークツリーのレジストリ、およびインタビューのコンテキストとして使用するデフォルトのリポジトリを管理します。レジストリは Ouroboros DB に保存されます。一覧表示、デフォルト、検索ではレジストリを読み取り、ファイルシステムを走査することはありません。ディスクを走査するのは scan のみです。
ooo brownfield # List registered repos and set defaults (scans only if none are registered)
ooo brownfield scan # Rescan the scan root and refresh the search index
ooo brownfield defaults # Show current defaults
ooo brownfield find <topic> # Rank registered repos by relevance to a topic
ooo brownfield set 6,18,19 # Set defaults by repo numbers
ooo brownfield detect [path] # Author mechanical.toml via one AI call
MCP ツールの読み込み(遅延スキーマのガード)
Ouroboros ツールは遅延読み込みされる場合があり、あるターンで読み込まれたスキーマが次のターンまでにアンロードされることがあります。各 ouroboros_* 呼び出しの直前に、アクティブなランタイムのツール検出機能を使って読み込んでください。ouroboros_brownfield の場合は "+ouroboros brownfield" です。スキーマが読み込まれていない状態で呼び出すと、「Invalid tool parameters」で失敗します。ツールをすでに呼び出せる場合、検出は何も行わず、空の結果が返ることが想定されます。ツールが本当に見つからない場合は、停止して Ouroboros MCP サーバーが利用できないことを伝えてください。一覧表示、スキャン、検索、デフォルトの取得と設定には、この MCP ツールのみを使用し、CLI や Python スクリプトは使いません。
デフォルトのフロー(ooo brownfield)
ステップ 1:レジストリを一覧表示する
Tool: ouroboros_brownfield
Arguments: { "action": "query" }
meta.total が 0 の場合、まだ何も登録されていません。代わりに以下のスキャンを実行し、その応答を使用してください。それ以外の場合はスキャンしません。リポジトリが追加または移動されたときは、ユーザーが ooo brownfield scan を実行します。
Tool: ouroboros_brownfield
Arguments: { "action": "scan" }
スキャンの範囲:
- スキャンは
scan_root(デフォルトではユーザーのホームディレクトリ)から開始し、最大 2 階層までを走査します(~/repoと~/group/repoは見つかりますが、それより深い階層は対象外です)。 - ドットで始まるディレクトリや、
node_modulesなどのノイズとなるディレクトリは走査しません。 - 通常のリポジトリ(
.gitディレクトリ)とリンクされたワークツリー(.gitファイル)は、走査時に個別に登録されます。Git ワークツリーのファミリーは展開されないため、深さ制限内の走査範囲外にあるワークツリー(例:.ouroboros/worktreesの下にあるもの)は取り込まれません。 - リモートがないリポジトリ、または
origin以外の名前のリモートを持つリポジトリも対象になります。既存のデフォルトは保持され、ディスク上にないリポジトリも削除されません。 - 再スキャンでは、すでに登録済みのリポジトリに対する
gitチェックを省略し、ファイルに変更があった場合のみ、そのリポジトリの検索用ドキュメント(マニフェスト名と説明、README の冒頭、トップレベルのエントリ名)を再構築します。
クエリまたはスキャンの応答にある text には、デフォルトを * マーカーで示した {id}. {name} の番号付きリストがすでに含まれています(クエリ行には : {path} - {desc} も含まれます)。リポジトリ一覧取得のために MCP を追加で呼び出さないでください。番号と名前のみ(スコアやパスは表示しません)を、コードブロック内のプレーンテキストの 2 列グリッド(Markdown テーブルではありません)で表示し、* マーカーはそのまま保持してください。
Scan complete. 8 repositories registered.
1. repo-alpha 5. repo-epsilon
2. repo-bravo * 6. repo-foxtrot
3. repo-charlie 7. repo-golf *
4. repo-delta 8. repo-hotel
スキャンで何も見つからない場合は「Git リポジトリまたはワークツリーが見つかりませんでした。」と伝えて終了します。
ステップ 2:デフォルトの選択
この選択には、アクティブなランタイムの ask_user ダイアログを使用しないでください。ツール呼び出しの間のテキストが表示されない場合があり、ダイアログのプレビューでは長いリストが途中で切り詰められます。代わりに、リポジトリのグリッドを最後のメッセージとしてターンを終了し、通常のチャット返信で選択を受け付けてください。グリッドの直下に、次を追加します。
- デフォルトがある場合:
Current defaults: <names> (numbers <numbers>)、続けて「デフォルトを変更するにはリポジトリ番号(例:"6, 18, 19")、現在のデフォルトを維持するには "keep"、クリアするには "none" と返信してください。」 - デフォルトがない場合:
No defaults set.、続けて「デフォルトに設定するリポジトリ番号(例:"6, 18, 19")、またはグリーンフィールドモードでインタビューを実行するには "none" と返信してください。」
グリッドの後はツールを呼び出さないでください。パンくずフッターが最後の行になります。
次のターンで返信を解析します。数字(区切り文字は任意)ならそのインデックスを使用します。"keep" なら MCP を呼び出さずに現在のデフォルトを変更しないことを確認します。"none" なら空のインデックスを使用します。それ以外の場合は推測せず、プレーンテキストで再度質問します。その後、すべてのデフォルトを 1 回の呼び出しで更新します(既存のデフォルトはすべて置き換えられます)。
Tool: ouroboros_brownfield
Arguments: { "action": "set_defaults", "indices": "<comma-separated IDs>" }
たとえば { "action": "set_defaults", "indices": "6,18,19" }、または「none」の場合は "indices": "" を指定します。
ステップ 3:確認する
新しいデフォルトの名前と、それらがインタビューのコンテキストとして使用されることを伝えます。「none」の場合は、インタビューがグリーンフィールドモードで実行されること、および後から ooo brownfield でデフォルトを設定できることを伝えます。
サブコマンド
-
scan:Step 1 のスキャン呼び出しを実行し(リポジトリが登録済みの場合も実行します)、一覧を表示して終了します。 -
defaults:Step 1 のクエリ呼び出しを実行し(スキャンは行いません)、*が付いたリポジトリのみを表示します。該当するものがない場合は、「デフォルトのリポジトリが設定されていません。設定するには 'ooo brownfield' を実行してください。」と表示します。 -
find <topic>:スキャンせずに、トピックに基づいて登録済みのリポジトリを順位付けします。Tool: ouroboros_brownfield Arguments: { "action": "query", "text": "<topic>" }返された行を上位順に表示します(番号、名前、
*マーカー、スコア。ユーザーがそれ以上を求めない限り上位 10 件。求められた場合はlimitを渡します)。そのうえでooo brownfield set <numbers>を提案します。順位付けは語彙ベースです(名前、説明、パス、マニフェスト、README の冒頭、トップレベルの項目に対する BM25)。そのため、意味ではなく単語に一致します。一致するものがない場合は、その旨を伝え、別のキーワードか、全リストを表示するooo brownfieldを提案します。応答に検索ドキュメントがないリポジトリがあると記されている場合は、ooo brownfield scanでインデックスを作成することを伝えます。 -
set <indices>:カンマ区切りのインデックスを解析し、スキャンせずに{ "action": "set_defaults", "indices": "<indices>" }を呼び出します。デフォルトが更新されたことを確認します。 -
detect [path]:対象ディレクトリ(デフォルト:cwd)に対して AI 呼び出しを 1 回行い、検証済みの lint/build/test/static/coverage コマンドを含む.ouroboros/mechanical.tomlを書き込みます。Stage 1 の評価では、これをそのまま読み取ります。toml がない場合、評価時に自動実行されるため、このサブコマンドを明示的に実行するのは、事前に作成する場合、ビルドツールの変更後に更新する場合(--force)、または Stage 1 が信頼する前にコマンドを確認する場合のみです。このサブコマンドは、アクティブなランタイムのrun_shell機能を通じて CLI を使用します。uvx --python '>=3.12' --from ouroboros-ai ouroboros detect [path] # or, if already installed: ouroboros detect [path] [--force]生成された toml を表示し、ユーザーが確認または編集できるようにします。detect が「検証可能なコマンドを提案できませんでした」と報告した場合は、その理由(マニフェストがない、LLM が利用できない、提案がすべて除外された)を伝え、最小限の toml を手書きするよう提案します。
test = "pytest -q"のように 1 つの項目を記述すると、そのチェックが Stage 1 の対象に戻ります。
RFC #1392 状態を示すフッター
最終応答の末尾には、◆ <current state> → next: <recommended action> の形式で、行をちょうど 1 行だけ記載します。可能な場合は ouroboros_session_status を使ってライブセッションの状態を取得し、それ以外の場合はこのスキルの実際の結果から状態を導きます。Step N of M のような直線的なフッターは使用しないでください。次のステップが実際の選択肢である場合は、2~3 個の選択肢を挙げてください。