iterate-pr について
開発者向けのPR反復スキルで、対応可能なCI失敗や高・中優先度のレビュー指摘を修正し、チェックを監視します。自動対応できる作業と、報告が必要な人間の承認・ドラフト・マージ準備のゲートを区別します。
主な機能
- 01PRチェックとレビュー指摘の取得
- 02高・中優先度の指摘を優先
- 03根本原因の修正とローカル検証の指針
- 04チェックと指摘の反復監視
- 05人間とドラフトの準備ゲートを報告
活用シーン
- 01オープン中のPRにおけるCI失敗の対応
- 02対応可能なレビュー指摘への対処
- 03修正のプッシュ後のチェック監視
- 04人間のゲートで進めない場合の報告
MCP 対応
認証済みの `gh` と同梱スクリプトでPRを確認し、チェックや指摘を取得してスレッドに返信します。入力にはMCP機能の記載がありません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ getsentry/ skills --skill iterate-prインストール後、Claude Code で/iterate-prを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
SPEC.mdagents/openai.yamlscripts/fetch_pr_checks.pyfetch_pr_feedback.pymonitor_pr_checks.pyreply_to_thread.py詳細
PR に対して CI が通るまで反復する
目標:対応可能な CI の失敗と、レビューでの重要度が高または中の指摘を修正します。人による承認、レビュー準備完了、マージ準備完了の各ゲートで停止し、報告します。
必要なもの:
- 認証済みの
gh uv- 作業ディレクトリ(cwd)を対象リポジトリのルートにすること
- スキルのルートからの相対パスを使ったスクリプトのパス。例:
scripts/fetch_pr_checks.py
同梱スクリプト
| スクリプト | 実行方法 | 出力 |
|---|---|---|
scripts/fetch_pr_checks.py | uv run scripts/fetch_pr_checks.py [--pr NUMBER] | JSON:pr、summary、checks、失敗箇所の抜粋 |
scripts/fetch_pr_feedback.py | uv run scripts/fetch_pr_feedback.py [--pr NUMBER] | JSON の分類:high、medium、low、bot、resolved |
scripts/monitor_pr_checks.py | uv run scripts/monitor_pr_checks.py [--pr NUMBER] | ターミナルマーカーとタブ区切りのチェック |
scripts/reply_to_thread.py | uv run scripts/reply_to_thread.py THREAD_ID BODY [...] | JSON の返信結果 |
チェックのサマリーフィールドには、failed、pending、actionable_pending、human_gate_pending が含まれます。
モニターのマーカー:
ALL_CHECKS_PASSEDCHECKS_DONE_WITH_FAILURESNO_CHECKS_REGISTEREDDRAFT_PR_WITH_NO_CHECKSCHECKS_BLOCKED_BY_REVIEW_GATE
ワークフロー
1. PR を特定する
実行:
gh pr view --json number,url,headRefName,isDraft,reviewDecision
次の場合は停止します:
- PR が存在しない
- モニターの猶予期間後もドラフト PR にチェックがない:
DRAFT_PR_WITH_NO_CHECKSを報告します
ドラフトのルール:既存のチェックとフィードバックのみを確認します。依頼がない限り、レビュー準備完了にはしません。
2. フィードバックに対応する
uv run scripts/fetch_pr_feedback.py [--pr NUMBER] を実行します。
| 分類 | 対応 |
|---|---|
high | 修正する |
medium | 修正する |
low | どれに対応するかユーザーに尋ねる |
bot | 情報提供のみのコメントはスキップする |
resolved | スキップする |
フィードバック修正チェックリスト:
- 根本原因を確認する
- 関連コードを検索する
- 該当するすべての箇所を修正する
review_bot: trueの場合:実際の問題を修正し、誤検知には説明を加える
優先度が低い場合の質問形式:
Found 3 low-priority suggestions:
1. [l] "Consider renaming this variable" - @reviewer in api.py:42
2. [nit] "Could use a list comprehension" - @reviewer in utils.py:18
3. [style] "Add a docstring" - @reviewer in models.py:55
Which should I address? ("1,3", "all", or "none")
3. CI の状態を確認する
uv run scripts/fetch_pr_checks.py [--pr NUMBER] を実行します。
| 状態 | 対応 |
|---|---|
failed > 0 かつ actionable_pending == 0 | 失敗を修正する |
actionable_pending > 0 | 待機する。待機中にフィードバックを確認する |
pending > 0 かつ actionable_pending == 0 | CHECKS_BLOCKED_BY_REVIEW_GATE を報告する |
| 猶予期間後もチェックがない | NO_CHECKS_REGISTERED または DRAFT_PR_WITH_NO_CHECKS を報告する |
| すべての対応可能なチェックに合格 | CI 後のフィードバック確認を実行する |
対応可能なレビュー Bot(sentry、warden、cursor、bugbot、seer、codeql)を待ちます。
承認、isDraft、REVIEW_REQUIRED、Codecov、情報提供のみの Bot は待ちません。
4. CI の失敗を修正する
失敗ごとに:
- ログ全体を読む:
gh run view <run-id> --log-failed - アサーション/例外/Lint ルールからソースまでたどる
- 編集前に原因を明示する:「X が原因で失敗し、Y の影響を受けています」
- 関連する呼び出し箇所やパターンを検索する
- 症状ではなく根本原因を修正する
- 必要に応じて、対象を絞ったテストカバレッジを追加する
5. ローカルで検証してから、コミットしてプッシュする
コミット前に:
- テストの修正:該当するテストを再実行する
- Lint/型の修正:影響を受けるチェッカーを再実行する
- コードの修正:対象となるテストを再実行する
- ローカルで失敗した場合:プッシュ前に修正する
git add <files>
git commit -m "fix: <descriptive message>"
git push
6. CI を監視してフィードバックに対応する
ループ:
uv run scripts/fetch_pr_checks.pyを実行する- 手順 3 の表に従って対応する
actionable_pending > 0の間は、uv run scripts/fetch_pr_feedback.pyを実行する- 新しい重要度が高または中のフィードバックがあれば、すぐに修正する
- 変更した場合は、検証してコミット、プッシュし、ループを再開する
- それ以外の場合は、30 秒待って繰り返す
- チェックに合格したら、10 秒待ってからフィードバックをもう一度取得する
- 新しい重要度が高または中のフィードバックがあれば、手順 4 に戻る
Claude Code の任意手順:uv run scripts/monitor_pr_checks.py を MonitorTool 経由で persistent: false を指定して実行します。タイムアウトは通常のリポジトリの CI 所要時間に設定します。プッシュのたびにモニターを再起動してください。
終了条件
| 終了 | 条件 |
|---|---|
| 成功 | 対応可能な CI が成功している;CI 後のフィードバックに問題がない;優先度の低い選択事項に対応済み |
| ユーザーに確認 | 2 回試行しても同じ失敗が発生する;フィードバックが不明確;インフラの問題がある |
| 停止 | PR がない;ブランチのリベースが必要;チェックがない;チェックなしのドラフト;人による確認のみが残っている |
フォールバック
スクリプトが失敗した場合は、gh CLI を直接使用します。
gh pr view --json number,url,headRefName,isDraft,reviewDecisiongh pr checks --json name,state,bucket,description,linkgh run view <run-id> --log-failedgh api repos/{owner}/{repo}/pulls/{number}/comments