プロジェクト監査。「監査して」「audit」「/audit」で発火。設計/UX/品質/テストなどの観点でコードベース全体を監査し、課題をissuesディレクトリに書き出す。実行ログで重複実行を防止。特定の差分・コミットのレビューには使わない(codex-review / cross-review を使う)。
codex-review
codex exec review を基本に、必要なら codex exec を使ってコード変更のレビューを依頼し、指摘事項を報告する。通常 / 厳しめ (--strict) / 敵対的 (--adversarial、実装を壊しにいく red team) の 3 モードを持つ。
「codexでレビューして」「codex-review」「/codex-review」「敵対的にレビューして」で発火。Codex 単体での単独レビュー用途。複数エージェント並行レビューは cross-review、差分ではなくコードベース全体の監査は audit を使う。
含まれるファイル(2)
- SKILL.md22.7 KB
- templates/findings.schema.json964 B
SKILL.md(原文)
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Codex Review
起動したら最初に codex の枠を見る (
ratelimit -source codex -check。rc=1 のときの扱いはsubagent-model-tiering.mdの「枠の残量」)。
codex exec review を基本に、必要なら codex exec を fallback として使い、コード変更に対する Codex のレビューを取得する。
引数
$ARGUMENTS は自由テキスト。commit ID、差分の基点、重点的に見てほしい観点を含められる。
/codex-review → 未コミット変更をデフォルトレビュー
/codex-review --uncommitted → 未コミット変更をデフォルトレビュー
/codex-review abc1234 → 特定コミットをデフォルトレビュー
/codex-review abc1234..HEAD → 現在の HEAD に対する差分をデフォルトレビュー(--base abc1234)
/codex-review origin/master..HEAD → upstream との差分をデフォルトレビュー
/codex-review 削除ロジックの安全性を重点的に見て → 未コミット変更を重点レビュー
/codex-review abc1234 削除ロジックの安全性を重点的に見て → 特定コミットを重点レビュー
/codex-review --strict → 未コミット変更を厳しめにレビュー
/codex-review --adversarial → 未コミット変更を敵対的にレビュー(壊しにいく)
/codex-review abc1234 --adversarial → 特定コミットを敵対的にレビュー
手順
1. 引数のパース
$ARGUMENTS から以下を抽出する:
--uncommitted: 明示的にフラグがあれば未コミット変更をレビュー--strict: 厳しめレビューモード--adversarial: 敵対的レビューモード(「壊れている」前提で反証しにいく。「敵対的に」「壊しにいって」「red team で」等の自然文でも同じ扱い)。--strictと併記されたら--adversarialが優先(上位互換)- 基点付き差分:
{base}..HEADまたは{base}..{current_head_sha}形式のみ--base {base}として使用する。{base}は commit SHA でもブランチ名でもよい - 任意の差分範囲:
{base}..{target}で{target} != HEADの場合、codex exec reviewではそのまま表現できない。誤った差分をレビューしないため、そのまま--baseに変換せず、終点をHEADに合わせて実行するかをユーザーに確認する - commit ID: 7〜40文字の hex 文字列(
[0-9a-f]{7,40})が単独であれば--commit {sha}として使用 - カスタム指示: 上記以外のテキスト(レビュー指示に追記する)
- デフォルト: 何も指定がなければ
codex exec review --uncommittedで未コミット変更をレビュー。master 直作業の運用では、必要に応じてorigin/master..HEADのように基点を明示する - CLI 制約:
codex exec reviewは--base/--commit/--uncommittedと[PROMPT]を併用できない。selector を使う場合はプロンプトなしで実行する - コマンド選択:
- selector のみ:
codex exec review - selector なしで
--strict/--adversarialまたはカスタム指示あり:codex exec reviewのプロンプト付きモード - selector と
--strict/--adversarial/ カスタム指示が両方ある:codex exec -s read-onlyを使う
- selector のみ:
2. 出力先の準備
mkdir -p ./tmp
stamp="$(date +%Y%m%d-%H%M%S).$$"
review_out="./tmp/codex-review.$stamp.md"
- 出力ファイルは毎回ユニークなパスにする(
./tmpを使う理由は「ルール」参照)
3. レビューの実行
codex exec review を基本に使用する。--ephemeral -o "$review_out" は常に付与する(--full-auto は付けない。理由は「ルール」参照)。selector と追加指示を両立させる必要がある場合のみ、codex exec -s read-only を使う。
レビュー指示テンプレート
通常モード(プロンプト付き):
コードレビューして。バグ、リグレッション、仕様逸脱、テスト不足を優先。問題があるものだけを重要度順に列挙し、各項目に file:line、理由、最小修正案を書く。要約や称賛は不要。
厳しめモード(--strict):
厳しめにコードレビューして。バグ、データ破壊、クラッシュ、並行処理の不整合、仕様逸脱、テスト不足を優先。良い点の記述は不要。問題があるものだけを重要度順に列挙し、各項目に file:line、再現条件、理由、最小修正案を書く。
敵対的モード(--adversarial):
この変更は「壊れている」という前提で敵対的にレビューして。目的は感想を述べることではなく、壊れることを具体的に実証すること。
## やること
- この実装を壊す入力・状態・順序・タイミング・環境を自分で構築する(境界値 / 空・巨大・不正データ / 異常系 / 並行・再入 / 再送・二重実行 / 部分失敗 / リトライ / 再起動 / 権限・ネットワーク断 / 別プラットフォーム・別バージョン)
- コード・コメント・コミットメッセージ・テスト名にある主張(「〜は保証される」「対応済み」「検証済み」「ありえない」)を 1 件ずつ反証しにいく。反証できなかったものは「反証できなかった」と明記する
- テストが実装を追認しているだけでないか疑う: 自作エンコーダを自作デコーダで往復させるだけの循環テスト、常に真になるアサーション、本物の契約とずれたモック、失敗しても気づけないテスト
- 「問題なし」で終わらせない。壊せなかったなら、どこまで攻めて壊せなかったのかを書く
## 出力
問題ごとに: file:line / **発火条件**(具体的な入力・順序・環境。再現手順の形で)/ 何が壊れるか(データ破壊・クラッシュ・誤結果・ハング・サイレント不整合)/ 最小の構造的修正案。
発火条件を具体的に示せないものは **「未確認リスク」** として別セクションに分けて書く(確証のない断定をしない)。要約・称賛は不要。
カスタム指示がある場合は、テンプレートの末尾に追記する。
敵対的モードの effort の既定は high。xhigh / max が常に劣るとは断定しない。
未解決の不変条件に合う攻め口・実験を先に選び、effort を変えるときは codex-drive のモデル表にある比較手順を使う。
例外: 呼び出し側の skill が effort を指定していれば従う。完了は本数でなく、対象差分・重要な不変条件・採用指摘・未確認範囲を照合して判断する。1 本で足りる場合も「指摘なし」を正しさの証明にせず、未解決の重要項目があれば別 lens・実験を追加する。
実行モード
- デフォルトモード: 引数なしなら
codex exec review --uncommittedを使う - プロンプト付きモード: selector なしで実行する。未コミット変更に対して
--strict/--adversarialやカスタム指示を渡したい時に使う - selector モード:
--uncommitted/--commit/--baseを付けて実行する。この場合はプロンプトを付けない - fallback モード: selector と
--strict/--adversarial/ カスタム指示を両立させたい時はcodex exec -s read-onlyを使い、対象差分をプロンプト内で明示する
実行パターン
# 🚨 全パターンで `</dev/null` 必須(理由は下記「ルール」参照)
# パターン A: デフォルトの未コミットレビュー
command codex exec review -m gpt-6.1-sol -c model_reasoning_effort="high" --uncommitted --ephemeral -o "$review_out" </dev/null
# パターン B: プロンプト付きの未コミットレビュー
command codex exec review -m gpt-6.1-sol -c model_reasoning_effort="high" --ephemeral -o "$review_out" </dev/null \
'コードレビューして。バグ、リグレッション、仕様逸脱、テスト不足を優先。問題があるものだけを重要度順に列挙し、各項目に file:line、理由、最小修正案を書く。要約や称賛は不要。'
# パターン C: 特定コミットのデフォルトレビュー
command codex exec review -m gpt-6.1-sol -c model_reasoning_effort="high" --commit {sha} --ephemeral -o "$review_out" </dev/null
# パターン D: 現在の HEAD に対する差分のデフォルトレビュー
command codex exec review -m gpt-6.1-sol -c model_reasoning_effort="high" --base {base} --ephemeral -o "$review_out" </dev/null
# パターン E: 特定コミットを重点レビューする fallback
command codex exec -s read-only -m gpt-6.1-sol -c model_reasoning_effort="high" --ephemeral -o "$review_out" </dev/null \
'commit {sha} をコードレビューして。重点観点: {custom_instruction}。最初に `git show --stat --oneline {sha}` と必要な diff を確認してからレビューする。バグ、リグレッション、仕様逸脱、テスト不足を優先し、問題があるものだけを重要度順に列挙し、各項目に file:line、理由、最小修正案を書く。要約や称賛は不要。'
# パターン F: 基点付き差分を重点レビューする fallback
command codex exec -s read-only -m gpt-6.1-sol -c model_reasoning_effort="high" --ephemeral -o "$review_out" </dev/null \
'{base}..HEAD の差分をコードレビューして。重点観点: {custom_instruction}。最初に `git diff --stat {base}..HEAD` と必要な diff を確認してからレビューする。バグ、リグレッション、仕様逸脱、テスト不足を優先し、問題があるものだけを重要度順に列挙し、各項目に file:line、理由、最小修正案を書く。要約や称賛は不要。'
# パターン G: 未コミット変更の敵対的レビュー(selector なし・プロンプト付きモード)
command codex exec review -m gpt-6.1-sol -c model_reasoning_effort="high" --ephemeral -o "$review_out" </dev/null \
'<上記「敵対的モード」テンプレート全文>'
# パターン H: 特定コミット / 基点付き差分の敵対的レビュー(selector 併用なので fallback)
command codex exec -s read-only -m gpt-6.1-sol -c model_reasoning_effort="high" --ephemeral -o "$review_out" </dev/null \
'commit {sha}(または {base}..HEAD の差分)を対象に、<上記「敵対的モード」テンプレート全文>。最初に `git show --stat --oneline {sha}`(または `git diff --stat {base}..HEAD`)と必要な diff を確認してから始める。'
実行時の共通制約(command プレフィックス、</dev/null、タイムアウト等)は「ルール」を参照。
4. 結果の読み取りと報告
- まず
"$review_out"を読む "$review_out"が空なら失敗扱いにせず、Codex コマンドの stdout / stderr を確認するcodex exec reviewは-oに最終メッセージを書かず、stdout 側にだけレビュー本文を出す場合がある。その場合はコマンド出力からレビュー本文を拾って報告する- 出力ファイルにも stdout にもレビュー本文がない(codex が非ゼロ終了・タイムアウトした場合を含む)なら、blind リトライはせず、stderr の内容を添えて失敗をユーザーに報告して終了する
- 指摘を以下の3カテゴリに分けて報告する:
- すぐ直すべきもの(バグ、クラッシュ、データ破壊など)
- 後回しでよいもの(コードスタイル、軽微な改善など)
- 指摘なし の場合はその旨を報告
- 敵対的モードのときは上の 3 カテゴリに加えて、「未確認リスク」(codex が発火条件を具体的に示せなかったもの)と**「攻めたが壊せなかった箇所」**を分けて報告する。前者は blind fix せず観測で潰す候補、後者は「安全の証明」ではなく攻め手の記録として扱う(下記「敵対的レビューの作法」参照)
- 高重大度の指摘があれば、修正するか確認する
5. 一時ファイルの削除
レビュー本文を読み終わってユーザーに報告した 直後に、./tmp に書き出したばかりの .md ファイル($review_out)を必ず削除する。./tmp をレビュー結果のアーカイブ置き場にしない。
rm -f "$review_out"
- 削除はグロブ禁止・完全一致パスのみ。
./tmp/*.md/./tmp/codex-*.logのような glob をrmに渡さない(並行する他セッションの codex レビューファイルを巻き込んで消す事故になる)。消すのはcodex-review.$stamp.md($stampはdate +%Y%m%d-%H%M%S.$$で PID 込み = セッション一意)の その 1 本だけ - 🚨 Bash ツールは呼び出しごとに別シェルで、シェル変数
$review_outは次の呼び出しに引き継がれない。安全なのは次のどちらか:- review 実行 → 出力 read →
rm -f "$review_out"を 1 回の Bash 呼び出しにまとめる($review_outがスコープ内に残る。これを既定とする) - 別呼び出しで消すなら、
$review_outの リテラル絶対パスをこの会話に控えてから、その完全一致パスを直接rm -fする。固定名のマーカーファイル(例:./tmp/.last_review_path)に退避しない(並行セッションが同名で上書きし合い、誤ったパスを消す)
- review 実行 → 出力 read →
- stderr を別ファイルに採る場合も 同じ
$stampを含む一意名にし、削除はその完全一致パスのみ(*.logglob 禁止) - 削除対象は今回の実行で作った 1 ファイル(+一意名の stderr ログ)のみ
- レビュー結果は会話履歴に残しておけば十分で、ファイルを残す必要はない
- 例外的にユーザーが「ファイル残しといて」と明示した場合のみスキップ
敵対的レビューの作法(他スキルから参照される正本)
--adversarial の考え方と指摘の採否ルール。codex-drive / codex-lead / cross-review / review-loop の敵対フェーズはここを正本として参照する(各スキルで別々に定義し直さない)。
原則
- 反証責任を実装側に置く: 「問題が見つからなかった」は「正しい」ではない。不変条件は「壊す方法が見つからなかった」ではなく「壊れないことをテスト/型/設計で固定した」で担保する
- 主張は偽と仮定して当たる: 「対応済み」「検証済み」「テスト green」は主張であって証拠ではない。特に自動生成・エージェント生成の差分では、サマリの主張と diff の実体を必ず突き合わせる
- 自分のテストで自分を証明させない: 循環テスト(自作エンコード↔自作デコード)・常に真のアサーション・実物とずれたモックは「green だが壊れている」を量産する。外部 vector / 実通信 / 別実装との照合で裏を取る
- 壊す条件を具体で書かせる: 「〜の可能性がある」で止めさせない。入力・順序・環境まで下ろせない指摘は仮説であって発見ではない
指摘の採否(Claude 側の検閲。敵対レビューほど無検閲採用が危険)
敵対レビューは通常レビューより false positive と過剰設計の提案が増える。出力をそのまま実装に流さず、次で仕分ける:
- 発火条件が具体的なもの → コード・契約・実験で裏取りする。再現、または到達可能な経路と契約違反がコードで確認できたら修正対象
- 再現できなかったもの → 再現しないだけで誤検出と断定しない。契約・到達経路でも確定できなければ未確認として観測を増やす。到達不能や契約との不一致を示せた場合だけ、根拠を付けて却下する
- 未確認リスク(発火条件が示せないもの) → 修正せず、リスクとして報告 or issue 化する。将来の観測ポイントの候補にする
- 「起こりえないが念のため」系の提案 → 原則採らない。取るなら「その入力がどこから来るか」を示せた時だけ
- 壊せなかった報告 → green の根拠にしない(攻め手が浅かった可能性が常に残る)。重要な不変条件はテストで固定して初めて閉じる
subagent-model-tiering.md の「下位主体の出力は main が必ず検閲する」が敵対レビューにもそのまま効く。敵対レビューの結論に敵対するのは Claude の仕事。
自動化向けの出力
codex-run -J/codex-fanout -Jは JSONL のイベント、thread ID、完了/失敗、usage、コマンド実行を保存する。 rc=0 でも完了イベント・最終応答が揃わない run は未完了として集約対象から外す。結果の正しさは引き続き裏取りする。- 指摘を機械集約する場合は
codex-run -J -S <schema.json> ro <prompt-file>を使う。 schema の見本はtemplates/findings.schema.json。プロンプトで対象 SHA/差分・各指摘の ID・原典/コード根拠・ 発火条件・確認状態 (confirmed/unverified) と未検証範囲を指定する。exec reviewの既定の出力形式とは混ぜず、構造化を必要とする場合は通常の read-only exec を選ぶ。 - schema 適合は形式の確認であり、主張の真偽やレビューの網羅性を保証しない。集約時は全指摘 ID の 採用・重複・保留・却下を対応表に残し、失敗 run を「指摘なし」としない。
プロジェクト固有のコンテキスト
Codex はリポジトリ内のコンテキストをある程度拾えるが、重要なプロジェクトルールや今回のレビュー観点は必要に応じてプロンプトに追記する。
ルール
実行時の共通制約の正本(codex-lead スキルもここの command codex / </dev/null / --full-auto 制約を参照する。下記注記を整理・更新するときは codex-lead 側のルールも併せて見直す)。引数パース(selector とプロンプトの併用不可、{base}..{target} の扱い)は「手順 1」、-o が空だった場合の fallback は「手順 4」、出力ファイルの削除は「手順 5」が正本。
command codexを使うこと(codex直接呼び出しは zsh 関数オーバーライドでエラーになる場合がある)- 全ての
command codex exec呼び出しに</dev/nullを必ず付ける。Claude Code の Bash ツールの stdin は非TTYのパイプ(書き込み側が開いたまま EOF が来ない)なので、prompt を引数で渡しても codex が「Reading additional input from stdin...」で stdin の EOF を待ち続け、コマンドがタイムアウトまでハングする。</dev/nullで stdin を即 EOF にすると解消する(openai/codex#20919)。selector モード・プロンプトモードのどちらでも必要。codex 側が stdin チェックにタイムアウトを実装する等で修正されたら本対処は不要になる - 常に
--ephemeral -o "$review_out"を付与する。通常の exec/fallback の sandbox は-s read-onlyを明示する(--full-autoは使わず権限を明示する。互換フラグの有無は CLI の版に依存するので、過去の引数エラーを全バージョンに一般化しない) codex execfallback を使う時は-s read-onlyを付ける- モデルと effort は
-m gpt-6.1-sol -c model_reasoning_effort="high"で明示する。省略すると~/.codex/config.tomlの既定 (対話 TUI 側の都合で変わる) を拾い、実行ごとにモデルが変わる。🚨 effort も省かない — モデルだけ指定すると effort は config.toml の値になる (対話の都合で変わるので、組を固定するのはここ)。codex-drive の「読む run」と同じ組に揃える (ユーザー決定 2026-10-02 で sol、2026-10-03 で effort を medium から high へ。それまではgpt-6-luna)。high は運用上の既定。特定ベンチマークの優劣や API の価格を個別レビューの精度・5h 枠に一般化しない。effort を変えるときの比較方法は codex-drive のモデル表を参照 - レビュー結果はそのままユーザーに見せる(要約しすぎない)
/tmpは使わず、出力ファイルは必ず./tmpに置くcodex exec reviewとcodex exec -s read-onlyはレビュー用途として使い、コードを変更しない- worktree など別 tree をレビューさせるときは
cdする。codex exec reviewは-Cを受け付けない (codex exec -s read-onlyは取れるので取り違えやすい)。selector を使わない (プロンプト指定の) 実行ならbin/codex-runがこの差分と出力・rc の保存をまとめて引き受ける - コマンド実行ツールのタイムアウトは 900000ms(15分)に設定する
- 構造的修正優先: 指摘の報告時、修正案は中長期的に改修を続けることを前提とした構造的な方針を優先する。場当たり的な条件分岐やワークアラウンドを修正案として提示しない
- 敵対モードの指摘を無検閲で採用しない: コード・契約・再現で裏取りし、確定できないものは未確認として記録する(「敵対的レビューの作法」が正本)。逆に、敵対モードでない通常レビューでも「指摘なし=安全」とは報告しない(見つからなかった、と書く)
レビュー
まだレビューはありません。使ってみた感想をお寄せください。
同じリポジトリのスキル
概要と使いどころ
AVFoundation (AVPlayer / AVPlayerLayer / AVPlayerItemVideoOutput / AVAsset) の落とし穴・文書化されていない実装挙動・debugging チェックリストを集約した reference skill。Swift / Objective-C で AVPlayer を使った動画再生 / seek / scrub / frame stepping を実装・debug するときに発火。VLCKit ではなく **AVFoundation 系** の問題に特化。
このセッションで行った変更をコミットする。「コミットして」「commit」「/c」で発火。push はしない/クレデンシャルは混入させない。
ディレクトリ・レイヤーごとに置いた CLAUDE.md と README.md が実体 (コード・コマンド・構成) とずれていないかを点検し、裏の取れた乖離だけを直す。引数で対象のディレクトリを任意に指定できる (省略時は repo 全体)。「CLAUDE.md を refresh して」「README が古くないか見て」「claude-md-refresh」「/claude-md-refresh」で発火。issues/ の更新漏れは issue-writeback / issue-sync の担当で、この skill は扱わない。
Codex が設計・実装を担い、Claude が要件確定・成果物の検証・反復・commit/push を管理する。「codex に書かせて」「codex メインで実装」「codex-drive」で発火。大きめの機能・移植・プロトコル実装向け。余剰トークンを厚く使う運用も選べる。
タスク着手時に codex にリードしてもらうワークフロー。codex に設計/方針を主導(リード)させ、その方針に沿って Claude が実装し、実装後は codex で設計適合・実装正当性・敵対的(red team)の 3 観点でレビューする。余っている codex トークンを積極的に消費したい時に使う。「codexにリードしてもらって」「設計から codex に任せて」「タスクを codex 主導で」「codex-lead」「/codex-lead」で発火。