create-pr について
create-pr は、事前確認、検証、作成後の確認を行うプルリクエスト作成スキルです。リモートホストに応じて作成 CLI を選び、積み重ね型 PR にも対応します。
主な機能
- 01ホストに応じた PR 作成
- 02ベースブランチの検出
- 03リポジトリの事前確認
- 04PR 種別に応じた検証
- 05CI 状態の監視
活用シーン
- 01検証を経た機能 PR の作成
- 02別のオープン PR を基点とする PR の作成
- 03PR 作成後の CI 確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ yonatangross/ orchestkit --skill create-prインストール後、Claude Code で/create-prを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
test-cases.jsonassets/pr-template.mdreferences/ci-integration.mdcoderabbit-cli-prereview.mdcoderabbit-harvest.mdcoderabbit-zero-reviews.mdmulti-commit-pr.mdparallel-validation.mdpr-body-templates.mdpr-playground.mdstacked-pr.mdrules/_sections.mdbranch-naming.mddiff-size-guidelines.mdpr-body-structure.mdpr-title-format.mdpreflight-validation.mdreview-readiness.mdscripts/coderabbit-harvest.sh詳細
プルリクエストを作成する
検証を含む包括的なPR作成です。すべての出力はGitHub PRに直接反映されます。
クイックスタート
create-pr
create-pr "Add user authentication"
CC ≥ 2.1.119 のマルチホストに関する注意(M122): PRの作成は、GitHub、GitLab、Bitbucket、GitHub Enterpriseで機能します。設定済みのリモート(
git remote -v)から対象ホストを検出し、ホストファミリーに応じて適切なCLIを使い分けてください。
ホストファミリー CLI github / github-enterprise gh pr create(GHEではGH_HOST=<host>を指定)gitlab / gitlab-self glab mr createbitbucket bb pr createカスタムのエンタープライズURL:
prUrlTemplate設定(src/skills/configure/とsrc/skills/chain-patterns/references/pr-from-platform.mdを参照)。
引数の解決
TITLE = "$ARGUMENTS" # Optional PR title, e.g., "Add user authentication"
# If provided, use as PR title. If empty, generate from branch/commits.
# $ARGUMENTS[0] is the first token (CC 2.1.59 indexed access)
ベースブランチの解決
リモートからベースブランチを特定します。リポジトリによって異なるため、dev や main をハードコードしないでください。
BASE=$(git symbolic-ref --short refs/remotes/origin/HEAD 2>/dev/null | sed 's|^origin/||')
BASE=${BASE:-main} # ref missing (fresh/shallow clone)? run: git remote set-head origin -a
以下の $BASE はすべて、この値を指します。
別のオープン中のPRからブランチを切る場合
作業がオープン中のPRに依存している場合(「PR #50 に依存するPR」など)、ベースは $BASE ではなく、そのPRのヘッドブランチです。
PARENT=50
PARENT_BRANCH=$(gh pr view "$PARENT" --json headRefName -q .headRefName)
git fetch origin && git rebase "origin/$PARENT_BRANCH" # pre-flight: sync with the parent
gh pr create --base "$PARENT_BRANCH" --title "$TYPE(#$ISSUE): ... [2/3]" \
--body "Stacked on #$PARENT. Do not merge into the parent branch."
Phase 1 のガードは引き続き適用されます。main または dev からPRを作成してはいけません。また、作業ツリーに変更がある状態で作成してはいけません。本文に git rev-parse "origin/$PARENT_BRANCH" を記録してください。親PRがスカッシュマージされた後は、そのshaが git rebase --onto "origin/$BASE" <that-sha> <branch> に必要な上流の引数になります。ブランチ自体は削除されています。スカッシュからの復旧、深さの上限、ドラフトの落とし穴については、Read("references/stacked-pr.md") を参照してください。
STEP 0:ユーザーの意図を確認する
タスクを作成する前に、PRの種類を確認してください。
AskUserQuestion(
questions=[{
"question": "What type of PR is this?",
"header": "PR Type",
"options": [
{"label": "Feature (Recommended)", "description": "Full validation: security + quality + tests"},
{"label": "Bug fix", "description": "Focus on test verification"},
{"label": "Refactor", "description": "Code quality review, skip security"},
{"label": "Quick", "description": "Skip validation, just create PR"}
],
"multiSelect": false
}]
)
回答に応じてワークフローを調整します。
- 機能追加:並列エージェント3つとローカルテストを含む完全なPhase 2
- バグ修正:test-generatorのみを実行し、ローカルテストを行うPhase 2
- リファクタリング:code-quality-reviewerのみを実行し、ローカルテストを行うPhase 2
- クイック:Phase 2を省略し、Phase 3に進む
オプションの事前チェック:claude ultrareview(CC 2.1.120以降、#1542)
claude ultrareview --help が成功する場合は、PRを開く前に任意で実行し、結果をPR本文の ## Pre-flight セクションに表示してください。CLIのサブコマンドは構造化された --json 出力を返します。本文には重大度が高または中の結果を抽出して記載し、すべての結果をフォローアップコメントとして投稿できます。
if claude ultrareview --help >/dev/null 2>&1; then
claude ultrareview "origin/$BASE..HEAD" --json > /tmp/ultra.json
# Bucket by severity, put HIGH in PR body, MEDIUM/LOW as comment
fi
CC 2.1.120未満ではスキップしてください(このサブコマンドは存在しません)。.github/workflows/ultrareview.yml ワークフローがPR作成時に同じコマンドを実行して保護するため、この事前チェックはフィードバックループを加速させる目的に限られます。
段階的な出力(CC 2.1.76)
PR作成中に結果を段階的に出力します。
| ステップ後 | ユーザーに表示する内容 |
|---|---|
| 事前チェック | ブランチの状態、リモートとの同期結果 |
| 各エージェント | エージェントから返された検証結果 |
| テスト | テスト結果、lint/型チェックの状態 |
| PR作成後 | PRのURL、CIステータスへのリンク |
3つのエージェントを並列実行する機能追加PRでは、すべてのエージェントの完了を待たずに、各エージェントから結果が返るたびに表示し、ローカルテストを実行してください。
STEP 1:タスクを作成する(必須)
ほかの作業を始める前に、進捗を追跡するタスクを作成してください。
# 1. Create main task IMMEDIATELY
TaskCreate(subject="Create PR for {branch}", description="PR creation with validation", activeForm="Creating pull request")
# 2. Create subtasks for each phase
TaskCreate(subject="Pre-flight checks", activeForm="Running pre-flight checks") # id=2
TaskCreate(subject="Run validation agents", activeForm="Validating with agents") # id=3
TaskCreate(subject="Run local tests", activeForm="Running local tests") # id=4
TaskCreate(subject="Create PR on GitHub", activeForm="Creating GitHub PR") # id=5
TaskCreate(subject="Generate PR playground", activeForm="Generating playground") # id=6
# 3. Set dependencies for sequential phases
TaskUpdate(taskId="3", addBlockedBy=["2"]) # Agents need pre-flight to pass
TaskUpdate(taskId="4", addBlockedBy=["3"]) # Tests run after agent validation
TaskUpdate(taskId="5", addBlockedBy=["4"]) # PR creation needs tests to pass
TaskUpdate(taskId="6", addBlockedBy=["5"]) # Playground after PR (needs title/summary)
# 4. Update status as you progress
TaskUpdate(taskId="2", status="in_progress") # When starting
TaskUpdate(taskId="2", status="completed") # When done — repeat for each subtask
ワークフロー
Phase 1:事前チェック
チェックリストの全項目については、Read("rules/preflight-validation.md") を読み込んでください。
BRANCH=$(git branch --show-current)
[[ "$BRANCH" == "dev" || "$BRANCH" == "main" ]] && echo "Cannot PR from dev/main" && exit 1
[[ -n $(git status --porcelain) ]] && echo "Uncommitted changes" && exit 1
git fetch origin
git rev-parse --verify "origin/$BRANCH" &>/dev/null || git push -u origin "$BRANCH"
Phase 2:並列検証(機能追加/バグ修正PR)
エージェントは1つのメッセージで起動します。エージェントの設定全体については、Read("references/parallel-validation.md") を読み込んでください。
| PRの種類 | 起動するエージェント |
|---|---|
| 機能追加 | security-auditor + test-generator + code-quality-reviewer |
| バグ修正 | test-generatorのみ |
| リファクタリング | code-quality-reviewerのみ |
| クイック | なし |
エージェントの処理完了後、ローカルで検証を実行します。
# Adapt to project stack
npm run lint && npm run typecheck && npm test -- --bail
# or: ruff check . && pytest tests/unit/ -v --tb=short -x
Phase 3:コンテキストを収集する
BRANCH=$(git branch --show-current)
ISSUE=$(echo "$BRANCH" | grep -oE '[0-9]+' | head -1)
git log --oneline "origin/$BASE..HEAD"
git diff "origin/$BASE...HEAD" --stat
フェーズ 3b:エージェントの帰属(自動)
PR を作成する前に、ブランチのアクティビティ台帳 .claude/agents/activity/{branch}.jsonl があるか確認します。
存在する場合は、PR 本文にエージェントの帰属セクションを生成します。
.claude/agents/activity/{branch}.jsonlを読み込みます(1 行につき JSON オブジェクト 1 つ、ブランチの全履歴)- エージェントの種類ごとに重複を除去します(各エージェントについて、実行時間が最も長いエントリを残します)
- PR 本文に追加する以下のセクションを生成します。
- バッジ行:エージェント数、生成されたテスト数、脆弱性を示す shields.io バッジ
- エージェントチームシート:エージェント、役割、ステージ(Lead/⚡ Parallel/Follow-up)、時間を含む Markdown テーブル
- クレジットロール:実行ステージ(Lead/Parallel/Follow-up)ごとにグループ化した折りたたみ式の
<details>セクション
- 各エージェントのエントリには、
agent(種類)、stage(0=リード、1=並列、2=フォローアップ)、duration_ms、summaryが含まれます。
台帳が存在しないか空の場合は、この手順を省略し、通常どおり PR を作成します。
CC 2.1.183 —
attribution.sessionUrl: Web および Remote Control のセッションでは、PR 本文に claude.ai のセッションリンクが追加されます。公開リポジトリでリンクを公開したくない場合は、PR を作成する前にattribution.sessionUrl: false(/config attribution.sessionUrl=false)を設定します。ork の上記のエージェント帰属セクションは、この設定とは独立しています。
フェーズ 3c:CodeRabbit CLI による事前レビュー(gh pr create の前)
CodeRabbit の PR レビューには、GitHub ID ごとのレート制限があります(Essentials:7 日間のレビュー数が 30 件未満の場合は 1 時間あたり 5 件まで補充され、60 件以上の場合は 1 時間あたり 1 件まで補充されます)。また、オープンな PR へのプッシュごとに 1 件消費されます。CLI には別枠があるため、まずブランチの差分をローカルでレビューします。あくまで参考であり、処理をブロックするものではありません。
CR_BIN=$(command -v coderabbit || true) # `cr` is also helm chart-releaser: accept it only by --help
[ -z "$CR_BIN" ] && command -v cr >/dev/null 2>&1 && grep -q CodeRabbit <<<"$(cr --help 2>&1)" && CR_BIN=cr
CR_OUT=$(mktemp "${TMPDIR:-/tmp}/cr-prereview.XXXXXX")
[ -n "$CR_BIN" ] && perl -e 'alarm shift; exec @ARGV' 600 \
"$CR_BIN" review --agent --base "origin/$BASE" </dev/null > "$CR_OUT" 2>&1 \
|| echo "CodeRabbit CLI pre-review skipped (not installed, not signed in, timed out, or errored): $CR_OUT"
このブランチで変更した行に明らかな不具合があれば修正してコミットし、フェーズ 2 のローカル検証を再実行してから、CLI を再実行せずにフェーズ 4 に進みます。--use-credits を省略しても、組織の従量課金アドオンが On demand または Off の場合にのみ費用が発生しません。Automatic の場合、超過分は課金されます。
検出、劣化時の表、課金モード、トリアージについては、Read("references/coderabbit-cli-prereview.md") を参照してください。
フェーズ 4:PR を作成する
Read("rules/pr-title-format.md") と Read("rules/pr-body-structure.md") に従います。Read("references/pr-body-templates.md") の HEREDOC パターンを使用します。
PR 本文の Test Plan セクションの後に、エージェントの帰属セクション(フェーズ 3b)を含めます。
TYPE="feat" # Determine: feat/fix/refactor/docs/test/chore
gh pr create --base "$BASE" \
--title "$TYPE(#$ISSUE): Brief description" \
--body "$(cat <<'EOF'
## Summary
[1-2 sentence description]
## Changes
- [Change 1]
- [Change 2]
## Test Plan
- [x] Unit tests pass
- [x] Lint/type checks pass
## Agent Team Sheet
| Agent | Role | Stage | Time |
|-------|------|-------|------|
| 🏗️ **backend-system-architect** | API design | Lead | 2m14s |
| 🛡️ **security-auditor** | Dependency audit | ⚡ Parallel | 0m42s |
| 🧪 **test-generator** | 47 tests, 94% coverage | ⚡ Parallel | 2m01s |
<details>
<summary><strong>🎬 Agent Credits</strong> — 3 agents collaborated on this PR</summary>
**Lead**
- 🏗️ **backend-system-architect** — API design (2m14s)
**⚡ Parallel** (ran simultaneously)
- 🛡️ **security-auditor** — Dependency audit (0m42s)
- 🧪 **test-generator** — 47 tests, 94% coverage (2m01s)
---
<sub>Orchestrated by <a href="https://github.com/yonatangross/orchestkit">OrchestKit</a> — 3 agents, 4m57s total</sub>
</details>
Closes #$ISSUE
---
Generated with [Claude Code](https://claude.com/claude-code)
EOF
)"
フェーズ 4b:PR Playground(必須。これがないと CI がブロックします)
bot 以外のすべての PR では、フェーズ 4 の後に Read("references/pr-playground.md") を実行してその指示に従います(アーキタイプ、docs/{branch-dir}/ へのコミット、本文への SHA 固定 Live Preview リンク)。
フェーズ 5:検証
PR_URL=$(gh pr view --json url -q .url)
echo "PR created: $PR_URL"
CI モニタリング(CC 2.1.71)
PR の作成後、CI ステータスのモニタリングをスケジュールします。
上限は CI のポーリング 60 分間です(5 分間隔の cron のため、実行は最大 12 回です)。cron ジョブは固定のプロンプトを繰り返すだけで、自身の実行回数を数えられないため、作成時に一度だけ計算した実際の期限をプロンプトに含めます。すべてのチェックが完了するか、期限に達するか、いずれか早い方で停止し、どちらの場合も CronDelete でジョブを削除します。
# Guard: Skip cron in headless/CI (CLAUDE_CODE_DISABLE_CRON)
# if env CLAUDE_CODE_DISABLE_CRON is set, run a single check instead
# deadline_iso = creation time + 60 minutes, in UTC, filled in ONCE here
CronCreate(
schedule="*/5 * * * *",
prompt="Check CI for PR #{pr_number}: gh pr checks {pr_number} --repo {repo}. Deadline {deadline_iso}.
All pass → CronDelete this job, report success.
Any fail → CronDelete this job, alert with failure details.
Still pending and `date -u` is at or past the deadline → CronDelete this job, report the pending checks."
)
CodeRabbit の指摘の取り込み
CI がグリーンになった後、gh pr merge または --auto の実行前に、リポジトリに .coderabbit.yaml があり、PR がドラフトではない場合は、Read("references/coderabbit-harvest.md") を実行します。
引き継ぎファイル
後続のスキルで使用する PR の詳細を書き込みます。
Write(".claude/chain/pr-created.json", JSON.stringify({
"phase": "create-pr", "pr_number": N, "pr_url": "...",
"branch": "...", "files_changed": [...], "related_issues": [...]
}))
ルール
- 不要なファイルを作らない — リポジトリのルートにファイルを作成しないでください
- ローカルで検証を実行する — lint/テストのためにエージェントを起動しないでください
- すべての内容を GitHub に配置する —
gh pr create --bodyで PR 本文を作成します - シンプルに保つ — PR 作成にはコマンドを 1 つだけ使用します
ghのレート制限のヒントを尊重する(CC ≥ 2.1.116) — Bash ツールがgh呼び出し後に GitHub のレート制限のヒントを表示した場合(例:/loop 5m gh pr checks …の監視中)、ループを停止してリセットを待ちます。無条件に再試行しないでください。詳細はork:github-operationsを参照してください。
次のステップ(PR 作成後にユーザーに提案)
review-pr {PR_NUMBER} # Self-review before requesting reviews
gh pr checks {PR_NUMBER} # one-shot status; the CI Monitoring cron polls up to its 60-minute deadline
/loop 1h gh pr view {PR_NUMBER} --json reviewDecision # Monitor review status
検証ゲート
PR の準備が整ったと宣言する前に、Read("${CLAUDE_PLUGIN_ROOT}/shared/rules/verification-gate.md") を適用してください。すべてのテストは、最新の証拠をもって合格している必要があります。CI チェックはすべて成功している必要があります。「問題ないはずです」では不十分です。
品質基準
以下のすべてを満たした状態を完了とします。
- 適切なベース(
origin/HEADまたは検出されたホスト相当から導出した$BASE)に対し、作業ツリーがクリーンなフィーチャーブランチから PR を作成している - タイトルが変更内容に合致する、規約に沿った
type(#issue): ...形式になっている - 本文に Summary、Changes、Test Plan の各セクションがあり、クローズする issue ごとに
Closes #Nキーワードが付いている - PR 作成前に、選択した PR タイプの事前検証をローカルで通過している(Quick タイプの場合のみ省略可能)
gh pr createの前(Phase 3c)に CodeRabbit CLI の事前レビューを 1 回実行しているか、実行を省略した理由を 1 行で Test Plan に記載しているreferences/pr-playground.mdに従い、docs/{branch-dir}/*.html に Playground HTML が存在し、本文からリンクされている(ボット以外の PR では必須)gh pr view --json urlが作成された PR の URL を返す.coderabbit.yamlが存在するリポジトリで、PR がドラフトでない場合、references/coderabbit-harvest.mdに従って CodeRabbit のスレッドをすべて解決していること。返信には修正の sha または却下理由を記載する(scripts/coderabbit-harvest.sh --unresolvedの出力が[]になること)
関連スキル
ork:commit— PR の前にコミットを作成しますork:review-pr— 作成後に PR をレビューします
ピッカーのフォールバック(#1795)
AskUserQuestion ピッカーが停止する場合(CC の入力バグではなく、スキーマの破損です。orchestkit#1795。現在は tests/skills/structure/test-askuserquestion-schema.sh によるテストで防止されています)、CC の開始前に ORK_ASK_FALLBACK=text を設定してください。lifecycle/ask-fallback-injector フックがリマインダーを挿入し、番号付きリストでインラインに選択肢を提示して、ユーザーに選択肢の番号で返信するよう求めるようアシスタントに指示します。
参考資料
Read("references/<file>") で必要に応じて読み込みます。
| ファイル | 内容 |
|---|---|
references/pr-body-templates.md | PR 本文のテンプレート |
references/parallel-validation.md | 並列検証エージェントの設定 |
references/ci-integration.md | CI 統合パターン |
references/multi-commit-pr.md | 複数コミットの PR に関するガイダンス |
assets/pr-template.md | PR テンプレート(レガシー) |
scripts/coderabbit-harvest.sh | CodeRabbit のスレッド:読み取り(GraphQL 呼び出し 1 回)、--reply、--resolve |
references/coderabbit-zero-reviews.md | 取得結果がゼロの場合:レビュー済みで問題なし、それとも未レビュー? |
references/coderabbit-cli-prereview.md | Phase 3c:PR レビュー枠が限られている理由、CLI コマンド、縮退表、トリアージ |
references/pr-playground.md | Phase 4b:PR Playground のアーキタイプ、コミットパス、SHA 固定の Live Preview リンク(CI ゲート) |
references/coderabbit-harvest.md | CI 成功後:CodeRabbit のすべてのスレッドを読み、反論、修正または却下し、解決します |