skills/pr-review-loop/SKILL.md
PR をマージまで監視し、CodeRabbit 指摘があれば /vibecorp:pr-review-fix を同期実行して完遂する。teammate 配下でも 1 ターン内で動作する。「/pr-review-loop」「レビュー対応して」「PRレビュー修正して」と言った時に使用。
npx skillsauth add hirokimry/vibecorp pr-review-loopInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
PR の状態を gh pr view でポーリングし、MERGED / CLOSED に到達するか escalation 条件に当たるまで、teammate のターン内で完遂する。CHANGES_REQUESTED を検知したら /vibecorp:pr-review-fix を同期呼び出しして指摘を消化する。
/loop や ScheduleWakeup のような非同期スケジューラには依存しない。teammate(/vibecorp:ship-parallel 配下の Agent)はメッセージ駆動で idle 化すると wakeup が届かないため、そこで PR が放置される構造欠陥を回避する。
/vibecorp:pr-review-loop # 現在のブランチの PR を対象に開始
/vibecorp:pr-review-loop <PR URL> # PR URL を直接指定
/vibecorp:pr-review-loop --worktree <path> # worktree 内で実行
--worktree <path> が指定された場合、全操作を指定パス内で実行する。
cd <path> && command で実行する<path>/ を基準とした絶対パスを使用する--worktree <path> を引き継いで /vibecorp:pr-review-fix を呼ぶ| 値 | 設定 | 理由 | |-----|-----|------| | polling 間隔 | 30 秒 | CodeRabbit / CI 遷移頻度に対して充分 | | max iterations | 20 | 30 秒 × 20 = 約 10 分 | | timeout | 60 分 | fail-safe |
PR URL が指定されていればそこから owner/repo/PR 番号を抽出する。未指定なら現在のブランチから自動検出する。
gh pr view --json number,url,headRefName,baseRefName --jq '{number, url, headRefName, baseRefName}'
PR が見つからなければ「PR 未作成のため /vibecorp:pr を先に実行してください」と報告して終了する。
awk '/^coderabbit:/{found=1; next} found && /^[^ ]/{exit} found && /enabled:/{print $2}' \
"$CLAUDE_PROJECT_DIR"/.claude/vibecorp.yml
false の場合は CodeRabbit レビュー待ちをスキップし、ステップ 4(auto-merge 設定)から実行して終了するtrue または未定義(空)の場合はステップ 3 へautoMergeRequest が未設定なら設定する。既設定ならスキップする。
gh pr view <pr_number> --json autoMergeRequest --jq '.autoMergeRequest'
gh pr merge <pr_number> --squash --auto
MERGED / CLOSED か escalation 条件に到達するまで、以下を最大 20 反復・60 分以内で繰り返す。
各反復の先頭で PR 状態を一括取得する。
gh pr view <pr_number> \
--json state,mergeStateStatus,reviewDecision,autoMergeRequest \
--jq '{state, mergeStateStatus, reviewDecision, autoMergeRequest}'
| state | reviewDecision | mergeStateStatus | 行動 |
|-------|----------------|-------------------|------|
| MERGED | – | – | 成功終了 |
| CLOSED | – | – | 「PR がクローズされました」と報告して正常終了 |
| OPEN | CHANGES_REQUESTED | – | /vibecorp:pr-review-fix を同期呼び出し → sleep 30 → 次反復 |
| OPEN | – | CLEAN | auto-merge 発動待ち(sleep 30 → 次反復) |
| OPEN | – | BLOCKED / BEHIND / UNSTABLE / UNKNOWN / HAS_HOOKS | CI / approve 待ち(sleep 30 → 次反復) |
| OPEN | – | DIRTY | escalate(マージコンフリクト発生) |
| OPEN | – | DRAFT | escalate(Draft PR は対象外) |
/vibecorp:pr-review-fix(worktree モードでは --worktree <path> を引き継ぐ)を Skill ツールで同期呼び出しする/vibecorp:pr-review-fix が rate limit 停止を返した場合は escalatesleep 30 で CodeRabbit 再レビューを待つgh pr view各反復の先頭で経過時間と反復回数を確認する。
以下のいずれかが満たされたら escalation する。
mergeStateStatus == DIRTYmergeStateStatus == DRAFT/vibecorp:pr-review-fix が rate limit 停止を返したSendMessage ツールが使える場合は teammate と判断し、team-lead に escalation を送る。
to: team-lead
message: "PR #<番号> で /vibecorp:pr-review-loop が <理由> により escalation。状態: <state/mergeStateStatus/reviewDecision> 反復: <n>"
標準出力に escalation 内容を表示して終了する。
## /vibecorp:pr-review-loop 完了
- PR: #<pr_number>
- 結果: MERGED / CLOSED / escalated(理由)
- 反復回数: <n>
- 経過時間: <分>
- /vibecorp:pr-review-fix 呼び出し回数: <n>
--force、--hard、--no-verify は使用しない\(...) を使わない — 必ず + で結合する(根拠)2>/dev/null、|| echo、; echo 等のリダイレクトやフォールバックを付加しない(根拠)cd ... && cmd | head 2>/dev/null のように cd + パイプ + リダイレクトを含む compound command は Claude Code 本体の built-in security check で止められる(参照: #258)/loop や ScheduleWakeup を使わない — このスキルは teammate のターン内で同期完遂することが要件(根拠)data-ai
skills/**/SKILL.md 内に embed された 5 行以上のエージェント呼出プロンプトテンプレ・長文ブロックを .claude/rules/notification-prompt-extraction.md 基準で skills/<skill>/prompts/<name>.md に切り出す migration skill。「/prompts-extract-all」「プロンプト切り出し」「プロンプト extract」「SKILL.md プロンプト migration」と言った時に使用。検出は awk でフェンスコードブロックを抽出して行数カウント、要否判定は LLM が閾値・用途軸・命名規約と照合。diff 提案 → CEO 承認 → 書換の 2 段階で挙動を壊さず適用する。自動マージ禁止、自律ループ対象外。
documentation
.github/workflows/**/*.{yml,yaml} の --body 通知文と hooks/**/*.sh の長文 echo/printf/heredoc を .claude/rules/notification-prompt-extraction.md 基準で個別 .md ファイルに切り出す migration skill。「/notifications-extract-all」「通知文切り出し」「通知文 extract」「workflow 通知 migration」と言った時に使用。検出は grep で機械絞り込み、要否判定は LLM が閾値・命名規約と照合。diff 提案 → CEO 承認 → 書換の 2 段階で挙動を壊さず適用する。自動マージ禁止、自律ループ対象外。
development
`**/*.sh` / `**/*.js` / `**/*.ts` / `**/*.py` / `**/*.rb` / `**/*.go` / 設定ファイル等のコード内コメントを一括棚卸しし、 `.claude/rules/code-comments.md` と機械的に照合する。 diff 提案 → CEO 承認 → 書換の 2 段階で自動マージを禁じる。 生成コード・`node_modules`・`vendor`・`dist`・`build` 等は除外する。 「/vibecorp:comments-rewrite-all」「コメント全書き直し」「コード内コメント棚卸し」 と言った時に使用。
development
skills/**/SKILL.md・agents/*.md・.claude/rules/*.md を .claude/rules/prompt-writing.md 基準で一括書き直し提案するスキル。「/prompts-rewrite-all」「プロンプト書き直し」「スキル一括書き直し」「エージェント書き直し」と言った時に使用。claude-code-guide サブエージェントで Claude Code 公式仕様(docs.claude.com)を確認し、prompt-writing.md の指針 MUST / 禁止パターンと照合する。diff 提案 → CEO 承認 → 書き換えの 2 段階で挙動を壊さず適用する。自動マージ禁止。