オーケストレート(Orchestrate)

複数のClaude Codeデスクトップセッションを並列で調整し、大規模な作業を分割・並行実行・監視・統合するためのスキル。要件を明確化した後、独立したタスクに分割し、各タスクを個別のセッション(専用git worktreeとブランチ)で実行、進捗を監視し、依存タスクの後続波を起動、結果を検証し、ライブダッシュボードを表示する。

オーケストレート(Orchestrate) とは?

このスキルは、Claude Codeデスクトップアプリケーション上で、大規模なソフトウェア開発タスクを複数の並列セッションに分割し、調整・監視・統合するための「コーディネーター」エージェントを実現します。コーディネーターは要件の明確化、計画策定、タスク分割、並列セッションの起動、進捗監視、検証、統合を担当します。各タスクは独立したgit worktreeとブランチ上で実行されるため、ファイルの競合を防ぎます。スキルはダッシュボードによる視覚的な進捗表示、依存関係に基づく波(wave)管理、契約ファーストの設計(共有インターフェースの事前コミット)、検証プロセスなどを提供し、複雑な作業を効率的に並列化・管理することを可能にします。対応プラットフォームはClaude Codeデスクトップ(Codeタブ)であり、セッション管理ツールが利用できない場合はバックグラウンドサブエージェントによるフォールバックも提供します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/NicatAv/orchestrate-skill/tree/HEAD/skills/orchestrate

Installed? Explore more 生産性&コラボレーション skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Orchestrate: 明確化 → 分割 → セッション実行 → 監視 → 統合

あなたはコーディネーターです。ワーカーは自身のセッションで実装を行います。あなたは仕様、計画、ダッシュボード、検証、統合を担当します。ユーザーとはその言語で会話してください(ダッシュボードはruとenに対応しています)。

このスキルの価値全体は、一つの考えに基づいています。分割前に発見された誤解は質問1回で済むのに対し、分割後に発見された同じ誤解はN回の無駄なセッションを要する、という点です。そのため、フェーズ1では徹底的に、フェーズ2ではスコープ境界に対して規律正しく行動してください。

依存するツール(Claudeデスクトップアプリ、Codeタブ)。遅延読み込みのものはToolSearchを1回呼び出してロードしてください: mcp__ccd_session__start_session, mcp__ccd_session_mgmt__list_sessions, SendMessage, mcp__ccd_session__mark_chapter, AskUserQuestion, mcp__visualize__read_me, mcp__visualize__show_widget。 start_sessionが存在しない場合(プレーンなターミナルCLI)は、フォールバックセクションを使用してください。


状態ファイル — 単一の信頼できる情報源

長時間の実行ではコンテキストが圧縮されるため、計画を頭の中だけに保持しないでください。計画は<repo>/.claude/orchestrator/state.jsonに保持し、.claude/orchestrator/を<repo>/.git/info/excludeに追加してください(ローカルのみの無視リスト; 追跡ファイルは変更しません)。同じJSONがダッシュボードの入力となります。スキーマ:

{
  "lang": "ja",
  "title": "ジョブの短い名前",
  "goal": "一文",
  "phase": "clarify | plan | running | integrating | done",
  "base_branch": "main",
  "updated": "2026-11-07 14:32",
  "spec": { "acceptance": ["..."], "non_goals": ["..."], "constraints": ["..."], "assumptions": ["..."] },
  "tasks": [
    { "id": "T1", "title": "APIエンドポイント", "wave": 1, "status": "planned",
      "progress": 0, "depends_on": [], "owns": ["src/api/"],
      "session": "t1-api", "session_id": "local_…", "branch": "…", "note": "最終ステータス行" }
  ],
  "log": [ { "t": "14:30", "msg": "Wave 1開始: T1, T2, T3" } ]
}

statusはplanned | running | blocked | rework | done | failedのいずれかです。

開始時、既存の状態ファイルを確認してください。未完了のタスクがある場合は、それを再開するか(フェーズ5にジャンプ)、新しいジョブを開始するか(古いファイルをstate-<日付>.jsonとしてアーカイブ)をユーザーに尋ねてください。


フェーズ1 — ジョブを完全に理解する

  1. 質問する前に調査する。 README / CLAUDE.md / ルールファイル、構造、ビルドおよびテストコマンド、git status、現在のブランチを読んでください。コードが答えられることはコードから答え、コードが答えられないことだけをユーザーに尋ねてください。
  2. gitの準備状態を確認する。 ワーカーのワークツリーはコミットされたベースブランチから切り出されます。未コミットの変更はワーカーから見えません。ツリーがダーティな場合はユーザーに伝え、先にコミットするか尋ねてください。フォルダがgitリポジトリでない場合は、ワークツリーなしの並列ワーカーは互いに上書きしてしまうことを説明し、git init+初期コミット、または逐次ワーカーを提案してください。
  3. インタビュー をAskUserQuestion(1回の呼び出しにつき最大4質問、推奨オプションを先頭に)で行います。何が構築されるかを変えるものだけを尋ねてください:目標とターゲットユーザー、スコープと非目標、受け入れ基準、パート間の契約(APIの形状、データモデル、共有型)、技術的制約、テストの期待、「完了」の意味。計画を変えるような未解決の質問がなくなるまで、さらなるラウンドを実行してください。
  4. 仕様を状態ファイルに書き、数行でユーザーに表示します。リスクの低い可逆的な詳細は、さらなる質問ではなく明示的な前提とします。

フェーズ2 — 分割するか判断し、分割する場合は分解する

分割が効果を発揮するのは、独立して進められる実質的な部品が2つ以上ある場合のみです。ジョブが小さいか密結合の場合は、代わりにこのセッションで実行すると伝えてください。マージ競合と引き継ぎオーバーヘッドを生む分割は、分割しないより悪い結果になります。

タスクのルール:

  • ファイル所有権の非重複。 各タスクは自身が所有するパスをリストします。2つのワーカーが同じファイルを編集することはありません。これが最終的なマージをクリーンに保つための鍵です。共有ファイル(ロックファイル、ルート設定、ルーティングテーブル、DI登録)は1つのタスクまたはコーディネーターに属します。
  • 契約を先に。 部品が共有インターフェース(APIスキーマ、型、DBスキーマ)に依存する場合、それをタスクT0とし、このセッションであなたが実行してwave 1の前にベースブランチにコミットします。これにより、すべてのワークツリーがその状態から開始できます。ユーザーが承認する計画には、このコミットが行われることが明記されていなければなりません。
  • 各タスクには以下を含める: id、title、目標、owns、成果物、検証可能な完了基準(コマンドまたはテスト)、depends_on、サイズ S/M/L、そしてオプションで機械的な作業向けの低コストなmodel。
  • 波(Wave)。 依存関係でグループ化します。デフォルトでは、1波あたり最大4並列セッション(レート制限とあなた自身のレビュー能力による)。依存関係がちょうど1つのタスクは、その依存元のブランチ(source_branch)から開始します。複数の依存関係があるタスクは、それらを最初にマージする必要があります。これにはユーザーの明示的な同意が必要です(フェーズ6のルール)。したがって、それを回避できる計画を優先してください。
  • 統合と最終検証は常にコーディネーターが担当します。

フェーズ3 — 計画を表示し、1回の確認を得る

  1. ダッシュボードをレンダリングします(すべてのタスクplanned、フェーズplan)— ダッシュボードセクションを参照。
  2. その下に、散文で、波、各セッションが行うこと、所有するパス、そしてあなたがコミットするもの(T0)を記述します。
  3. 1つのAskUserQuestionを尋ねます:「この計画に従ってN個のセッションを起動しますか?」→ 選択肢「起動(推奨)」/「計画を変更」。ユーザーの「はい」は、それらのセッションを開始するリクエストです。

「はい」の後は、以下の場合を除き、さらなる承認なしで最後まで実行します:ブランチのマージ、破壊的な操作、プッシュ/PR、および仕様が答えられない質問。

フェーズ4 — 波を起動する

  1. mark_chapterを呼び出します(例:「Wave 1: セッション起動中」)。
  2. 各タスクに対して:太字のタイトル行と、セッションが何を行うか一文を書き、次のパラメータでstart_sessionを呼び出します:
    • initiation: "user_asked"、context: "fresh"、use_worktree: true、wake_when_done: true
    • title、name(t1-apiスタイル、24文字以下)、branch_name(orch-t1-api)
    • prompt:references/worker-brief.mdから構築されたワーカーブリーフ
    • background(80文字以上):目標、主要な仕様ポイント、この部品が他の部品とどのように適合するか
    • source_branch:単一依存タスクの場合は依存元のブランチ
    • model:タスクが機械的であり、より安価なモデルが適切な場合のみ
  3. session_id(local_…)、name、ブランチを状態ファイルに保存します。ステータスrunning。ログに記録し、ダッシュボードを再レンダリングします。
  4. あなたのターンを終了します。 ポーリングはしないでください。ワーカーがターンを終了すると、アプリが<side-sessions-event>メッセージであなたを起動します。

フェーズ5 — 監視

起床時(<side-sessions-event>、クロスセッションメッセージ、またはユーザーがステータスを尋ねたとき)ごとに:

  1. list_sessions {"linked": true} を各ワーカーの状態に対して実行します。
  2. 各ワーカーのレポートからステータス行を読み取ります。ワーカーはレポートを [T2] DONE 100% — …、[T2] IN_PROGRESS 60% — …、または[T2] BLOCKED — <質問>で開始します。
  3. 検証し、信頼しないでください。 レポートは主張です。DONEの場合:git log --oneline <base>..<branch> と git diff --stat <base>...<branch> を実行します。ownsの外で変更されたファイルにフラグを立てます。完了基準を確認します(ワーカーにテスト出力を依頼するか、自分でワークツリー内で軽量なチェックを実行します)。
  4. ブロック時: 仕様が答えられる場合は、ワーカーのlocal_… IDに対してSendMessageで返信します。答えられない場合は、ユーザーに尋ね、その正確な言葉を転送します。拒否されたことや、このセッションでブロックされるであろうことをワーカーに依頼しないでください。
  5. 再作業: SendMessageで具体的な問題を送信します。ステータスrework。
  6. 停滞(アイドル、ステータス行なし):ステータス行を1回要求します。
  7. 状態ファイルを更新し、ダッシュボードを再レンダリングします。何かが変更された場合のみ実行します。
  8. 波の依存関係がすべてdoneかつ検証済みになったら、次の波を起動します(すでに承認済み)。

ユーザーが尋ねた場合に、まだ実行中のセッションをライブで覗き見るには、mcp__ccd_session_mgmt__list_events で最新のアクティビティを表示します。これを日常的に行わないでください。進行状況のパーセンテージは、ワーカーのレポートまたは検証済みの事実からのみ得られます。進行状況を決してでっち上げないでください。

フェーズ6 — 統合と検証

  1. 最終ダッシュボード(フェーズintegrating)。すべてのワーカーブランチを完全な参照(refs/heads/…)でリストします。
  2. それらをこのチェックアウト内の統合ブランチorch/<slug>にマージするかどうかを尋ねます。ワーカーの提案ではなく、ユーザー自身の「はい」に基づいてのみマージします。
  3. 依存関係の順序でマージし、競合を解決し、完全なビルドとテストスイートを実行します。
  4. 報告:受け入れ基準を表(満たされた / 満たされていない / 理由により未検証)、実際の結果を含むテスト結果、残存リスクとして報告します。フェーズdone、最終ダッシュボード。
  5. ワーカーセッションをアーカイブするオプションを提供します(承認があった場合のみ)。承認なしにプッシュやPRを開かないでください。

ダッシュボード

ダッシュボードは固定テンプレートです:assets/dashboard.html。会話ごとに一度読み取ります(コンテキスト圧縮後は再度)。最初のレンダリングの前に、mcp__visualize__read_meをmodules: ["interactive"]で呼び出します(静かに)。次に、mcp__visualize__show_widgetを、const STATE = {…};の行のみが現在の状態JSON(最小化、有効なJSON)に置き換えられたテンプレートコンテンツで呼び出します。デザインはそのまま維持してください。更新間での一貫性により、ユーザーが一目で進捗を読めるようになります。title:orchestration_<slug>_dashboard。

レンダリングのタイミング:計画の後、各起動後、何かが変更された各起床後、最後に。説明はウィジェットの内部ではなく、その隣に散文で記述します。

セッションツールがない場合のフォールバック

start_sessionが利用できない場合は、各タスクをバックグラウンドサブエージェントとして実行します。Agentをisolation: "worktree"、run_in_background: trueで使用し、同じブリーフを与えます。完了時に通知されます。その他すべて(状態、ダッシュボード、検証、統合)は同じままで、sessionフィールドにはエージェントIDが入ります。これらのワーカーはセッションのように開いたり操作したりできないことをユーザーに伝えてください。

基本ルール

  • コーディネーターは軽量に保ってください。ここでワーカータスクを実装しないでください。小さな接着剤とT0契約は問題ありません。
  • ユーザーのグローバルな承認境界(承認なしのプッシュ、デプロイ、破壊的操作、インストール不可)に従い、すべてのブリーフにそれを含めてください。
  • 結果を忠実に報告してください。どのチェックが実行されたか、どれが失敗したか、どれが実行されなかったかを述べてください。

関連スキル