Route
引数: $ARGUMENTS
以下で<base>と書かれているのは、このテキストの上に表示されている「このスキルのベースディレクトリ」のパスを意味します。スクリプトは <base>/scripts/inventory.py です。個人用カタログは ~/.claude/route-catalog/(または $ROUTE_CATALOG_DIR)にあり、プラグインの内部には決して置きません。
0. リクエストを見つける
ユーザーが通常のプロンプトを書き、それに /route を追加します。ユーザーの言葉からリクエストを特定してください:
/routeがプロンプトと同じメッセージ内にある場合(前後どちらでも):リクエストは、そのメッセージ全体から/routeという単語を取り除いたものです。/routeが単独で送信された場合:リクエストは、ユーザーの直前のメッセージ(または同じタスクに属する複数のメッセージ)を会話全体と合わせて解釈したものです。裸の「/route」という単語をリクエストとして扱わないでください。- 上記の引数にテキストが格納されている場合:それをリクエストまたはその一部として扱いますが、ユーザー自身のメッセージが異なる場合はそちらを優先します。
/routeが到着する前にそのリクエストの処理をすでに開始していた場合、完了した部分を確認し、残りの作業のみをルーティングしてください。完了したステップをやり直さないでください。- リクエストが
buildの場合、<base>/BUILD.mdを読み、それに従ってください。refreshの場合は、「リフレッシュ」にスキップします。
ユーザーのプロンプトをタスクとして維持してください。1つのスキルがカバーする部分だけに縮小しないでください。プロンプトのすべての部分は、読み込まれたスキルまたはあなた自身の作業によってカバーされなければなりません。
1. リクエストを理解する
自分用に1行書いてください:目標、成果物、関係する技術やファイル、フェーズ(計画、構築、デバッグ、レビュー、検証、出荷、ドキュメント、メディア、運用)。会話を活用してください:「直して」や「動画を作って」のようなリクエストは、ちょうど議論された内容を指します。まだコードベースを探索しないでください。
早期終了:リクエストが些細な場合(名前の変更、1行の修正、単純な質問)、「スキル不要:(理由)」を出力し、タスクを実行してください。カタログは読まないでください。
プロジェクトの CLAUDE.md があらゆる作業の前に最初のステップを要求している場合(例:「診断する前にエラーテキストのラン��ックを検索する」)、そのステップを今実行してください。その結果によって、必要なスキルが変わる可能性があります。
2. 候補を見つける
- カレントディレクトリから
python3 <base>/scripts/inventory.py --checkを実行します。NO CATALOG:ルーターが一度だけ/route buildを必要としていることをユーザーに伝え、今すぐ実行するか尋ね、その間あなた自身のスキルリストで見えるスキルを使ってリクエストを処理します。- それ以外の場合は、
catalog in syncを出力するか、NEW スキル(インストールされたがカタログにないもの、その説明付き)と GONE エントリ(もはやインストールされていないもの)を出力します。NEWスキルは有効な候補です。GONEのものは絶対に選ばないでください。
--checkがオーバーライドファイルの存在を報告した場合、そのファイルを最初に読んでください。そのファイルにはユーザー自身のルーティングルール(「UIポリッシュ -> better-ui、impeccableは使わない」など)が含まれています。リクエストにマッチするオーバーライドは、カタログ、そのデフォルトピック、あなた自身の判断に優先します。そのオーバーライドを「理由」列に記載してください。--checkが最初の行に出力するカタログフォルダ内で、INDEX.mdと、存在する場合はPROFILE.md(ユーザーのスタックと習慣)を読んでください。- リクエストにマッチする1~3個のカテゴリを選び、それらのカテゴリファイルのみを読んでください。各スキル行は次の書式です:
- `name` [load] USE: ... | NOT: ... | NEXT: ... | NEEDS: ...
3. セットを選ぶ
- リクエスト全体をカバーする最小のセットを選んでください:通常は1~3スキル、最大でも5つまでです。
- 1つのジョブにつき1スキル。同じジョブを実行する2つのスキルを決して読み込まないでください。カテゴリの「デフォルトピック」に従ってください。
- 各スキルのNOTフィールドに従ってください。NOTがこのリクエストにより適したスキルを指定している場合、そちらを採用してください。
- 同じジョブに対しては、プロジェクトスキル(
[project]、このリポジトリの.claude/skills内)またはユーザー自身のカスタムスキルを汎用スキルより優先してください。 - スキルに NEEDS がリストされていて、ここで不足している場合、その旨を述べて次善のスキルを選んでください。
- どのスキルも真の価値を追加しない場合、「スキル不要」と言ってタスクを実行してください。
- リクエストの2つの非常に異なる解釈が異なるスキルにつながる場合、何かを読み込む前に選択肢を提示して短い質問を1つしてください。
4. 計画を表示し、読み込む
最初のスキル呼び出しの前に、以下の表を可視テキストとして表示してください。これは必須の出力であり、ナレーションではありません。「ツール呼び出し前のテキストなし」スタイルがアクティブな場合でも表示してください。
| # | スキル | 理由 | 読み込み方法 |
|---|---|---|---|
| 1 | skill-name | リクエストに関連した1行 | skill / read / builtin / project |
行は条件付きでも構いません:「条件が成立する場合のみ」と理由列に書き、その条件が成立したときだけ読み込んでください。
表の下に「副作用」メモを追加し、メッセージ送信、デプロイ、データ削除、有料クレジット消費、本番環境への書き込みを行うすべてのステップ(スキルか作業自体かを問わず)を記載してください。そのステップの前に確認を取ってください。それ以外の場合は待たずに続行します。
表の順序でスキルを読み込んでください(まず計画、次に構築、最後に検証):
[skill]、[builtin]、[project]:正確な名前で Skill ツールを呼び出し、そのスキルが処理すべきリクエストの一部をargsとして渡します。[read <path>]:このスキルは Skill ツールが拒否します(ユーザーのみ使用)。<path>にあるファイルを読み込み、読み込まれたかのようにそれに従ってください。- Skill の呼び出しが失敗した場合、代わりにそのスキルの SKILL.md を読み(フラグなしの
inventory.pyはすべてのパスを出力します)、そのように伝えてください。
5. 作業を実行する
読み込まれたスキルを一緒に従ってください。2つのスキルが競合する場合、より特化したスキルがタスクのその部分で優先されます。ユーザーのCLAUDE.mdファイルと明示的な指示は、すべてのスキルに優先します。
途中で新しいニーズが現れた場合(例:修正にマイグレーションが必要になった)、もう1つスキルを読み込んで、1行で告知してください:「x も読み込み中:(理由)」
6. チェック、ログ記録、報告、次に実行すべきことを提案する
終了チェック:2つ以上のスキルが読み込まれた場合、またはリクエストに複数の部分があった場合、最終応答の前に各部分をチェックしてください。読み込まれた各スキル、およびスキルがカバーしなかったリクエストの各部分について、証拠(ファイル:行、テスト結果、コマンド出力)を添えて、完了/部分的/ブロック済みを判定してください。それを最終応答に以下のような短い表として含めてください:
| 部分 | スキル | ステータス | 証拠 |
|---|
部分またはブロックされている部分がある場合は、何が不足しているかを述べて、タスクを完了と呼ばないでください。単一スキル、単一部分のリクエストの場合は表を省略します。
ログ:python3 <base>/scripts/inventory.py --log '<json>' を1回実行し、1つのJSONオブジェクトを含めます:request(最大160文字のリクエスト、機密情報なし)、loaded(読み込まれたスキル)、used(実際に作業を形成した指示を持つ読み込まれたスキル)、unused(読み込まれたが不要だったスキル)、skipped(実行されなかった計画行)、next(あなたが提案する次のスキル)、no_skill(スキルが不要だった場合はtrue)、check(