adversarial-review について
Claude Code または Codex 向けのコードレビュー用スキルです。Claude と GPT/Codex が独立してレビューし、指摘を相互に検証したうえで人の判断に委ねます。
主な機能
- 01Claude と GPT/Codex による独立レビュー
- 02指摘の相互反証
- 03決定的な lint・型チェック
- 04確信度に基づく結果の統合
- 05コードの自動修正なし
活用シーン
- 01マージ前のブランチ差分レビュー
- 02指定範囲の変更ファイルの確認
- 03規則違反とモデル指摘の切り分け
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ basicmachines-co/ basic-memory --skill adversarial-reviewインストール後、Claude Code で/adversarial-reviewを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
prompts/refute.mdreview.mdschemas/findings.schema.jsonverdicts.schema.json詳細
敵対的コードレビュー
異なるモデルファミリーの 2 人のレビュアー、Claude と Codex/GPT が、同じ差分を個別にレビューし、次にそれぞれが相手の指摘を反証しようとします。指摘の信頼度は、この反対尋問を乗り越えられるかどうかで決まります。これにより、単独の LLM レビューで起きる 2 つの失敗モード、すなわち自己正当化(モデルは自分の成果を批判しない)と、自信に満ちた誤検出を防ぎます。
あなたはオーケストレーターであり、2 人のレビュアーのうちの 1 人です
このスキルは Claude Code または Codex のどちらからでも実行できます。まず、自分がどのモデルファミリーなのか(Claude または Codex/GPT)を特定します。次に:
- あなたはレビュアー #1 です。このセッションで、自身のツールを使ってネイティブにレビューします。
- もう一方のファミリーはレビュアー #2 です。独立したレビューのために、サブプロセス CLI として呼び出します。新しいプロセスで、コンテキストは共有されません。この独立性が重要です。
「もう一方のモデル」の CLI:
| あなたが… | もう一方を次の方法で呼び出す… |
|---|---|
| Claude | codex exec(GPT) |
| Codex | claude -p(Claude) |
それ以外の手順はすべて対称です。以下の prompts/ と schemas/ のパスは、このスキル自身のディレクトリ(この SKILL.md がある場所)を基準に解決してください。
入力
独立した、任意指定の入力が 2 つあります:
BASE— 差分を取る対象の ref。デフォルトはmainです。SCOPE— レビュー範囲を絞る pathspec(例:src/basic_memory)。デフォルトでは指定なし(差分全体)です。
これらは別々のものです。ref と pathspec は相互に置き換えられません。事前確認で正規の diff コマンドを一度だけ組み立て、以下のすべての箇所で再利用してください。diff コマンドをインラインで書き直してはいけません(表記が散在して一貫しなくなったことが、以前の問題の原因でした)。$SCOPE に空白や glob 文字が含まれていてもそのまま扱えるよう、文字列ではなく argv 配列として組み立ててください:
BASE="${BASE:-main}"
DIFF=(git diff "$BASE...HEAD") # argv array — never a scalar string
[ -n "$SCOPE" ] && DIFF+=(-- "$SCOPE") # pathspec stays one argument even with spaces
DIFF_STR=$(printf '%q ' "${DIFF[@]}") # shell-quoted rendering, for embedding in a prompt
実行する場合は "${DIFF[@]}" を使用します(引用符で囲み、単語分割しません)。サブプロセスのプロンプト内にテキストとして埋め込む場合は $DIFF_STR を使用します。
事前確認
- この SKILL.md があるディレクトリを
SKILL_DIRに設定します。正規の場所は.agents/skills/adversarial-review(共有エージェントスキルストア)です。Claude Code からは.claude/skills/adversarial-reviewのシンボリックリンク経由で、Codex からは独自のスキルパス経由でアクセスします。いずれの場合も、prompts/とschemas/のサブディレクトリはこのファイルと同じ階層にあります。 - もう一方のモデルの CLI が PATH 上にあることを確認します(自分が Claude なら
codex、Codex ならclaude)。見つからない場合は、パネルが単一モデルにフォールバックすること(ベンダーをまたぐメリットが失われること)をユーザーに伝え、続行するか中止するかを確認します。 "${DIFF[@]}"を実行します。何も出力されない場合は、「$BASE と比較してレビュー対象はありません」と報告します($SCOPEが設定されている場合は、それにも言及します)。その後、停止します。RUN=$(mktemp -d)— もう一方のモデルの出力用の一時ディレクトリです。一時的なもので、コミットしてはいけません。永続化される成果物も、状態ファイルもありません。
フェーズ 0 — 決定論的ゲート(モデルに渡す前)
モデルは否定表現(「X を決して行わない」)を統計的に見落としやすいため、プロンプトではなくツールを使って機械的にコーディング規則を適用し、検出結果は高信頼度の事実として扱います(モデルの指摘とは分けて報告します)。
- 差分が
src/に触れている場合は、just lintとjust typecheckを実行します。 - 差分を grep し、検出可能なコーディング規則違反を探します:デフォルト値を指定する
getattr(.*,.*,、裸のexcept:/except Exception: pass、関数スコープでの import。
フェーズ 1 — 個別レビュー(あなたともう一方のモデルが並行して実施)
両方のレビュアーに同じブリーフを渡します。prompts/review.md とリポジトリの
CLAUDE.md のルールに従い、"${DIFF[@]}" の差分をレビューします。どちらも
schemas/findings.schema.json に一致する指摘を出力します。
あなた自身のレビュー: prompts/review.md に従ってレビューします。指摘は
その JSON 形式で保持してください。
もう一方のモデルのレビュー — リポジトリのルートから、あなたに該当する行を実行します。
codex の標準入力は必ず /dev/null からリダイレクトしてください。標準入力がパイプの場合(呼び出しがバックグラウンドで実行される場合など)、codex exec は「標準入力から追加の入力を読み取り中...」の状態でブロックし、失敗します。
# You are Claude → run Codex:
codex exec -s read-only \
--output-schema "$SKILL_DIR/schemas/findings.schema.json" \
-o "$RUN/other_findings.json" \
"$(cat "$SKILL_DIR/prompts/review.md")
Review the diff: $DIFF_STR" </dev/null
# You are Codex → run Claude (read-only via plan mode; parse the JSON block it returns):
claude -p --permission-mode plan --output-format json \
"$(cat "$SKILL_DIR/prompts/review.md")
Review the diff: $DIFF_STR
Return ONLY a JSON object matching this schema:
$(cat "$SKILL_DIR/schemas/findings.schema.json")" </dev/null > "$RUN/other_raw.json"
# claude --output-format json output shape varies by CLI version: it may be a JSON ARRAY
# of event objects, OR a single result object. Normalize before reading: if it's an array,
# take the element with type=='result'; otherwise use the object as-is. Then read its
# .result string, strip the ```json fence if present, and parse that.
# (Verified empirically: the CLI in this environment emits the array form.)
Codex のオーケストレーションに関する実行時の注意:
claude -pにはネットワークアクセスが必要ですが、Codex のデフォルトのサンドボックスではブロックされます。ネットワークアクセスが許可された、プロジェクトを信頼済みとする Codex セッションから実行してください(または、プロンプトが表示されたらclaudeの呼び出しを承認してください)。Codex 自身のサンドボックスは有効のままにしてください。ネットワークに接続するためだけに、サンドボックスを回避してはいけません。
各指摘に、その起点(claude / codex)を付けてください。
フェーズ 2 — 相互反論
各モデルは、prompts/refute.md に従って、もう一方のモデルの指摘に反論します(判定は
schemas/verdicts.schema.json に一致させます)。
- あなたは、もう一方のモデルの指摘に自分で反論します。
- もう一方のモデルは、あなたの指摘に反論します。同じ方法でもう一度呼び出し
(
prompts/review.mdをprompts/refute.mdに置き換え、あなたの指摘 JSON と$DIFF_STRを追加して、適切なベースとスコープに照らして判断させます。Codex の場合は--output-schema "$SKILL_DIR/schemas/verdicts.schema.json"を使います)。
指摘との対応付けには id を使ってください。
フェーズ 3 — 統合して報告(自動修正はしない)
指摘を統合し、重複を除き(同じファイルで、行が重なり、根本原因が同じものは 1 件にまとめます)、出所に基づいて信頼度を割り当てます。
- 高 — 両方のモデルがそれぞれ独立して指摘した、または一方が指摘し、もう一方が支持した。
- 中 — 一方が指摘し、もう一方は反論できなかったが、独立しては発見しなかった。
- 低/論争あり — 一方が指摘し、もう一方が反論した。両方の見解を示して残し、人間の判断に委ねます。論争のある指摘を黙って削除してはいけません。
- 決定論的なゲートで検出されたものは、モデルの判定とは分けて、事実として報告します。
severity × confidence の順で並べます。簡潔な表を提示します。列は severity | confidence | file:line | claim | found-by / upheld-or-refuted-by です。信頼度の高い指摘については、why と
修正案があれば、それを詳しく説明します。
最後に、修正する指摘があるかどうかを尋ねます。ユーザーが選ぶまでコードを編集してはいけません。 モデル間で一致しても、それが正しいとは限りません。あなたの役割は、ブランチに問題がないと断言することではなく、順位付けされ、相互検証された指摘の一覧を提示することです。
意図的に実施しないこと
- 両方が一致するまでループすること(モデルは正しいからではなく、何も言わなくなることで収束します)。
- 成果物やステートマシンを永続化すること(作業用ディレクトリは破棄されます)。
- 修正を自動適用すること。