| name | codex-review |
| version | 2.2.1 |
| description | codex exec review を基本に、必要なら codex exec を使ってコード変更のレビューを依頼し、指摘事項を報告する。「codexでレビューして」「codex-review」「/codex-review」で発火。Codex 単体での単独レビュー用途。複数エージェント並行レビューは cross-review、差分ではなくコードベース全体の監査は audit を使う。 |
Codex Review
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 → 未コミット変更を厳しめにレビュー
手順
1. 引数のパース
$ARGUMENTS から以下を抽出する:
--uncommitted: 明示的にフラグがあれば未コミット変更をレビュー
--strict: 厳しめレビューモード
- 基点付き差分:
{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 またはカスタム指示あり: codex exec review のプロンプト付きモード
- selector と
--strict / カスタム指示が両方ある: codex exec -s read-only を使う
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、再現条件、理由、最小修正案を書く。
カスタム指示がある場合は、テンプレートの末尾に追記する。
実行モード
- デフォルトモード: 引数なしなら
codex exec review --uncommitted を使う
- プロンプト付きモード: selector なしで実行する。未コミット変更に対して
--strict やカスタム指示を渡したい時に使う
- selector モード:
--uncommitted / --commit / --base を付けて実行する。この場合はプロンプトを付けない
- fallback モード: selector と
--strict / カスタム指示を両立させたい時は codex exec -s read-only を使い、対象差分をプロンプト内で明示する
実行パターン
command codex exec review --uncommitted --ephemeral -o "$review_out" </dev/null
command codex exec review --ephemeral -o "$review_out" </dev/null \
'コードレビューして。バグ、リグレッション、仕様逸脱、テスト不足を優先。問題があるものだけを重要度順に列挙し、各項目に file:line、理由、最小修正案を書く。要約や称賛は不要。'
command codex exec review --commit {sha} --ephemeral -o "$review_out" </dev/null
command codex exec review --base {base} --ephemeral -o "$review_out" </dev/null
command codex exec -s read-only --ephemeral -o "$review_out" </dev/null \
'commit {sha} をコードレビューして。重点観点: {custom_instruction}。最初に `git show --stat --oneline {sha}` と必要な diff を確認してからレビューする。バグ、リグレッション、仕様逸脱、テスト不足を優先し、問題があるものだけを重要度順に列挙し、各項目に file:line、理由、最小修正案を書く。要約や称賛は不要。'
command codex exec -s read-only --ephemeral -o "$review_out" </dev/null \
'{base}..HEAD の差分をコードレビューして。重点観点: {custom_instruction}。最初に `git diff --stat {base}..HEAD` と必要な diff を確認してからレビューする。バグ、リグレッション、仕様逸脱、テスト不足を優先し、問題があるものだけを重要度順に列挙し、各項目に file:line、理由、最小修正案を書く。要約や称賛は不要。'
実行時の共通制約(command プレフィックス、</dev/null、タイムアウト等)は「ルール」を参照。
4. 結果の読み取りと報告
- まず
"$review_out" を読む
"$review_out" が空なら失敗扱いにせず、Codex コマンドの stdout / stderr を確認する
codex exec review は -o に最終メッセージを書かず、stdout 側にだけレビュー本文を出す場合がある。その場合はコマンド出力からレビュー本文を拾って報告する
- 出力ファイルにも stdout にもレビュー本文がない(codex が非ゼロ終了・タイムアウトした場合を含む)なら、blind リトライはせず、stderr の内容を添えて失敗をユーザーに報告して終了する
- 指摘を以下の3カテゴリに分けて報告する:
- すぐ直すべきもの(バグ、クラッシュ、データ破壊など)
- 後回しでよいもの(コードスタイル、軽微な改善など)
- 指摘なし の場合はその旨を報告
- 高重大度の指摘があれば、修正するか確認する
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)に退避しない(並行セッションが同名で上書きし合い、誤ったパスを消す)
- stderr を別ファイルに採る場合も 同じ
$stamp を含む一意名にし、削除はその完全一致パスのみ(*.log glob 禁止)
- 削除対象は今回の実行で作った 1 ファイル(+一意名の stderr ログ)のみ
- レビュー結果は会話履歴に残しておけば十分で、ファイルを残す必要はない
- 例外的にユーザーが「ファイル残しといて」と明示した場合のみスキップ
プロジェクト固有のコンテキスト
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" を付与する。--full-auto は付けない(codex-cli 0.139.0 時点で --sandbox workspace-write の deprecated alias であり、-s read-only と併用すると後勝ちで上書きして codex が書き込み可能になることを実測確認済み。codex 側で alias が削除されたら本注記ごと整理してよい)
codex exec fallback を使う時は -s read-only を付ける
- レビュー結果はそのままユーザーに見せる(要約しすぎない)
/tmp は使わず、出力ファイルは必ず ./tmp に置く
codex exec review と codex exec -s read-only はレビュー用途として使い、コードを変更しない
- コマンド実行ツールのタイムアウトは 900000ms(15分)に設定する
- 構造的修正優先: 指摘の報告時、修正案は中長期的に改修を続けることを前提とした構造的な方針を優先する。場当たり的な条件分岐やワークアラウンドを修正案として提示しない