From base-tools
プルリクエストのCI状態とレビューコメントを確認し、必要な修正と返信を行います。完了条件を満たした場合は自動的にPRをマージします。PR作成後にCI失敗やレビューコメントへの対応が必要な場合や、`/fix-pr` コマンドが実行された場合に使用してください。
How this skill is triggered — by the user, by Claude, or both
Slash command
/base-tools:fix-prThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
このチェックリストをコピーし、進行状況の追跡に使用してください:
このチェックリストをコピーし、進行状況の追跡に使用してください:
タスク進捗:
gh pr view --json number --jq '.number'mergeStateStatus を確認し、状態に応じて対応する。
gh pr view {PR番号} --json mergeStateStatus --jq '.mergeStateStatus'BEHIND: PRブランチへ checkout し、作業ツリーがクリーンであることを確認してからベースブランチをマージする。
gh pr checkout {PR番号} でPRブランチへ移動し、git status --porcelain が空であることを確認する。gh pr view {PR番号} --json baseRefName --jq '.baseRefName' でベースブランチ名を取得し、git fetch origin {ベースブランチ} && git merge origin/{ベースブランチ} でマージする。DIRTY: コンフリクトが存在する。PRブランチへ checkout しベースブランチをマージしてコンフリクト解消を試みる。解消が困難な場合はコンフリクト箇所をユーザーに報告し、判断を仰ぐ。BLOCKED: 必須チェックまたは必須レビューが未完了。
gh pr view {PR番号} --json reviewDecision --jq '.reviewDecision' で確認する。REVIEW_REQUIRED または CHANGES_REQUESTED の場合: GitHub APIのキャッシュにより古い状態が返される可能性があるため、以下のリトライを行う。
reviewDecision を再取得する。REVIEW_REQUIRED または CHANGES_REQUESTED のままの場合、再度10秒待機して再取得する。APPROVED 等の別の状態に変わった場合は、手順3へ進む。CLEAN: マージ可能な状態。手順3へ進む。UNSTABLE: 必須でないチェックが失敗しているがマージは可能。手順3へ進む。HAS_HOOKS: マージフックが設定されている。手順3へ進む。DRAFT: ドラフトPRである旨をユーザーに報告し、続行するか判断を仰ぐ。UNKNOWN または null: 状態が未確定。10秒待機してから再取得する(最大3回まで)。3回取得しても UNKNOWN/null の場合は手順3へ進む。gh pr checks {PR番号} --watchgh pr checks --watch が "no checks reported" エラーで失敗した場合:
gh pr checks --watch は5分のタイムアウト付きで実行する:
timeout 300 gh pr checks {PR番号} --watchtimeout によりコマンドが終了した場合)、以下の手順で対応する:
gh pr checks {PR番号} で各チェックの状態を確認する。pending の場合、gh pr comment {PR番号} --body "@coderabbitai review" でレビューを再起動する。timeout 300 gh pr checks {PR番号} --watch で再度完了を待機する。pending のままの場合は、手順3-2〜3-3を繰り返す(最大2回まで)。gh pr checks {PR番号}gh run rerun {run-id} で再実行し、手順3に戻る。同一ワークフローの再実行は最大2回まで。gh api graphql --input - <<'EOF'
{
"query": "query($owner:String!, $repo:String!, $number:Int!, $after:String) { repository(owner:$owner, name:$repo) { pullRequest(number:$number) { reviewThreads(first:100, after:$after) { pageInfo { hasNextPage endCursor } nodes { id isResolved isOutdated comments(first:100) { nodes { author { login } body } } } } } } }",
"variables": {
"owner": "{OWNER}",
"repo": "{REPO}",
"number": {PR番号}
}
}
EOF
hasNextPage が true の間は variables に "after": "{endCursor}" を追加して繰り返し、全スレッドを取得する。isResolved が true → 対応済みのためスキップisOutdated が true かつ未解決 → 最新コードで指摘内容が解消済みか確認し、解消済みならスキップ[bot] サフィックスがある、または github-actions, codecov, dependabot, renovate 等の既知の bot アカウント)。isResolved: true)の場合、reviewDecision を確認する。
gh pr view {PR番号} --json reviewDecision --jq '.reviewDecision'CHANGES_REQUESTED または REVIEW_REQUIRED の場合:
gh pr view {PR番号} --json comments --jq '.comments[].body' で既存コメントを取得し、「全てのレビューコメントに対応しました。このPRをapproveしてください。」と同一の本文が存在するか確認する。gh pr view {PR番号} --json reviews --jq '.reviews[].author.login' で CHANGES_REQUESTED を出したレビュワーを特定し、コメント本文にメンション(@{レビュワー名})を含める。gh pr comment {PR番号} --body "@{レビュワー名} 全てのレビューコメントに対応しました。このPRをapproveしてください。"sleep 60reviewDecision を再確認する。
gh pr view {PR番号} --json reviewDecision --jq '.reviewDecision'APPROVED に変わった場合は手順7へ進む。CHANGES_REQUESTED または REVIEW_REQUIRED の場合も手順7へ進む(手順8の完了条件チェックで再評価される)。APPROVED またはその他の場合: 手順7へ進む。gh api graphql --input - <<'EOF'
{
"query": "mutation($threadId:ID!, $body:String!) { addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: $threadId, body: $body}) { comment { id body } } }",
"variables": {
"threadId": "{スレッドID}",
"body": "{返信内容}\n\n---\n🤖 Generated with [Claude Code](https://claude.ai/claude-code)"
}
}
EOF
gh api graphql --input - <<'EOF'
{
"query": "query($owner:String!, $repo:String!, $number:Int!) { repository(owner:$owner, name:$repo) { pullRequest(number:$number) { closingIssuesReferences(first:10) { nodes { number title } } } } }",
"variables": {
"owner": "{OWNER}",
"repo": "{REPO}",
"number": {PR番号}
}
}
EOF
mergeStateStatus を再確認する。
gh pr view {PR番号} --json mergeStateStatus --jq '.mergeStateStatus'CLEAN, UNSTABLE, HAS_HOOKS: マージ可能。手順11へ進む。BEHIND: ベースブランチをマージし、手順3に戻る(手順8の回数制限の対象)。DIRTY: コンフリクト解消を試みる。解消できた場合はコミット・プッシュして手順3に戻る(手順8の回数制限の対象)。解消が困難な場合はユーザーに報告し、判断を仰ぐ。BLOCKED: 必須チェックまたは必須レビューが未完了。
gh pr view {PR番号} --json reviewDecision --jq '.reviewDecision' で確認する。REVIEW_REQUIRED または CHANGES_REQUESTED の場合: GitHub APIのキャッシュにより古い状態が返される可能性があるため、以下のリトライを行う。
reviewDecision を再取得する。REVIEW_REQUIRED または CHANGES_REQUESTED のままの場合、再度10秒待機して再取得する。APPROVED 等の別の状態に変わった場合は、手順3に戻りCIの完了を待機する(手順8の回数制限の対象)。DRAFT: ドラフトPRである旨をユーザーに報告し、続行するか判断を仰ぐ。UNKNOWN または null: 10秒待機してから再取得する(最大3回まで)。3回取得しても確定しない場合はユーザーに報告し、判断を仰ぐ。gh api repos/{OWNER}/{REPO} --jq '{squash: .allow_squash_merge, merge: .allow_merge_commit, rebase: .allow_rebase_merge}'--squash--merge--rebasegh pr merge {PR番号} {選択したマージ方式フラグ}以下の全てを満たすこと:
CLEAN, UNSTABLE, HAS_HOOKS のいずれかであるnpx claudepluginhub canpok1/claude-code-plugins --plugin base-toolsDrives existing GitHub/GitLab PRs/MRs to merge: monitors CI/CD status, fixes issues in PR scope via sub-skills, handles multi-round code reviews, resolves comments until all requirements met.
Autonomously resolves PR merge blockers: conflicts, CI failures, review comments; syncs description and requests re-review. For unattended cron execution via loop skill.
Analyzes unresolved GitHub PR review comments via script and CI status via gh CLI to create specific, parallelizable fix plans. Useful post-PR feedback or CI failures.