babysit-pr について
babysit-prは、GitHubの単一プルリクエストを、マージ、クローズ、またはユーザー対応が必要になるまで監視するスキルです。レビュー項目とCI失敗を順に扱い、明確な制限の下で修正や対応案の提示を行い、CI成功だけでは終了せず監視を続けます。
主な機能
- 01PRの状態と新しいレビュー項目を確認
- 02対応前にCI失敗を分類
- 03実際の失敗を修正し不安定なチェックを再実行
- 04人間のレビューへの返信前に確認を取得
- 05試行上限と終了状態を追跡
活用シーン
- 01プルリクエストのレビューとCI更新を継続監視
- 02ボットの指摘と確認済みCI失敗に対応
- 03チェック成功後も後続レビューを待機
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ timschoch/ skilly --skill babysit-prインストール後、Claude Code で/babysit-prを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdscripts/classify-failure.shclassify-failure.test.shpr-state.shpr-state.test.shresolve-thread.shwatch.shwatch.test.sh詳細
1 つの PR がマージ可能な状態になるまで、ポーリングし、分類し、修正し、プッシュして、再度ポーリングします。終了状態は merged、closed、needs-user です。プッシュでも、成功した実行でも、レポートでも、ループは終了しません。
ループ
各パスでは、次の手順を実行します。
- スナップショット。
bash scripts/pr-state.sh <pr> [--since <lastPushAt>]を実行します。前のパスのlastPushAtを--sinceに渡し、最後のプッシュより新しいレビュー項目だけが表示されるようにします。 - まず終了状態を確認。
stateがMERGEDまたはCLOSEDの場合は、その状態を報告して停止します。 - CI より先にレビュー項目を確認。 修正コミットを作ると CI が再実行されるため、先にレビューに対応すれば、置き換える予定の SHA に対して再実行を消費せずに済みます。
- CI。
conclusionが失敗を示す各チェックについて、コードに手を加える前にbash scripts/classify-failure.sh <check-url>を実行します。 - プッシュ。 PR のヘッドブランチでコミットしてプッシュし、新しい SHA で手順 1 に戻ります。
- 待機。
bash scripts/watch.sh <pr>はチェックが確定するまで待機し、新しいスナップショットを出力します。スリープする代わりにこれを使います。BABYSIT_MAX_MINUTESで上限を設定できます。既定値は 60 です。
ルール
- 公開済みかつ新しい項目のみ。
submittedAtまたはcreatedAtがlastPushAtより新しいレビュー項目に対応します。pr-state.shはPENDINGレビューを除外します。レビュー担当者がまだ下書き中であれば、まだ意見は出されていません。最後のプッシュより前に回答した項目は、回答済みのままです。 - 失敗を分類してから、その分類に応じて対応。
classify-failure.shはログの証拠に基づいてflakyまたはrealを出力し、その後、失敗した行の先頭 20 行を表示します。realの場合はブランチを修正します。flakyの場合はgh run rerun <run-id> --failedで再実行します。失敗がflakyと判定されている間は、テスト、ビルドスクリプト、CI 設定、依存関係のピン留めを変更しないでください。インフラの問題を黙らせるだけのパッチは、後続のすべての人からシグナルを隠してしまいます。 - CI の上限は PR ごとに 3 回。 1 回の試行とは、赤になったチェックに対して行う修正プッシュ 1 回、または再実行 1 回です。レビュー修正のプッシュは試行に数えません。チェックが再び赤で確定した時点で失敗とします。
- 3 回目の試行に失敗したら、案が残っていても needs-user で停止します。
- 失敗したチェック、各試行で変更した内容、失敗行の先頭 20 行をユーザーに伝えます。
- 人間には、あなたの言葉ではなくユーザーの言葉を届けます。 人間のレビュー担当者とは、PR 作成者ではなく、
isBotのフラグも付いていないreviews[].authorを指します。その項目と返信案をユーザーに提示し、GitHub に投稿する前に明示的な確認を待ちます。ボットの項目には自分で対応し、解決します。 - 修正した項目を解決します。 修正をプッシュしたら、スナップショットの
threads[].idを使ってbash scripts/resolve-thread.sh <threadId>を実行します。 - マージするかどうかはユーザーが決めます。 完了ルール(
.claude/rules/workflow-done.md)では、コミット済みは完了、プッシュ済みは承認済みです。マージモードは--mergeを指定した場合、またはこのセッションでユーザーがマージすると伝えた場合にのみ開始します。指定がなければ、成功した時点で停止して報告します。 - マージモードでは成功後にマージし、成功前にはマージしません。
gh pr merge <pr> --squash --match-head-commit <headSha>を実行します。--merge=mergeの場合は、--squashの代わりに--mergeを指定します。その後、もう一度スナップショットを取得し、MERGEDになったらループを終了します。headShaは成功したスナップショットから取得します。その後にプッシュが反映された場合は、マージを行いません。--autoは絶対に使わないでください。必須チェックのないリポジトリでは、CI の確定前に即座にマージされてしまいます。--delete-branchは絶対に使わないでください。
- 成功は節目であり、終了条件ではありません。 失敗したチェックがなく、
mergeable: MERGEABLEで、未解決のスレッドもない場合は、「マージ可能」と報告してポーリングを続けます。PR が開いている間は、遅れてレビュー項目が届くことがあります。マージモードでは、ここでマージします。
レビュー担当者の判定
pr-state.sh は、git のルートにある .skilly/config.json からボットのログイン名を読み込みます。
{ "review": { "bots": ["chatgpt-codex-connector[bot]", "some-reviewer"] } }
ログイン名が [bot] で終わる場合もボットとして扱います。キーまたはファイルがない場合は空のリストとなり、PR 作成者以外のすべてのレビュー担当者が人間として扱われます。実行のたびに設定を読み込み、ログイン名を記憶に頼って判定しないでください。
CI
チェックは PR が報告する内容に従います。リポジトリのティアによってチェックの構成が決まり、その設定は .skilly/config.json にあります(ティアについては verify スキルで説明しています)。verify はすべてのティアで実行される唯一のチェックなので、verify が赤の場合は常に、このブランチに問題があることを示します。
コミット
内容に応じて接頭辞を付ける Conventional Commit を使用します。チェックが失敗していた場合は fix:、リントや設定の細かな修正の場合は chore: を付けます。変更の由来を検索しやすいよう、本文を1行追加します。
Babysit-pr: fixes review thread <thread-url>
報告
各パスの最後に、head SHA、チェックの集計、マージ可能かどうか、プッシュした内容、CI の試行回数(3回中)、未解決の項目を記載します。