templates/claude/skills/ship-parallel/SKILL.md
複数Issueを並列shipするオーケストレーションスキル。SMエージェントで並列判定し、TeamCreate + 手動worktree + Agentで同時実行する。「/ship-parallel」「並列シップ」「まとめてship」と言った時に使用。
npx skillsauth add hirokimry/vibecorp ship-parallelInstall 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.
ultrathink
複数の Issue を並列に /ship 実行する。SM エージェントが Issue 群の依存関係を分析し、その結果に基づいてスキル実行者が TeamCreate + 手動 worktree + Agent で同時進行する。
full プリセット専用。SM エージェントによる並列判定が必要なため、standard 以下では利用不可。
/ship-parallel <Issue URL 1> <Issue URL 2> [...]
/ship-parallel --all
--all: open な Issue を全て取得し、SM が選別gh) が認証済みであることTeamCreate + 手動 worktree + Agent 方式を採用する。 SM は分析専任、オーケストレーションはスキル実行者が直接実行する。
スキル実行者(オーケストレーター)
├─ 1. Agent(SM) で Issue 群の並列判定を取得
│ └─ SM が依存関係を分析し、並列グループ・直列チェーン・保留を返す
├─ 2. 実行計画をユーザーに提示・確認
├─ 3. 各 Issue の worktree を事前作成(git worktree add + rsync .claude/)
├─ 4. TeamCreate でチーム作成 + Agent で起動(各 Agent は /ship --worktree で実行)
│ └─ Agent は指定された worktree パス内で全操作を実行
├─ 5. 各 Agent の進捗を SendMessage で監視
│ ├─ エラー報告 → スキル実行者が判断(中断/リトライ/スキップ)
│ └─ 完了報告 → 結果を記録
├─ 6. 並列 PR 間のコンフリクト検知
└─ 7. 結果統合、レポート出力
Agent(isolation: "worktree") は TeamCreate 下で機能しない(#127 検証1で確定)git worktree add + rsync .claude/)で skills/hooks 同期が確実(#127 検証2で確定)/ship --worktree <path> でスキルチェーン全体が worktree 内で動作(#128 で実装済み)/sync-check 等と同じ「分析エージェント→メイン実行」パターンに統一vibecorp.yml の preset を確認する。
awk '/^preset:[[:space:]]*/ { sub(/^preset:[[:space:]]*/, ""); print; exit }' .claude/vibecorp.yml
full 以外の場合は「/ship-parallel は full プリセット専用です」と報告して終了する。
URL 直接指定の場合:
各 URL から Issue 情報を取得する。
gh issue view <Issue URL> --json number,title,body --jq '{number, title, body}'
--all の場合:
open な Issue を一括取得する。
gh issue list --state open --json number,title,body,labels --limit 500
Issue が1件以下の場合は「並列実行の対象がありません。単一 Issue には /ship を使用してください」と報告して終了する。
SM エージェントを Agent ツールで起動し、Issue 群の並列実行可否を判定させる。 SM は分析結果のみを返し、オーケストレーションには関与しない。
SM エージェントが Agent ツールの利用可能タイプにない場合は、general-purpose エージェントに SM エージェント定義(.claude/agents/sm.md)の内容を渡して代用する。
SM に渡すプロンプト:
以下の Issue 群の並列実行可否を分析してください。
## Issue 一覧
{Issue 情報のリスト}
## 分析観点
- 各 Issue の影響範囲(変更対象ファイル・モジュール)
- Issue 間の依存関係(同一ファイル変更、機能的依存)
- コンフリクトリスク
## 出力フォーマット
以下の分類で結果を返してください:
- 並列グループ: 同時実行可能な Issue の集合(複数グループ可)
- 直列チェーン: 順序制約のある Issue のリスト(依存理由付き)
- 保留: 情報不足で判定できない Issue(理由付き)
- コンフリクトリスク: 並列実行時に衝突する可能性のあるファイル
SM の分析結果に基づき、スキル実行者が実行計画をユーザーに提示し、承認を求める。
## 並列 ship 実行計画
### 並列グループ 1
| Issue | タイトル | 影響範囲 |
|-------|---------|---------|
| #10 | xxx | .claude/skills/foo/ |
| #11 | yyy | tests/test_bar.sh |
### 直列チェーン
| 順序 | Issue | タイトル | 依存理由 |
|------|-------|---------|---------|
| 1 | #12 | zzz | - |
| 2 | #13 | www | #12 と同一ファイル変更 |
### 保留(実行対象外)
| Issue | 理由 |
|-------|------|
| #14 | 影響範囲が不明 |
実行しますか? (y/n)
ユーザーが承認しない場合は終了する。
承認後、スキル実行者が worktree を事前作成し、TeamCreate でチームを組成し、各 Issue に対して Agent を起動する。
TeamCreate(team_name: "ship-parallel-{timestamp}")
Issue 本文にベースブランチの指定がある場合はそれを使用する。ない場合は現在のブランチを使用する。
各 Issue に対して、オーケストレーター自身が worktree を作成する。
# プロジェクト名を取得
project=$(basename "$(pwd)")
# worktree を作成(ブランチも同時に作成)
git worktree add "../${project}.worktrees/dev_${Issue番号}_${要約}" -b "dev/${Issue番号}_${要約}"
# .claude/ ディレクトリを同期(skills, hooks, settings.json 等)
# state/ は worktree ごとに独自に作成・管理されるため除外(main の state を持ち込まない)
# plans/ は XDG 準拠で ~/.cache/vibecorp/plans/<repo-id>/ に配置されるため除外(旧 .claude/plans/ の残置ファイルを worktree に持ち込むと子 Agent が誤認して permission prompt で stuck する: #372)
rsync -a --exclude=state/ --exclude=plans/ .claude/ "../${project}.worktrees/dev_${Issue番号}_${要約}/.claude/"
worktree 作成の確認:
git worktree list
並列グループ内の各 Issue に対して、Agent ツールを起動する。 同一グループの全 Agent は1つのメッセージで同時に起動する(並列実行を最大化)。
Agent 起動時は mode: "dontAsk" を指定する。デフォルト mode では teammate のツール呼び出しが親セッションに承認要求を送り、並列実行時に承認ダイアログが多発するため。dontAsk により teammate 側の承認要求を抑制できる。--dangerously-skip-permissions と組み合わせることで並列実行時の承認負荷を下げる(参照: docs/design-philosophy.md の「承認フローへの非介入」、#260)。
各 Agent に渡すプロンプト:
あなたは Issue #{番号} の実装担当です。
以下の Issue を /ship --worktree で実装してください。
- Issue URL: <Issue URL>
- worktree パス: <worktree_path>
- ベースブランチ: <ベースブランチ>
実行コマンド:
/ship <Issue URL> --worktree <worktree_path>
注意:
- 全操作は worktree パス内で実行されます(/ship --worktree が自動処理)
- PR のベースブランチは <ベースブランチ> を指定してください
- Bash は 1 コマンド 1 呼び出しに分割すること。`cd ... && cmd1 && cmd2 | head` のように cd + パイプ + リダイレクトを含む compound command は Claude Code 本体の built-in security check(path resolution bypass 検出)に引っかかり permission 確認が出るため、別々の Bash 呼び出しに分ける(参照: #258)
完了したら SendMessage でチームリーダーに以下を報告してください:
- PR URL
- 成功/失敗
- 失敗の場合は理由
エラーが発生した場合も SendMessage で即座にチームリーダーに報告してください。
直列チェーンがある場合、前の Issue の Agent が完了してから次の Issue の Agent を起動する。 SendMessage で前の Agent の完了を確認し、成功していれば次を起動する。
TeamCreate + SendMessage によるリアルタイム監視:
並列グループの全 Agent が完了した後、PR 間のコンフリクトを検知する。
# 各 PR のブランチを順にマージして衝突を検出(ドライラン)
git merge-tree $(git merge-base HEAD <branch_a>) HEAD <branch_a>
## /ship-parallel 完了
### 成功
| Issue | PR | ブランチ |
|-------|-----|---------|
| #10 | #20 | dev/10_xxx |
| #11 | #21 | dev/11_yyy |
### 失敗
| Issue | 理由 |
|-------|------|
| #12 | テスト失敗(詳細: ...) |
### 保留(未実行)
| Issue | 理由 |
|-------|------|
| #14 | 影響範囲が不明 |
### 後始末
完了した worktree は `/worktree clean` で自動削除できます。
以下の状況ではユーザーに報告して判断を委ねる:
| 状況 | タイミング | |------|-----------| | full プリセットでない | ステップ 1 | | Issue が1件以下 | ステップ 2 | | SM が全 Issue を保留に分類 | ステップ 3 | | ユーザーが実行計画を承認しない | ステップ 4 | | 個別の /ship が介入ポイントに到達 | ステップ 5 | | 並列 PR 間でコンフリクト検出 | ステップ 7 |
git worktree add)が失敗した場合は該当 Issue をスキップし、他の Issue の処理は継続する--force、--hard、--no-verify は使用しない\(...) を使わない — Bash 上で \ がエスケープ文字、() がサブシェルとして解釈され、意図しない展開やパースエラーを引き起こすため。必ず + で結合する2>/dev/null、|| echo、; echo 等のリダイレクトやフォールバックを付加しない(根拠)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 段階で挙動を壊さず適用する。自動マージ禁止。