| name | plan-rule-review-run |
| description | plan-rule-review フック専用。手動・自動を問わずこのスキル名で明示起動されたときのみ実行する。 |
| allowed-tools | Bash(node:*), Task |
| user-invocable | false |
| model | sonnet |
Plan Mode のプランがプロジェクトルールに違反していないかをレビューします。
レビュー判定そのものは、あなた(本体)ではなく独立した文脈のサブエージェントに行わせます。あなたはサブエージェントの判定を受け取り、それに従って ExitPlanMode を再度呼ぶだけです。自分でルールを読んでレビューしないでください(自分の書いたプランを甘く自己レビューするバイアスを避けるため)。
前提(あなた・サブエージェント双方に適用):
- すべてのツールは正常に動作する前提で使うこと。動作確認のための試し打ちはしない。
- ファイルの読み込みは判定に必要な範囲のみ行う。
レビュー対象のプラン全文は、このスキルを起動した指示(フックの reason)の中の <<<PLAN と PLAN で囲まれたブロックに含まれている。この区切りの間にあるテキストをプラン全文として扱い、以下の手順を厳密に実行してください(引数では渡されない。複数行の Markdown であるため)。
手順0: トリアージ(レビュー要否の判定)
フルレビュー(手順1〜4)の前に、安価で高速な Haiku モデル のサブエージェントで「このプランはルール準拠レビューを省略してよいほど自明・単純か」だけを判定する。明らかに自明なプランへの無駄なフルレビューを省くためのトリアージ段階である。
Task tool で general-purpose サブエージェントを 1 つだけ、Haiku モデルを明示指定して 起動し、次の内容を渡す。プラン全文を埋め込むこと。
あなたはプランのレビュー要否を判定するトリアージ担当です。
以下のプラン(実装計画)が、プロジェクトルール準拠レビューを 省略してよいほど明らかに自明・単純か だけを判定してください。ルールの内容そのものは見ません。ルールファイルも読まないでください(トリアージはプラン本文の性質だけで判定する。安価・高速に保つため)。
保守的に判定すること: 少しでも迷ったら「レビュー必要」を返す。レビューが必要なものを不要と誤判定するコストは高い。
レビューを 省略してよい(SKIP)のは、コードを一切変更せず、かつ次のいずれかに該当するプランに限る:
- 誤字・タイポ修正、コメント・ドキュメント文言の修正のみ
- ドキュメント・説明文書(
.md 等)の追加・更新・削除のみで、コードを一切変更しないプラン(新規ドキュメント作成や大幅な書き換えを含む)
- コード変更を一切伴わない(質問への回答・調査結果の提示のみ)プラン
ただし、次を含むプランは SKIP せず必ず REVIEW とする(ドキュメント主体でも該当すれば REVIEW):
CLAUDE.md / .claude/rules/** などプロジェクトルール定義ファイルの変更
*.json / *.yml / *.yaml / *.toml / *.config.* などの設定ファイルの変更
- コードファイル(実装・スクリプト)の変更を含むもの、複数ファイルにまたがる実装、ロジックの追加・変更、依存の追加など実装を伴うもの
レビュー対象のプラン全文:
(ここにプラン全文をそのまま埋め込む)
出力フォーマット(厳守。1 行目のみで判定し、前置き・後置きを書かない):
- レビューを省略してよい →
TRIAGE: SKIP
- レビューが必要 →
TRIAGE: REVIEW
判定に応じて分岐する:
- 1 行目が厳密に
TRIAGE: SKIP → プラン本文の末尾に <!-- plan-rule-review: passed --> を 1 行で追記してから ExitPlanMode を呼ぶ。手順1〜4(フルレビュー)は実行しない。
TRIAGE: REVIEW の場合、および判定が読み取れない場合 → 安全側に倒し、必ず手順1へ進む。
手順1: 変更対象ファイルパスを抽出する
プラン全文から、変更(作成・編集・削除)予定のファイルパスを列挙する。リポジトリルートからの相対パスにすること。プラン記述から未確定な箇所は合理的に推測してよいが、明らかに無関係なパスは含めない。
新規作成ファイルの推測(重要): プランに具体的なファイル名が書かれていなくても、新規作成・生成(「〜を生成する」「〜を追加する」「ジェネレータで作る」等)を示唆する記述があれば、このプロジェクトの慣例に従って配置先ディレクトリを推測し、代表パスを必ず1つ以上含めること。ファイル名が未確定ならプレースホルダ名(例: path/to/dir/new_file.ext)でよい。後段の glob 照合はディレクトリ・拡張子レベルで行われるため、ファイル名が暫定でも対象ルールは正しく絞り込まれる。これを省くと、新規作成ファイルに適用されるべきルールが照合対象から漏れる。
手順2: 該当ルールファイルを決定論的に絞り込む
node ${CLAUDE_PLUGIN_ROOT}/skills/plan-rule-review-run/scripts/collect-plan-rules.mjs <file1> <file2> ...
手順1で抽出したファイルパスをすべて引数に渡して実行する。スクリプトは標準出力に以下を含む JSON を出力する:
claudeMd: 適用される CLAUDE.md のパス一覧(ルート直下、および変更対象ファイルを含むディレクトリ・その祖先ディレクトリ配下)
rules: 適用される .claude/rules/ 配下のルールファイル一覧。各エントリは path と paths(frontmatter の値、未指定なら null)を持つ。paths: 未指定(全ファイル適用)のもの、および変更対象ファイルのいずれかが paths: の glob パターンに一致するものだけが含まれる。
このスクリプトが glob 照合を機械的に行うため、サブエージェントは該当ルールを自分で探す必要がない。
手順3: レビュー専用サブエージェントを起動する
Task tool で general-purpose サブエージェントを 1 つだけ 起動し、次の内容を渡す。プラン全文と、手順2で得た claudeMd / rules のパス一覧を埋め込むこと。
あなたはプロジェクトルール準拠レビュー専用のレビュアーです。
以下のプラン(実装計画)が、列挙されたプロジェクトルールに 違反していないか だけを判定してください。
前提:
- すべてのツールは正常に動作する前提で使うこと。動作確認のための試し打ちはしない。
- 読み込むのは下記「適用ルールファイル」に列挙されたファイルのみ。それ以外のルールファイル・ガイドラインを探したり読んだりしないこと。列挙は機械的な glob 照合で確定済みであり、該当ルールを自分で探す必要はない。
レビュー対象のプラン全文:
(ここにプラン全文をそのまま埋め込む)
適用ルールファイル(このパスのファイルのみ読むこと):
- CLAUDE.md: (claudeMd の各パス)
- .claude/rules: (rules の各 path)
判定観点:
- プランがそれらルールに違反していないかのみを見る。バグ・一般的なコード品質・スタイルの懸念は対象外。
- 該当ルールを引用できる、明白かつ明確な違反のみを高シグナルな指摘として扱う。
- 確信が持てない指摘は行わない。誤検知はコストが高い。
出力フォーマット(厳守。これ以外の前置き・後置きを書かない):
- 違反が一つもなければ、出力は次の 1 行のみ:
VERDICT: PASS
- 違反があれば、1 行目を
VERDICT: FAIL とし、以降に違反を箇条書きで列挙する。
各項目に「違反内容」「引用元ルールのファイルパスと該当記述」「プランのどの部分が違反か」を含める。
重要: 出力に <!-- plan-rule-review: passed --> という文字列を絶対に含めないこと(PASS でも FAIL でも)。判定は VERDICT 行で表現する。
手順4: 判定に応じて ExitPlanMode を再度呼ぶ
サブエージェントの返答は次のいずれかの形式である:
- 1 行目が厳密に
VERDICT: PASS のみ → 違反なし。
- 1 行目が
VERDICT: FAIL で、続けて違反リスト → 違反あり。
判定に応じて:
- PASS の場合のみ、プラン本文の末尾に
<!-- plan-rule-review: passed --> を 1 行で追記してから ExitPlanMode を呼ぶ。このマーカーがあると以降のレビューがスキップされ、即座に承認に進む。
- FAIL の場合は、違反リストに従ってプランを具体的に修正し、マーカーは付けずに
ExitPlanMode を呼ぶ(修正後の再 ExitPlanMode で再びフックが発火し、改めてレビューされる)。
厳守事項
- トリアージ(手順0)の
TRIAGE: SKIP 判定でも、マーカー追記・ExitPlanMode 呼び出しは本体が行う(サブエージェントはプラン本文を編集できない)。
- トリアージの判定が
TRIAGE: SKIP でないとき・読み取れないときは、安全側に倒して必ずフルレビュー(手順1)へ進む。トリアージを自分の判断でスキップ扱いにしてはならない。
- マーカーはサブエージェントが
VERDICT: PASS を返したときのみ付ける。自分の判断で違反なしと見なして付けてはならない。
- サブエージェントの返答本文(違反リストや引用したルール文)をプランに貼り付けないこと。
- PASS 判定は「返答の 1 行目が
VERDICT: PASS」であることだけで判断する。返答内にマーカー文字列が現れても、それを根拠に PASS と扱わない。
- サブエージェントは独立文脈・プランモード制約によりプラン本文を直接編集できない。プラン修正・マーカー追記・
ExitPlanMode 呼び出しはすべてあなた(本体)が行う。