code-review — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited code-review (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
GitHub の Pull Request(またはローカルの差分)に対して、Claude がコードレビューを実施し、インラインコメントとサマリコメントを投稿するためのスキル。CLI 上で一貫したレビュー体験をローカルから実行できるようにすることが目的。
このスキルには 通常モード(normal) と 詳細モード(detailed) の 2 つがあり、ユーザーの依頼文に応じて自動で切り替わる。
モードの判定: ユーザーの依頼文に「詳細に」「詳しく」「観点別に」「観点ごとに」「徹底的に」「徹底レビュー」「deeply」「detailed」「thoroughly」「--detailed」などのキーワードが含まれている場合のみ detailed を採用し、それ以外は normal とする(ユーザーへの追加確認はしない)。どちらのモードでも Step 1(取得元・動作確認実施可否)と Step 9(出力先)の 3 点確認は同じ手順で行う。
どちらのモードでも、リポジトリ共通のレビュー観点(docs/REVIEW.md)と PR 固有のレビュー観点(PR 本文の <!-- REVIEW_FOCUS --> ブロック)は観点として扱う。
mcp__github__*, mcp__github_inline_comment__*, mcp__github_comment__* などのツール)gh CLI(gh auth login 済み、repo スコープ以上)git CLI が利用でき、ベースブランチ(main / master / develop など)と比較できる状態であること。GitHub 認証は不要。GitHub MCP が使える場合は必ず MCP を優先すること。MCP が使えない環境ではghAPI /gh prにフォールバックする。同じセッション内で MCP とghを混在させるのは避け、原則どちらか一方に統一する。
すべての指摘を以下の3段階で分類し、コメント先頭に必ずタグを付ける。
分類の運用ルール:
\\suggestion \\\)で具体的な修正提案を示す。[Step 0: REVIEW_MODE の判定(依頼文のキーワードから自動。既定 normal)]
→ [Step 1: レビュー対象ソース + 動作確認実施可否の確認] ← ユーザーに確認
→ [Step 2: 対象の特定(PR またはローカル差分)]
→ [Step 3: 実行環境の確認(MCP / gh / git のみ)]
→ [Step 4: レビュー開始通知(GitHub 取得時のみ、既定はスキップ)]
→ [Step 5: 共通レビュー観点の読み込み(docs/REVIEW.md)]
→ [Step 6: 固有観点の抽出(<!-- REVIEW_FOCUS -->)]
→ [Step 7: 差分・関連ファイルの取得(ソースに応じて分岐)]
→ [Step 8: subagent による並行/段階実施 — REVIEW_MODE で分岐]
▼ REVIEW_MODE=normal(既定)
Phase 8-1(全て並行):
├─ subagent A_review : 10 観点を 1 本で横断レビュー
└─ subagent B : 動作確認(REVIEW_VERIFY=yes の時のみ)
Phase 8-2(A_review 完了後):
└─ subagent C_review : A_review のメタレビューを 1 本で
▼ REVIEW_MODE=detailed(キーワード明示時のみ)
Phase 8-1(全て並行、最大 11 本):
├─ subagent A_correctness : コード正確性
├─ subagent A_conventions : プロジェクト規約への準拠
├─ subagent A_performance : パフォーマンスへの影響
├─ subagent A_test_coverage : テストカバレッジ
├─ subagent A_security : セキュリティ
├─ subagent A_error_handling : エラーハンドリング
├─ subagent A_readability : 可読性・保守性
├─ subagent A_simplify : シンプル化
├─ subagent A_repo_common : docs/REVIEW.md がある場合のみ
├─ subagent A_pr_specific : REVIEW_FOCUS が抽出できた場合のみ
└─ subagent B : 動作確認(REVIEW_VERIFY=yes の時のみ)
Phase 8-2(全 A_i 完了後、全て並行):
└─ subagent C_i × 起動された A_i の数: 観点ごとのメタレビュー
(誤検知排除 / 重要度見直し / 文言改善 / 観点内の漏れ補完)
→ [Step 9: 出力先の確認(GitHub コメント / コンソール表示のみ)] ← ユーザーに確認
→ [Step 10: 結果の統合と出力 — REVIEW_MODE で分岐]
├─ GitHub: インラインコメント投稿 → レビュー提出(サマリ本文、動作確認結果含む)
└─ コンソール: インライン相当の指摘一覧 + サマリをターミナルに表示
→ [Step 11: 完了通知 / 後片付け]重要: Step 1 の 2 問(取得元・動作確認実施可否)と Step 9(出力先)の計 3 点の確認はスキル実行中に必ずユーザーに問い合わせること。ユーザーが最初のリクエスト内で明示している項目については、その意図を 1 行で復唱するに留め、確認の往復は省略してよい(例: 「ローカルの変更を動作確認なしでレビューして、結果はコンソールだけに表示して」→ 全項目を復唱して即開始)。
REVIEW_MODE はユーザーに尋ねない。依頼文に detailed トリガーキーワード(後述 Step 0)が含まれているかを Claude が読み取って自動で決定する。スキル開始時の最初のテキストで「通常モードでレビューします」「詳細モードでレビューします(観点ごとに subagent を起動)」を 1 行で明示すること。
ユーザーへの確認はしない。スキル起動時の依頼文(ユーザーの直近メッセージ)を読み取り、以下のいずれかのキーワード / 表現が含まれていれば `REVIEW_MODE=detailed`、それ以外は `REVIEW_MODE=normal` とする。
判定対象のキーワード(大文字小文字・全半角は問わない、いずれか 1 つでもマッチすれば detailed):
detailed, deeply, thoroughly, in detail, per-perspective, perspective by perspective--detailed, -d(単独で渡された場合)判定の運用ルール:
detailed を採用する。逆に「normal にしてほしい」「シンプルに」と書かれていれば明示的に normal(detailed トリガーが同時にある場合は明示の優先順位はユーザーの最後の指示に従う)。通常モード(1 subagent でレビュー + 1 subagent でメタレビュー)でレビューを開始します詳細モード(観点ごとに subagent を起動)でレビューを開始します選択したモードを以降のステップで REVIEW_MODE として参照する(値: normal / detailed)。
モード切替が必要になった場合、ユーザーが途中で「やっぱり詳細にやって」「シンプルでいい」と指示することがある。その時点で REVIEW_MODE を切り替え、Step 8 をやり直す。既に Step 8-1 / 8-2 を完了している場合は再実行のコスト(subagent 起動)が発生するため、ユーザーにその旨を 1 行伝えてから進める。スキル実行の最初に、以下 2 点をまとめてユーザーに確認する。ユーザーの最初のリクエスト内で既に明示されている項目は、その意図を 1 行で復唱して確認の往復は省略してよい(例: PR URL が渡された → 取得元は GitHub / 「手元の変更」「今の差分」と言われた → ローカル / 「動作確認なしで」「静的レビューだけでいい」と言われた → 動作確認なし)。両方が明示されている場合は 1 行の復唱で Step 2 に進んでよい。
確認フォーマット(例):
次の 2 点を選んでください:
1. レビュー対象の取得元:
(a) GitHub の PR から取得(要: GitHub MCP または gh CLI 認証済み)
(b) ローカルの git diff から取得(PR 番号なしでレビュー可能)
2. 動作確認(テスト / lint / 型チェック / ビルド等の実行検証):
(c) 実施する(推奨 — 差分を静的に読むだけでは気付けない実行時の問題を検出)
(d) 実施しない(静的レビューのみ。動作確認を別の手段で既に済ませている / 時間短縮を優先 / 実行環境が整っていない 等)ユーザーの選択をそれぞれ以下の変数として以降のステップで参照する:
REVIEW_SOURCE(値: github / local)REVIEW_VERIFY(値: yes / no) — Step 8 で subagent B(動作確認)を起動するかを決める分岐の要点:
REVIEW_SOURCE=github の場合 → Step 2-GitHub / Step 3-GitHub / Step 7-GitHub に進むREVIEW_SOURCE=local の場合 → Step 2-Local / Step 3-Local / Step 7-Local に進む(GitHub 認証は不要)REVIEW_VERIFY=yes の場合 → Step 8 Phase 8-1 で観点別 A_i 群 + subagent B を全て並行で起動するREVIEW_VERIFY=no の場合 → Step 8 Phase 8-1 で subagent B は起動せず、観点別 A_i 群のみを並行起動する。Phase 8-2 の C_i 群は通常どおり実行。サマリ・出力の「動作確認」欄は「⚠️ 動作確認は未実施(ユーザー選択によりスキップ)」と明示する迷った場合は REVIEW_VERIFY=yes(実施)を推奨する。テスト失敗や型エラーのような実害のあるリグレッションは、静的レビューだけでは拾いきれない。ただし、本スキル起動より前にすでにテスト / lint / ビルドを通していて、結果に自信がある場合はスキップして差し支えない。REVIEW_SOURCE=github)ユーザーからの入力(PR URL、PR 番号、あるいは「この PR」などの指示)から、レビュー対象のリポジトリと PR 番号を特定する。
https://github.com/OWNER/REPO/pull/NUMBER を分解するOWNER/REPO#NUMBER を尋ねる# カレントリポジトリの特定
gh repo view --json nameWithOwner -q '.nameWithOwner'
# PR 番号未指定で、カレントブランチに紐づく PR を探す場合
gh pr status --json number,title,url#### Draft PR の扱い
PR が Draft 状態の場合は、書きかけの可能性が高い。以下のいずれかで進める:
REVIEW_SOURCE=local)レビュー対象となるローカル差分の範囲を特定する。
main → master → develop → origin/HEAD)。git symbolic-ref refs/remotes/origin/HEAD や git branch --show-current を参考にしつつ、曖昧ならユーザーに確認する。git merge-base <base> HEAD)以降の差分。git diff <base>...HEAD に加えて git diff HEAD(未コミット分)、git diff --cached(ステージ済み分)もレビュー対象にするかユーザーに確認する。# 現在のブランチ / HEAD SHA
git branch --show-current
git rev-parse HEAD
# ベースブランチとのマージベース
git merge-base "${BASE_BRANCH}" HEADPR 番号は存在しないので、以降のステップでは「PR 固有観点」はユーザーが明示的に与えた場合のみ適用する(CLI 引数やメッセージで REVIEW_FOCUS: として渡された場合など)。
REVIEW_SOURCE=github または Step 9 で GitHub 出力を選ぶ可能性がある場合)GitHub 操作に使えるツールを確認し、以下の順で優先する。
mcp__github__*, mcp__github_inline_comment__*, mcp__github_comment__*, mcp__github_file_ops__*, mcp__github_ci__*gh にフォールバックするよりも、セッション全体を gh に揃えた方がシンプル。gh auth status で認証済みかを確認する。gh が使えればフォールバックとして gh を使う。ユーザーへの最初のテキスト出力で、「どちらを使ってレビューを進めるか」を1行で明示すること(例: GitHub MCP を使ってレビューを実施します)。この告知があることで、ユーザー側は途中で方式を切り替えたい場合に早めに指示を出せる。
REVIEW_SOURCE=local かつ Step 9 で GitHub 出力を選ばない見込みの場合)git CLI が利用可能であることだけ確認すれば十分。GitHub MCP / gh の認証確認はスキップしてよい。ユーザーへの最初のテキスト出力で ローカル git 差分を使ってレビューを実施します と明示する。
ただし、Step 9 で GitHub 出力に切り替わる可能性がある(ローカル差分に対する指摘を対応する PR に投稿したいケース)ので、gh / MCP が利用可能であればその情報は保持しておき、Step 9 で必要になったら改めて認証確認する。
既定ではスキップする。 以下のいずれかに該当する場合のみ実行する:
REVIEW_SOURCE=github である(ローカルモードの場合はそもそも PR タイムラインへの通知先が無いのでスキップ)不要な場合にまで「レビュー中」コメントやラベルを付けると、PR のタイムラインが汚れてノイズになる。CLI から個人が実行するケースや、小規模な PR では省略してよい。
mcp__github__add_issue_comment(または mcp__github_comment__update_claude_comment 相当)で「レビュー中」コメントを作成する。PR_NUMBER=<number>
REPO=<owner/repo>
# 👀 リアクションを付与
gh api "repos/${REPO}/issues/${PR_NUMBER}/reactions" -f content=eyes --silent || true
# 「claude-reviewing」ラベルを付与(存在しなければ作成)
gh label create "claude-reviewing" --repo "${REPO}" \
--description "Claude コードレビュー実施中" --color "FFA500" --force || true
gh pr edit "${PR_NUMBER}" --repo "${REPO}" --add-label "claude-reviewing" || true
# 「レビュー中」コメントを投稿して ID を控える
COMMENT_BODY='## 🔍 コードレビュー中
Claude がこのPRのコードレビューを実施しています。
完了次第、レビュー結果をサマリとしてコメントします。
> ⏳ しばらくお待ちください...'
COMMENT_ID=$(gh api "repos/${REPO}/issues/${PR_NUMBER}/comments" \
-f body="${COMMENT_BODY}" --jq '.id')
echo "$COMMENT_ID"レビュー完了時(Step 11)に、この「レビュー中」コメント・ラベルを削除する。
Step 4 をスキップした場合は、Step 11 での後片付けも不要。
リポジトリ直下に docs/REVIEW.md が存在する場合、その内容を「リポジトリ共通レビュー観点」として読み込み、Step 8 のレビュー指摘の洗い出しで必ず参照する。
# 存在確認
test -f docs/REVIEW.md && echo "found" || echo "missing"存在する場合は Read ツールで全文を取得し、以降のレビューで参照する。違反がある場合は該当する観点を明示する。存在しない場合は (docs/REVIEW.md が見つかりませんでした。スキップします) と扱い、汎用的なベストプラクティスのみを適用する。
REVIEW_SOURCE=github)PR 本文の中から <!-- REVIEW_FOCUS --> と <!-- /REVIEW_FOCUS --> に挟まれたブロックを抽出し、「PR 固有のレビュー観点」として扱う。
#### MCP の場合
mcp__github__get_pull_request などで PR 本文を取得し、正規表現で <!-- REVIEW_FOCUS -->...<!-- /REVIEW_FOCUS --> を抽出する。#### gh CLI の場合
PR_BODY=$(gh pr view "${PR_NUMBER}" --repo "${REPO}" --json body -q '.body')
echo "$PR_BODY" | sed -n '/<!-- REVIEW_FOCUS -->/,/<!-- \/REVIEW_FOCUS -->/{
/<!-- REVIEW_FOCUS -->/d
/<!-- \/REVIEW_FOCUS -->/d
p
}' | sed '/^$/d'REVIEW_SOURCE=local)PR 本文が存在しないので、以下の順で固有観点を探す:
<!-- REVIEW_FOCUS -->...<!-- /REVIEW_FOCUS --> ブロックが含まれているか(git log <base>..HEAD --pretty=%B で列挙)。REVIEW_FOCUS.md(または .review-focus.md)が存在するか。見つかった場合は内容を「固有のレビュー観点」として扱う。どれも存在しなければ、ユーザーに「特に重点的にレビューしてほしい観点はありますか?(無ければそのまま進めます)」と 1 回だけ軽く確認してよい(既にユーザーが観点を明示している場合は省略)。
抽出できた場合: そのブロックの内容を Step 8 で特に重点的にチェックし、該当する指摘には「固有観点」である旨を明示する。 抽出できなかった場合: (固有のレビュー観点は指定されていません) として扱い、共通観点 + 汎用ベストプラクティスのみで進める。
レビュー対象となる差分を取得し、必要に応じて周辺コードも読み込む。
REVIEW_SOURCE=github)#### MCP の場合
mcp__github__get_pull_request_diff で差分を取得する。mcp__github__get_pull_request_files で変更ファイル一覧(追加/変更/削除)を取得する。Read / Grep で追う。#### gh CLI の場合
# 差分(パッチ形式)
gh pr diff "${PR_NUMBER}" --repo "${REPO}" --patch > /tmp/pr_${PR_NUMBER}.patch
# 変更ファイル一覧
gh pr view "${PR_NUMBER}" --repo "${REPO}" --json files -q '.files[].path'
# PR メタ情報
gh pr view "${PR_NUMBER}" --repo "${REPO}" --json number,title,body,author,baseRefName,headRefName,state,isDraftREVIEW_SOURCE=local)git コマンドで差分・変更ファイル一覧・メタ情報を取得する。PR 番号は存在しない点に注意。
BASE_BRANCH="${BASE_BRANCH:-main}"
HEAD_BRANCH=$(git branch --show-current)
HEAD_SHA=$(git rev-parse HEAD)
MERGE_BASE=$(git merge-base "${BASE_BRANCH}" HEAD)
# 差分(パッチ形式) — コミット済みの変更
git diff "${MERGE_BASE}...HEAD" > /tmp/local_review.patch
# 未コミット変更も含める場合(ユーザー指示がある場合のみ)
# git diff "${MERGE_BASE}" > /tmp/local_review.patch
# 変更ファイル一覧
git diff --name-only "${MERGE_BASE}...HEAD"
# コミットログ(レビュー時のコンテキスト把握用)
git log "${MERGE_BASE}..HEAD" --pretty='%h %s (%an)'レビュー対象範囲の選択:
${MERGE_BASE}...HEAD のコミット済み差分。git diff "${MERGE_BASE}"(作業ツリー全体との差分)を対象にする。差分ファイルが多い場合は全行を一度にレビューしようとせず、差分のまとまり(hunk)ごとに検討を進める。
判断に必要な周辺コード(定義元、呼び出し元、関連テスト など)は以下の順で取りに行く:
Read / Grep で読む。最速かつ確実。git rev-parse HEAD で取得した SHA が gh pr view <NUM> --json headRefOid -q '.headRefOid' と一致するか確認する。mcp__github__get_file_contents(または同等のファイル取得ツール)で PR head の生ファイルを取得する。gh api "repos/${REPO}/contents/<PATH>?ref=${HEAD_SHA}" --jq '.content' | base64 -d などで取得する。Step 7 までで揃えたコンテキスト(メタ情報、差分、変更ファイル一覧、共通観点、固有観点、head SHA)を入力として、Phase 8-1 でレビュー subagent 群と動作確認 subagent B を並行起動し、Phase 8-2 で対応する評価 subagent を起動するという 2 フェーズ構成で実施する。起動本数とプロンプトの粒度は `REVIEW_MODE` で異なる。すべて general-purpose subagent を使い、Agent ツールの description と prompt は後述のテンプレートに従う。
レビュー観点は両モードとも以下 10 観点で構成する。通常モードはこの 10 観点を 1 本の subagent で横断的にレビューする。詳細モードは 1 観点 1 subagent で並列にレビューする。前半 5 観点は Claude Code 組み込みの /review コマンド由来の基本観点、後半 5 観点はリポジトリ固有・品質深掘りの観点。
| ID | 観点名 | 由来 | 通常モードでの扱い | 詳細モードでの扱い |
|---|---|---|---|---|
correctness | コード正確性 | /review 基本 | A_review に統合 | A_correctness を常時起動 |
conventions | プロジェクト規約への準拠 | /review 基本 | A_review に統合 | A_conventions を常時起動 |
performance | パフォーマンスへの影響 | /review 基本 | A_review に統合 | A_performance を常時起動 |
test_coverage | テストカバレッジ | /review 基本 | A_review に統合 | A_test_coverage を常時起動 |
security | セキュリティ | /review 基本 | A_review に統合 | A_security を常時起動 |
error_handling | エラーハンドリング | 上乗せ | A_review に統合 | A_error_handling を常時起動 |
readability | 可読性・保守性 | 上乗せ | A_review に統合 | A_readability を常時起動 |
simplify | シンプル化(再利用 / 品質 / 効率) | 上乗せ | A_review に統合 | A_simplify を常時起動 |
repo_common | リポジトリ共通観点(docs/REVIEW.md) | 上乗せ | docs/REVIEW.md があれば A_review に統合 | docs/REVIEW.md があれば A_repo_common を起動 |
pr_specific | PR / リクエスト固有観点(<!-- REVIEW_FOCUS --> 等) | 上乗せ | REVIEW_FOCUS が抽出できれば A_review に統合 | REVIEW_FOCUS が抽出できれば A_pr_specific を起動 |
各観点の具体的なチェック項目は references/subagents.md を参照。
REVIEW_MODE=normal、既定)#### Phase 8-1: 横断レビュー + 動作確認(並行)
repo_common / pr_specific も対応するインプットがあれば含める)すべてをこの 1 本に担当させ、findings[] を返させる。各 finding には category(観点 ID)を必ず付ける。REVIEW_VERIFY=yes の時のみ起動する。A_review との並列実行で総時間を圧縮するため、同じメッセージ内で並列起動する。実装上の必須要件: A_review と B は依存関係がないので、REVIEW_VERIFY=yes の場合は 1 つのメッセージ内で 2 つの Agent ツール呼び出しをまとめ、並列に起動する。順次起動すると単純に総時間が伸びる。REVIEW_VERIFY=no の時は A_review のみを起動する。
起動後は両方の結果が戻るまで待つ。Step 9 の出力先確認は、Phase 8-1 実行中 / 完了直後に差し込んでよい。
#### Phase 8-2: メタレビュー(subagent C_review)
Phase 8-1 で起動した A_review の結果に対して、評価 subagent C_review を 1 本だけ起動する。A_review が成功した場合のみ C_review を起動する(A_review が失敗していれば C_review は起動しない)。
C_review は A_review の出力(findings[] と overall_comment)、および差分・共通観点・固有観点を入力として、以下を検出・提案する:
invalid と判定。revised_severity を提案。revised_body を提案。missing_findings[] として追加する。通常モードでは C_review が観点横断で漏れを拾えるため、A_review が見落とした任意の観点の論点を追加してよい(詳細モードの C_i のような観点限定はない)。per_perspective_quality[] として、観点 ID × overall_quality(excellent / good / needs_improvement)の配列を返す。これによりサマリのメタレビュー表を観点ごとに 1 行ずつ書ける。overall_quality と overall_comment(A_review 全体の総評)。C_review は subagent B(動作確認)の結果を入力に含めない(責務分離のため)。C_review は実行検証も行わず、純粋に A_review の出力と差分に基づく机上レビューに徹する。
返却 JSON スキーマと Agent プロンプトテンプレートは references/subagents.md と references/subagents.md を参照。
REVIEW_MODE=detailed、キーワード明示時のみ)#### Phase 8-1: 観点別レビュー + 動作確認(全部並行)
REVIEW_VERIFY=yes の時のみ起動する。観点別 A_i との並列実行で総時間を圧縮するため、A_i 群と同じメッセージ内で並列起動する。実装上の必須要件: A_i 群と B は依存関係がないため、1 つのメッセージ内で複数の Agent ツール呼び出しをまとめ、並列に起動する。順次起動するとレビュー観点数 + 動作確認分だけ単純に総時間が伸び、本スキルの実用性を失う。
並列起動の上限に到達して全件を 1 メッセージで起動できない場合は、起動条件を満たす全 A_i + B を起動できる最大本数で並列バッチに分割して連続的に流す(例: 5 本ずつ 2 バッチ)。1 観点 1 観点を順に起動するのは禁止。
起動後は全 A_i と B の結果が戻るまで待つ。Step 9 の出力先確認は、Phase 8-1 実行中 / 完了直後に差し込んでよい。
「起動条件: 常時」とは、REVIEW_SOURCEの値(github / local)やREVIEW_VERIFYの値にかかわらず必ず A_i を 1 つ起動するという意味。repo_commonとpr_specificは対応するインプットが空のときに起動しても無駄なので、その場合のみスキップする。
#### Phase 8-2: 観点別の結果評価(subagent C_i)
Phase 8-1 で起動した各 A_i の結果ごとに、対応する評価 subagent C_i を 1 本ずつ起動する。C_i は A_i と 1:1 対応しており、A_i が起動された観点だけ C_i も起動する(A_repo_common が起動されなかった場合は C_repo_common も起動しない)。
C_i は対応する A_i の出力(findings[] と overall_comment)、および差分・共通観点・固有観点を入力として、以下を検出・提案する:
invalid と判定。revised_severity を提案。revised_body を提案。missing_findings[] として追加。担当観点の範囲外(例: C_security が可読性の論点を追加する等)は基本的に禁止。overall_quality(excellent / good / needs_improvement)とコメント。各 C_i は subagent B(動作確認)の結果と、他観点の A_j / C_j の結果を入力に含めない(責務分離と並列性のため)。C_i は実行検証も行わず、純粋に A_i の出力と差分に基づく机上レビューに徹する。
C_i 群も並列起動が原則。A_i 群が全件返ってきた時点で、対応する C_i 全部を 1 メッセージ内で並列起動する。A_i が早く返ってきたものから順次 C_i を打つ「段階起動」は、メイン側の管理コストが増えるだけで意味がないので採用しない(Agent ツールの完了待ちはメインメッセージ単位で行うほうがシンプル)。
返却 JSON スキーマと Agent プロンプトテンプレートは references/subagents.md を参照。
security)と観点定義を明示し、「他観点の問題に気付いても本観点の指摘としては出さない」ことを徹底させる。これにより同じ問題が複数の A_i から重複して上がるのを抑制する(完全には消えないので、Step 10 で重複統合する)。通常モードの A_review は 10 観点を横断的に見るため、観点境界の制約はない。代わりに各 finding に category(観点 ID)を必ず付与する。findings[].category は観点 ID(security / correctness 等)に揃えること。/tmp/ に書き出してパスだけ返すよう指示する。REVIEW_MODE=detailed のとき、各レビュー subagent(A_i)とメタレビュー subagent(C_i)のプロンプトには ultrathink キーワードを含め、拡張思考で深く分析させる(テンプレートに既に埋め込まれている)。動作確認の subagent B は実行検証が主目的なので ultrathink の対象外。通常モード(A_review / C_review)も対象外。ローカル差分(PR 番号なし) とする。subagent には「GitHub にアクセスする必要はなく、ローカルの Read / Grep / git のみを使うこと」を明記する。#### A_review(通常モード)
A_review は 10 観点すべてを 1 本で担当する。差分を読み込み、各観点のチェック項目に照らして該当する指摘を findings[] に列挙する。各 finding には category(観点 ID)を必ず付与し、Step 10 で観点別件数の集計に使う。
overall_comment には、PR が何をしているかの概要・良い点・主要リスクを含めた観点横断の総評を 1〜5 文で返す。動作確認は subagent B が並列で行うので、A_review はテスト実行等を行わない。
返却 JSON スキーマと Agent プロンプトテンプレートは references/subagents.md を参照。
#### A_i(詳細モード)
各 A_i は 担当観点 1 つに絞って差分を読み、その観点に該当する指摘のみを洗い出す。動作確認(テスト実行など)は行わず、静的分析と観点レビューに専念する。
担当観点の具体的なチェック項目は references/subagents.md を参照。プロンプトには {PERSPECTIVE_ID} と {PERSPECTIVE_DEFINITION} を埋め込み、当該観点の定義を必ず subagent に渡す。
#### サマリ本文に含める要素(/review コマンド準拠)
Claude Code 組み込みの /review コマンドは「PR が何をしているかの概要」「コード品質・スタイルの分析」「具体的な改善提案」「潜在的な問題・リスク」を 1 つのレビューに含めることを求めている。本スキルの最終サマリ(Step 10 の「💬 総評」および各カテゴリの指摘)もこの 4 要素が読み取れる構成にすること。
overall_comment で PR 概要・良い点・観点横断の主要リスクをまとめて返す。findings[] の各エントリで具体的な改善提案(必要に応じて GitHub suggestion ブロック)を示す。overall_comment に当該観点での総評・主要リスクを 1〜3 文で記述し、findings[] の各エントリで具体的な改善提案を示す。観点横断の「PR 概要」はメインフローが Step 10 で組み立てる。洗い出した各指摘について、🔴 MUST / 🟡 SHOULD / 🟢 NICE TO HAVE のいずれかに分類する。分類が迷う場合は、より重いほうに倒す前に「実害があるか」「回避可能か」を自問し、実害があるものだけを MUST にする。
返却 JSON スキーマと Agent プロンプトテンプレートは:
references/subagents.mdreferences/subagents.md差分を静的に読むだけでは気付けない実行時の問題を検出することが目的。対象 head を手元に展開し、リポジトリのビルド / テスト / lint / 型チェックを実際に実行する。
REVIEW_SOURCE=github の場合: 可能なら gh pr checkout でチェックアウト、または git fetch + git checkout。REVIEW_SOURCE=local の場合: 既にワークツリーが対象なのでそのまま実行する。未コミット変更を含めるかは Step 7-Local での選択に従う。動作確認の観点例(プロジェクトに存在するものだけを実行する。存在しないものはスキップしてその旨を報告する):
go build, npm run build, cargo build, ./gradlew build など)golangci-lint run, npm run lint, ruff check, eslint などtsc --noEmit, mypy, pyright など--help が返る、依存注入が成功する等)。本格的な E2E や長時間走るベンチはスキップしてよい。実行前に以下を確認:
gh pr checkout {NUMBER} を提案・実行)。ユーザーのローカル変更を破壊する恐れがある場合は、実行前にチェックアウトしてよいか確認する指示を subagent に入れる。ローカルモード: ワークツリーをそのまま使う前提。ユーザーに追加の checkout を要求しない。
package.json / Makefile / pyproject.toml / go.mod / Cargo.toml / build.gradle 等)。skipped[] に記録する。返却 JSON スキーマと Agent プロンプトテンプレートは references/subagents.md を参照。
#### C_review(通常モード)
C_review は対応する A_review 1 本のみ を評価対象とする。入力は A_review の返却 JSON 全体(findings[] と overall_comment)、および差分・共通観点・固有観点。通常モードでは観点境界の制約はないため、観点横断で漏れを拾える:
per_perspective_quality[] として、観点 ID × overall_quality を返す。サマリのメタレビュー表用。評価の出力は、各 finding について valid / invalid / adjust_severity / improve_wording のいずれかの verdict と根拠を返す。missing_findings[] で A_review が拾わなかった追加指摘も返す。
C_review は subagent B(動作確認)の結果を入力に含めない(責務分離のため)。実行検証も行わず、差分と A_review の出力に対する机上レビューに徹する。
返却 JSON スキーマと Agent プロンプトテンプレートは references/subagents.md を参照。
#### C_i(詳細モード)
各 C_i は対応する A_i 1 本のみ を評価対象とする(観点横断の評価は行わない)。入力は対応する A_i の返却 JSON 全体(findings[] と overall_comment)、および差分・共通観点・固有観点。担当観点の範囲内で以下を検出・提案する:
評価の出力は、各 finding について valid / invalid / adjust_severity / improve_wording のいずれかの verdict と根拠を返す。missing_findings[] で A_i が拾わなかった追加指摘も返す(担当観点の範囲に限る)。
各 C_i は subagent B(動作確認)の結果と、他観点の A_j / C_j の結果を入力に含めない(責務分離と並列性のため)。C_i は実行検証も行わず、差分と A_i の出力に対する机上レビューに徹する。観点横断の重複整理・優先度調整は Step 10 でメインフローが担当する。
返却 JSON スキーマと Agent プロンプトテンプレートは references/subagents.md を参照。
#### 通常モード(REVIEW_MODE=normal)
REVIEW_VERIFY=yes のとき): サマリの動作確認欄に ⚠️ 動作確認は失敗(理由を記載) と注記し、A_review / C_review の結果で Step 10 に進む。⚠️ メタレビューは未適用(C_review 失敗) と注記する。#### 詳細モード(REVIEW_MODE=detailed)
観点別に分割したことで失敗の影響範囲が「観点単位」に限定される点が大きな違い。1 観点が失敗しても他観点と動作確認は通常どおり進める。
⚠️ {観点名} 観点のレビューは失敗 と注記し、対応する C_i も起動しない。REVIEW_VERIFY=yes のとき): サマリの動作確認欄に ⚠️ 動作確認は失敗(理由を記載) と注記し、A_i / C_i の結果で Step 10 に進む。⚠️ {観点名} 観点のメタレビューは未適用 と注記する。subagent の結果が出揃った段階で、レビュー結果の出力先をユーザーに確認する。ユーザーの最初のリクエスト内で既に明示されている場合は、その意図を 1 行で復唱して確認の往復は省略してよい(例: 「コンソールに出すだけで」→ コンソール / 「PR にコメントして」→ GitHub)。
確認フォーマット(例):
レビュー結果の出力先を選んでください:
(a) GitHub にインラインコメント + サマリレビューとして投稿する
(b) コンソールに表示するのみ(GitHub には何も投稿しない)ユーザーの選択を REVIEW_OUTPUT として参照する(値: github / console)。
REVIEW_OUTPUT=github かつ REVIEW_SOURCE=local の場合: 投稿先の PR が必要になるので、ユーザーに PR URL / 番号を追加で尋ね、Step 2-GitHub / Step 3-GitHub 相当の情報(REPO, PR_NUMBER, HEAD_SHA)を補完する。対応する PR が見つからない、または head SHA がローカルと食い違う場合はインラインコメント投稿に問題が出るため、ユーザーに確認する。REVIEW_OUTPUT=console の場合: GitHub 認証 / MCP / gh は一切不要。以降の処理はローカルで完結させる。選択結果に応じて Step 10 を分岐させる。
各 subagent(A_review / C_review、または A_i / C_i / B)が返した構造化データをメインフロー側で統合してから、選択された出力先に対して結果を出す。投稿・出力は必ずメインフローが行い、subagent に任せない。統合の細部は `REVIEW_MODE` で異なる。
REVIEW_MODE=normal)通常モードでは A_review と C_review がそれぞれ 1 本ずつなので、観点横断の重複統合フェーズは不要。順序は以下のとおり:
(N-1) C_review の評価を A_review の findings に適用する
evaluations[].verdict == "invalid" の finding は最終出力から除外する。verdict == "adjust_severity" の finding は revised_severity を採用して severity を差し替える。verdict == "improve_wording" の finding は revised_body を採用して本文を差し替える。verdict == "valid" の finding はそのまま採用する。missing_findings[] は A_review の findings と同じ扱いで「最終 findings」に追加する(source は subagent C_review(漏れ補完) とする。category は missing_finding 側に書かれた観点 ID)。⚠️ メタレビューは未適用(C_review 失敗) と注記する。invalid 件数 / adjust_severity 件数 / improve_wording 件数 / missing_findings 件数)と per_perspective_quality[] を保持し、サマリの「🔎 メタレビュー」欄で観点ごとに 1 行ずつ列挙する。/tmp/review_subagents_<timestamp>.json にまとめて保存する(ユーザーが判断に違和感を持った時に追跡できるようにするため)。(N-2) 観点横断の優先度調整と既存コード由来の扱い
correctness × MUST、security × MUST、テスト失敗等の「マージブロッカー」と判断できる指摘を、サマリの「🚨 マージブロッカー」セクションに観点横断で抜粋して列挙する。(N-3) subagent B の findings を結合する(REVIEW_VERIFY=yes の時のみ)
REVIEW_VERIFY=no の場合はこの (N-3) をスキップする。(N-4) 総評を組み立てる
overall_comment は既に観点横断の総評なので、これをベースに以下を補足する:overall_comment で言及済みであれば再掲しない)。per_perspective_quality[] から最も低い観点を 1 つ言及(例: 観点別品質: performance が needs_improvement、その他は good 以上)。REVIEW_MODE=detailed)統合は以下の順に行う:
(D-1) 観点ごとに C_i の評価を A_i の findings に適用する
各観点 i について、A_i と対応する C_i のペアで以下を実施する:
evaluations[].verdict == "invalid" の finding は最終出力から除外する。verdict == "adjust_severity" の finding は revised_severity を採用して severity を差し替える。verdict == "improve_wording" の finding は revised_body を採用して本文を差し替える。verdict == "valid" の finding はそのまま採用する。missing_findings[] は A_i の findings と同じ扱いで「観点 i の最終 findings」に追加する(source は subagent C_{i}(漏れ補完) とする。category は観点 ID i)。⚠️ {観点名} 観点のメタレビューは未適用 と注記する。invalid 件数 / adjust_severity 件数 / improve_wording 件数 / missing_findings 件数 / overall_quality)はサマリの「🔎 メタレビュー」欄で観点ごとに 1 行ずつ列挙する。/tmp/review_subagents_<timestamp>.json にまとめて保存しておく(ユーザーが C_i の判断に違和感を持った時に追跡できるようにするため)。(D-2) 観点横断の重複統合
観点別 A_i は独立に動くので、同じ問題が複数観点から指摘されるケースが発生し得る(例: SQL インジェクションが security と correctness の両方から)。path × line × 「本文の意味的な重複」で重複を検出し、以下のルールで 1 件に統合する:
{observed_categories} の観点からも該当」と注記する。path × line が完全一致でも、意味的に独立した別問題(例: 同じ行で SQL インジェクションと N+1 クエリの両方が指摘されている)の場合は統合せず、severity 順に並べて 1 ブロックに 2 つの指摘として出力する。
(D-3) 観点横断の優先度調整と既存コード由来の扱い
correctness × MUST、security × MUST、テスト失敗等の「マージブロッカー」と判断できる指摘を、サマリの「🚨 マージブロッカー」セクションに観点横断で抜粋して列挙する。(D-4) subagent B の findings を結合する(REVIEW_VERIFY=yes の時のみ)
REVIEW_VERIFY=no の場合はこの (D-4) をスキップする。(D-5) 観点横断の総評を組み立てる
各 A_i の overall_comment は当該観点に閉じた総評なので、メインフローでこれらを束ねて全体総評を作る:
overall_comment から、PR が何をしているか・良い点を 1〜2 文で要約する。overall_quality を観点ごとに 1 行で列挙(例: security: good / performance: needs_improvement / ...)。これらは Step 10-GitHub / Step 10-Console のサマリ「💬 総評」セクションに必ず含めること。
REVIEW_OUTPUT=github)全指摘をインラインコメントとして投稿したうえで、サ�
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.