coderabbit-resolver について
GitHub の Pull Request で、CodeRabbit の指摘確認、コード修正、CI 検証、マージ、後処理までのレビューを自動化するスキルです。単一 PR と一括処理に対応し、GitHub Bot が現在の HEAD をレビューできない場合は CLI モードを利用できます。
主な機能
- 01インラインスレッドとレビュー本文の指摘を監査
- 02修正・検証・再レビューを反復
- 03CI 成功と現 HEAD のレビューをマージ条件に設定
- 04CodeRabbit CLI と Bot の各モードに対応
- 05単一または全オープン PR を処理
活用シーン
- 01Pull Request の CodeRabbit 指摘を解決
- 02Bot が HEAD をレビューできない場合に CLI を使用
- 03オープン Pull Request を一括処理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ laststance/ skills --skill coderabbit-resolverインストール後、Claude Code で/coderabbit-resolverを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/coderabbit-commands.mdgithub-graphql-api.mdscripts/check-ci-status.shcli-review.shensure-cli-ignore.shresolve-threads.shwait-for-ratelimit.shtests/run_tests.pytests/bin/coderabbit-fakeghworkflows/bulk-loop.mdreview-loop.md詳細
Codex との互換性
Codex でこのスキルを実行する場合は、操作を開始する前に Claude Code 専用のプリミティブを置き換えてください:AskUserQuestion → chat/request_user_input、TodoWrite → update_plan、Task/TaskCreate/TeamCreate/SendMessage → 利用可能かつ許可されている場合は spawn_agent/send_input/wait_agent、EnterPlanMode/ExitPlanMode → 簡潔なチャット形式の計画と明示的な承認。
Read/Write/Edit/Bash/WebSearch/WebFetch を Codex のファイル/シェル/ウェブツールに対応付け、タスクで Claude Code が明示的に対象とされていない限り、~/.claude/... のパスを ~/.agents/... または ~/.codex/... に置き換えてください。
Cursor との互換性
Cursor Agent でこのスキルを実行する場合は、操作を開始する前に Claude Code 専用のプリミティブを置き換えてください:AskUserQuestion → AskQuestion、TodoWrite → Cursor の TodoWrite または同等のチェックリスト、Task/TaskCreate/TeamCreate/SendMessage/マルチエージェントのフロー → 許可されている場合は Cursor の Task(サブエージェント)、並列 Task、または run_in_background(TeamCreate/SendMessage に完全に一致するものはない場合があります)、EnterPlanMode/ExitPlanMode → 明示的なユーザー承認を伴う Plan mode(SwitchMode / CreatePlan)。
Read/Write/Edit/StrReplace/Bash/ウェブ/検索/MCP を Cursor Composer または Agent の同等機能に対応付けてください。mcp__server__tool 形式の MCP 名は通常、設定済みのサーバー識別子を使った call_mcp_tool に対応します。タスクで Claude Code が明示的に対象とされていない限り、~/.claude/... を ~/.cursor/skills/、.cursor/skills/、.cursor/rules/ に置き換えてください。
<essential_principles>
このスキルの仕組み
GitHub PR 上の CodeRabbit レビューを繰り返し処理し、すべてのレビューコメントを解決して CI がグリーンになったら、マージとクリーンアップを行います。
原則 1:GraphQL のみでスレッドを解決
GitHub にはレビュー スレッドを解決する REST API がありません。PRRT_ プレフィックス付きのスレッド ID を使い、GraphQL の resolveReviewThread ミューテーションを必ず使用してください。このミューテーションは冪等で、すでに解決済みのスレッドに対しても安全に実行できます。
差分外の指摘はレビュー本文に記載され、解決可能なスレッド ID はありません。監査表でその対応状況と根拠を記録してください。未解決のインラインスレッドがゼロでも、これらの指摘に対応済みであることの証明にはなりません。
原則 2:クリーンになるまで繰り返す
ワークフローは次の処理を繰り返します:
- 未解決の CodeRabbit インラインスレッドと、過去の差分外指摘を含むすべての CodeRabbit レビュー本文を抽出する
- 各指摘を現在のコードと照合し、問題を修正するか、すでに修正済み/スキップした理由を記録し、該当するインラインスレッドを解決する
- コミット → プッシュ → CI と CodeRabbit の再レビューを待つ(
cliモードでは、CI と CodeRabbit CLI の再レビューを待つ) - 再レビューのたびに、またマージ前にも、両方の情報源を再取得する。次の条件をすべて満たすまで繰り返す:未解決のスレッドがゼロ、未監査/未対応の差分外指摘がゼロ、すべての CI チェックが成功、かつ(CodeRabbit が現在の HEAD をレビュー済み、または CLI レビューが
CR_CLI_LOGゲートを通過している)
原則 3:プッシュ前に必ず検証
各コミットの前に pnpm validate(またはプロジェクト固有の検証)を実行してください。壊れたコードをプッシュしてはいけません。
原則 4:安全なマージとクリーンアップ
次の条件をすべて満たす場合に限りマージしてください:CI がグリーン(保留中、失敗、キャンセルされたチェックがない)、未解決のスレッドがない、すべての差分外指摘について現在のコードに基づく対応状況と根拠がある、CodeRabbit が現在の HEAD コミットをレビュー済み(そのコミット上でチェックが成功し、CodeRabbit のレビューが存在する)。HEAD を対象とする PR 側のレビューがない場合は、CR_CLI_LOG ゲート(原則 5)を通過した CodeRabbit CLI レビューを最後の条件の代わりにできます。CI とレビューのゲートには check-ci-status.sh を使用してください。リポジトリでチェックが不要な場合、GitHub は赤い PR もマージできてしまうためです。このスクリプトは差分外指摘を監査しません。終了コード 0 は、その監査の代わりにはなりません。検証済みの HEAD のみをマージしてください(--match-head-commit)。マージ後は、ブランチ上に積み重なっている PR のターゲットを変更してから、リモートブランチを削除し、ローカルをプルーニングしてください(review-loop.md Step 9)。gh pr merge --delete-branch は使用しないでください。GitHub が積み重なっている PR のターゲットを変更する代わりに、それらをクローズしてしまいます。
原則 5:HEAD がレビューされていなければマージしない — レート制限も対象
CodeRabbit は API のレート制限に達し、実際のレビューを実行する代わりにレート制限の警告コメントを投稿することがあります。重要なのは、その場合でも GitHub Checks API には completed/success と報告される点です。API だけでは、実際のレビューとレート制限への応答を区別するシグナルがありません。Checks API だけを信頼すると、レビューされていない PR をマージすることになります。
そのため、「CodeRabbit の成功」はすべて、最新の CodeRabbit の issue コメントと照合する必要があります。最新のコメントがレート制限のパターン(例:「Rate limit exceeded」、「wait X minutes before requesting another review」)に一致する場合、API のステータスにかかわらず、その実行はレート制限されています。「成功」は、CodeRabbit が一度も確認していないプッシュを指す場合もあります。レビューが行われなかった実行の後でも、SHA ごとのステータスが「Review completed」と表示されたり、「Reviews paused」/「Review skipped」と表示されたりすることがあり、後続の実行で上書きされる可能性もあります。HEAD がレビューされたことを示すのは、commit_id が HEAD と一致する CodeRabbit のレビューだけです。
check-ci-status.sh は、SHA ごとのステータス文、最新のコメント、HEAD に対するレビューを内部で確認します。これらの確認結果から、HEAD を対象とするレビューがないと判断した場合は exit 3 を返します。ワークフローの Step 6a では exit 3 を「Step 6b に進む」として扱い、Step 8(最終確認)では exit 3 を「マージしない」として扱います。これにより、レビューゲートを回避できないようにしています。
HEAD を対象とするレビューがない場合は、レート制限の解除を待たないでください。CodeRabbit CLI(scripts/cli-review.sh、review-loop.md Step 6b)で PR をローカルでレビューし、レビューコメントと同じように指摘事項を監査してから、CR_CLI_LOG(手動で処理方針を決めた指摘事項については CR_CLI_ACCEPT も併せて指定)を使って check-ci-status.sh を再実行し、マージゲートを通過させてください。スクリプトがログを受け付けるのは、HEAD 上で完了した CLI 実行のログで、指摘事項の数がログの数と完全に一致する場合のみです(指摘事項を承認した場合は、それを修正する新しいコミットが含まれる HEAD の祖先上での実行も受け付けます)。
CLI にも独自の制限があります。実行のたびにアカウントの CLI レビュー数(coderabbit usage)に加算され、プランでは 1 時間あたりの CLI レビュー数に上限があります。そのため、HEAD ごとに 1 回、PR ごとに最大 3 回まで CLI を実行してください。複数回実行しても指摘事項はゼロにならないためです。オーナーから依頼されない限り、--use-credits(使用量に応じた課金)は絶対に追加しないでください。
待機に切り替えるのは、CLI を実行できない場合に限ります。CLI がインストールされていない、サインインしていない、または CLI もレート制限されている(cli-review.sh の exit 5 または 6)場合です。その場合は wait-for-ratelimit.sh でレート制限の期間が終了するまで(さらに 30 秒のバッファを設けて)待機し、@coderabbitai full review を投稿します。無限ループを防ぐため、この再試行は PR ごとに最大 3 回までです。
CLI がレート制限されている間(exit 6)は、ボットも同様に制限に達するのを防ぐため、新しい PR の説明に @coderabbitai ignore を記載してください。CLI で再びレビューできるようになったら、その行を削除して CLI で該当する PR をレビューします(review-loop.md Step 6b の項目 6)。この一時的な ignore は cli モードではありません。
原則 6:長時間の待機には sleep ではなく ScheduleWakeup を使用する
最上位レベルの sleep は Claude Code の Bash ポリシーでブロックされ、5 分間のプロンプトキャッシュを消費します。scripts/*.sh 内部の sleep は問題ありません — Claude にはスクリプトが単一のコマンドとして認識されます。ただし、スクリプトでラップせずに、あなた(エージェント)がステップ間で待機する必要がある場合(例:チェック完了後に CodeRabbit のコメント投稿を待つ場合)は、ワークフローに戻る継続プロンプトを指定して ScheduleWakeup を使用してください。最上位レベルの Bash コマンドとして sleep 180; gh api ... を記述しないでください。
原則 7:cli モードでは GitHub ボットを無効にする
呼び出しに cli または --cli が含まれている場合、GitHub ボットはこの PR をレビューしてはいけません。@coderabbitai ignore を単独の行として PR の説明(scripts/ensure-cli-ignore.sh)に記載し、そのまま維持してください。同じテキストをコメントに記載しても効果はありません。cli-review.sh ですべての HEAD をレビューし、CR_CLI_MODE=1 と CR_CLI_LOG を指定してゲートを通過してください。@coderabbitai review/full review/resume を投稿してはいけません。また、full review を投稿する wait-for-ratelimit.sh も実行してはいけません。CLI を実行できない場合は、停止してユーザーに確認してください。
</essential_principles>
/coderabbit-resolver <PR_NUMBER> # Process single PR (GitHub bot)
/coderabbit-resolver 17 # Process PR #17
/coderabbit-resolver 17 cli # PR #17 via CodeRabbit CLI; bot ignored
/coderabbit-resolver cli # Current-branch PR via CodeRabbit CLI
/coderabbit-resolver --bulk # Process ALL open PRs (oldest first)
/coderabbit-resolver --bulk cli # All open PRs via CodeRabbit CLI
すべての引数を解析してください。cli/--cli は CLI モードを設定し、--bulk は一括ワークフローを選択します。最初の数字のみのトークンを PR 番号として扱います。PR 番号がなく(かつ --bulk もない場合は)、現在のブランチから検出してください:
gh pr view --json number -q .number
PR 番号を取得したら、workflows/review-loop.md を読み、指示に従ってください。
--bulk が指定されている場合は、workflows/bulk-loop.md を読み、指示に従ってください。
cli が設定されている場合は、そのワークフローの CLI モードのルール(原則 7)に従ってください。
ワークフローを読んだら、その指示に厳密に従ってください。
<reference_index>
参考資料
すべて references/ にあります:
| ファイル | 内容 |
|---|---|
| github-graphql-api.md | スレッドの解決、CI ステータスチェック用の GraphQL クエリ/ミューテーション |
| coderabbit-commands.md | CodeRabbit ボットのコマンドと動作に関する参考資料 |
| </reference_index> |
<workflows_index>
ワークフロー
すべて workflows/ にあります:
| ワークフロー | 目的 |
|---|---|
| review-loop.md | レビュー、修正、解決、マージを繰り返すメインのループ(単一 PR) |
| bulk-loop.md | オープン中のすべての PR を古い順に処理し、それぞれをマージする |
| </workflows_index> |
<scripts_index>
スクリプト
| スクリプト | 目的 |
|---|---|
| resolve-threads.sh | PR 上の未解決の CodeRabbit スレッドをすべて解決します |
| check-ci-status.sh | マージのゲートです。PR のヘッドで CI と CodeRabbit の完了を待ちます。失敗、キャンセル、または保留中のチェックがあると、(gh pr checks の分類に基づいて)ブロックされます。また、CodeRabbit 以外の CI がない PR と、CodeRabbit のレビューがないヘッドもブロックされます。PR 側のレビューで HEAD がカバーされていない場合は、CR_CLI_LOG を使った CLI レビューを受け付けます。CR_CLI_MODE=1 を設定すると GitHub ボットのチェックを省略し、そのログを必須とします |
| cli-review.sh | PR 側のレビューで HEAD がカバーされていない場合(レート制限中、レビューが一時停止中、または cli モードの場合)に、CodeRabbit CLI で PR をローカルでレビューします。--verify は、保存済みの実行結果がマージのゲートを満たしているか確認します |
| ensure-cli-ignore.sh | GitHub ボットが自動レビューしないように、PR の説明文に @coderabbitai ignore を追加します(cli モード)。冪等です |
| wait-for-ratelimit.sh | CLI を実行できない場合のフォールバックです。レート制限を検出し、解除まで待ってから完全なレビューを開始します。cli モードでは使用しないでください |
tests/run_tests.py は、偽の gh と偽の CLI に対して、cli-review.sh、check-ci-status.sh(CR_CLI_LOG/CR_CLI_MODE の分岐、レビュー層、CI の判定)、および ensure-cli-ignore.sh をテストします(python3 tests/run_tests.py。レビューは実行されません)。これらのスクリプトを変更した後に実行してください。
</scripts_index>
<success_criteria>
coderabbit-resolver の実行が成功した場合(単一の PR):
- CodeRabbit のレビュー スレッドがすべて解決されている(未解決がゼロ)
- 差分外のレビュー本文で指摘された項目がすべて、現在の HEAD に照らして監査されている:証拠を添えて FIXED、または理由を添えて SKIPPED。未監査または NOT_FIXED の項目がない
- 関係のない CI の失敗に対する修正も含め、すべての CI チェックに合格している(成功、保留中・失敗・キャンセルなし)
- CodeRabbit が HEAD をレビューしている(そのコミットに対するレビューがある)、または PR 側のレビューで HEAD がカバーされていない場合は、CLI による HEAD のレビューが
CR_CLI_LOGゲートを通過している - PR が正常にマージされている
- このブランチに積み重ねられた PR のターゲットが変更され、その後リモートブランチが削除されている
- ローカルブランチがクリーンアップされている(main に切り替え、不要なブランチを刈り込んでいる)
--bulk の実行が成功した場合:
- すべてのオープン PR が処理されている(古い順)
- 各 PR が MERGED または SKIPPED(理由付き)になっている
- 結果テーブルを含むサマリーレポートが生成されている
cli の実行(単一の PR または --bulk cli)が成功した場合は、さらに次の条件も満たします:
- 実行中、PR の説明文に
@coderabbitai ignoreが含まれている - レビューの証拠が、
CR_CLI_MODE=1とCR_CLI_LOGのゲートを通過した CodeRabbit CLI のログである -
@coderabbitai review/full review/resumeのコメントが投稿されていない </success_criteria>