pr-codex
GitHub PRを Claude Code と Codex CLI の2者レビュー方式で自動レビューする Claude Code プラグイン。
特徴
- 2者レビュー: Claude Code と Codex CLI が独立してPRをレビューし、結果を統合
- 自動巡回:
/loop と組み合わせて定期的にレビュー依頼PRを検出・処理
- 冪等実行: status.json による状態管理で、完了済みPRのスキップや失敗時の再実行に対応
- 最小権限: 各レビューツールは読み取り専用で動作し、PRへのコメント投稿時はユーザー承認または明示的な
--auto-send / --auto-submit 指定後の safety gate 通過を必要とする
- 生成と投稿を分離: レビュー生成 (
/pr-codex:review) と投稿 (/pr-codex:send) を別スキルに分け、通常は投稿前にユーザーが内容を承認する。/pr-codex:review --auto-send を明示した場合だけ、レビュー completed 後に /pr-codex:send <PR URL> --auto-submit 相当の auto-send phase へ進む
- 反復精緻化 + halting:
refine / challenge / verify を round 管理し、max_rounds / time_budget_ms / no_new_evidence / repeated_contradiction で停止する
必要なもの
- Claude Code
- Codex CLI (
codex-cli 0.128.0 以上、codex --ask-for-approval never -m gpt-5.5 ... exec が使えること)
- GitHub CLI (
gh)
jq(SKILL.md 内の全テンプレートで利用する。macOS 標準では未インストール)
python3(同梱 validator / eval runner で findings.candidates.json / findings.verified.json / status.json / preflight-result.json / findings.sarif / fixture scoring artifact を検証するため)
- Python package
jsonschema (jsonschema>=4,<5) — tasks/validate_findings_sarif.py が同梱 OASIS SARIF v2.1.0 schema に対して official schema validation を行うため。未インストール時は schema-invalid な SARIF を通さないよう fail-closed で失敗する
セットアップ
Python 依存と plugin root
validate_findings_sarif.py の official OASIS SARIF schema validation には jsonschema>=4,<5 を使う。PEP 668 で system Python への install が拒否される macOS/Homebrew 環境では venv を推奨する。
python3 -m venv ~/claude-loop-pr-codex/.venv
. ~/claude-loop-pr-codex/.venv/bin/activate
python3 -m pip install 'jsonschema>=4,<5'
venv を使わず user site に入れる場合だけ、環境によっては次のように --break-system-packages が必要になる。
python3 -m pip install --user --break-system-packages 'jsonschema>=4,<5'
CLAUDE_PLUGIN_ROOT が未設定 の shell でも、SKILL.md の command template は plugin_root="${CLAUDE_PLUGIN_ROOT:-...}" で plugin root を自己解決する。fallback は plugin cache の pr-codex/tasks/validate_findings.py marker から root を算出するため、validator/tool 呼び出しを手動で絶対パスに置換しない。
インストール
/plugin marketplace add yuki777/pr-codex
/plugin install pr-codex@pr-codex
アップデート
claude plugin marketplace update pr-codex
アンインストール
/plugin uninstall pr-codex
使い方
ワーキングディレクトリを作成し、Claude Code を起動:
mkdir -p ~/claude-loop-pr-codex
cd ~/claude-loop-pr-codex && claude --permission-mode auto --effort max
--permission-mode auto — /loop を非対話で回すために auto mode で起動する。auto mode は分類器による安全チェックでツール実行を自動承認またはブロックするため、すべての操作が無条件に通るわけではない。本スキルはテンプレートに明示した操作だけを実行し、ローカル書き込みは ~/claude-loop-pr-codex/ 配下の成果物作成に限定する
--effort max — Claude Code 本体の推論設定。/pr-codex:review の depth policy とは別軸
- Codex CLI 側のレビューと投稿前検証は、スキル内で
-m gpt-5.5 を指定して実行する。レビュー実行では model_reasoning_effort をスキル側で上書きせず、ユーザー config の値を使う。投稿前検証は --ignore-user-config でユーザー config から切り離す
- Codex CLI は
codex-cli 0.128.0 以降のみ対応する。旧バージョン向けテンプレートは打ち切り、--sandbox read-only / --color never / --ephemeral を並べる旧形式ではなく、-c sandbox_mode=read-only と preflight 限定の --ignore-user-config を使う
# 手動実行でレビューする
/pr-codex:review
# PR URLを直接指定してレビューする
/pr-codex:review https://github.com/org/repo/pull/123
# PR URLを直接指定してレビューし、completed 後に Must Fix のみ自動投稿する
/pr-codex:review https://github.com/org/repo/pull/123 --auto-send
# 現在のgit repositoryのPR番号を指定してレビューする
/pr-codex:review 123
# 現在のgit repositoryのPR番号を指定してレビューし、completed 後に Must Fix のみ自動投稿する
/pr-codex:review 123 --auto-send
# 10分間隔で自動レビューする
/loop 10m /pr-codex:review
# 10分間隔で自動レビューし、completed 後に Must Fix のみ自動投稿する
/loop 10m /pr-codex:review --auto-send
Depth control
/pr-codex:review はレビュー深度を standard / deep の 2 値で記録する。depth はオプションでは受け付けず、PR のリスクとサイズから自動判定する。既定はコストと 20 分 timeout を優先する standard で、deep は高リスク・小規模 PR 向け。
この 20 分は review budget / run-plan budget であり、Bash tool の foreground timeout ではない。Claude Code Bash tool の foreground timeout 上限 600000 ms を超えるため、review hunters は run_in_background: true で起動し、foreground timeout=1200000 は指定しない。
| 入力 / signal | selected depth | artifact |
|---|
risk_tags に security または data_migration を含み、files_changed <= 20 かつ lines_added + lines_removed <= 1500 | deep | depth_source=auto |
| 上記以外 | standard | depth_source=default |
lines_added + lines_removed > 5000 | standard | depth_source=default, depth_downgraded=false, depth_reason に大規模ガード理由を記録 |
run-plan.json には depth_actual / depth_source / depth_reason / depth_requested=null / depth_downgraded=false / depth_downgrade_reason=null を保存するため、standard/deep の選択は deterministic に追跡できる。
recommended_mode (standard / focused / skip) は depth とは直交する別軸。recommended_mode は「観点や対象範囲の絞り込み」、depth は「1観点あたりの掘り下げ深さ」を表す。たとえば recommended_mode=focused かつ depth_actual=deep の組み合わせは有効で、focused fallback / skip recommendation と矛盾しない。
レビューフロー