Claude DevFleet マルチエージェントオーケストレーション
使用タイミング
複数の Claude Code エージェントを並列にディスパッチしてコーディングタスクを処理する必要がある場合に、このスキルを使用します。各エージェントは分離された Git ワークツリー内で動作し、完全なツール環境を利用できます。
セットアップ
DevFleet サーバーは ECC にバンドルされておらず、別のプロジェクトです。まず、以下のリポジトリからインストールして実行してください: https://github.com/LEC-AI/claude-devfleet
次に、MCP を介して実行中のインスタンスに接続します:
claude mcp add devfleet --transport http http://localhost:18801/mcp
初回使用前に、ポート 18801 で待受中のプロセスが、インストールした DevFleet バイナリであることを確認してください(localhost MCP サーバーに関する SECURITY.md を参照)。
動作の仕組み
ユーザー → 「認証とテストを含む REST API を構築」
↓
plan_project(prompt) → project_id + ミッション DAG
↓
ユーザーに計画を表示 → 承認を得る
↓
dispatch_mission(M1) → エージェント 1 がワークツリー内で起動
↓
M1 完了 → 自動マージ → M2 を自動ディスパッチ (depends_on M1)
↓
M2 完了 → 自動マージ
↓
get_report(M2) → files_changed, what_done, errors, next_steps
↓
ユーザーにレポート
ツール
| ツール | 目的 |
|---|---|
plan_project(prompt) | AI が説明を、チェーンされたミッションからなるプロジェクトに分割します |
create_project(name, path?, description?) | 手動でプロジェクトを作成し、project_id を返します |
create_mission(project_id, title, prompt, depends_on?, auto_dispatch?) | ミッションを追加します。depends_on はミッション ID 文字列のリストです(例: ["abc-123"])。依存関係が満たされたときに自動開始させるには、auto_dispatch=true を設定します。 |
dispatch_mission(mission_id, model?, max_turns?) | ミッションでエージェントを開始します |
cancel_mission(mission_id) | 実行中のエージェントを停止します |
wait_for_mission(mission_id, timeout_seconds?) | ミッションが完了するまでブロックします(下記の注を参照) |
get_mission_status(mission_id) | ブロックせずにミッションの進捗を確認します |
get_report(mission_id) | 構造化レポート(変更されたファイル、テスト済み、エラー、次のステップ)を読み取ります |
get_dashboard() | システム概要:実行中のエージェント、統計、最近のアクティビティ |
list_projects() | すべてのプロジェクトを一覧表示します |
list_missions(project_id, status?) | プロジェクト内のミッションを一覧表示します |
wait_for_missionに関する注意: これは会話を最大timeout_seconds(デフォルト 600)ブロックします。長時間実行されるミッションの場合は、代わりに 30~60 秒ごとにget_mission_statusをポーリングすることを推奨します。そうすることで、ユーザーは進捗状況の更新を確認できます。
ワークフロー:計画 → ディスパッチ → 監視 → レポート
- 計画:
plan_project(prompt="...")を呼び出す →project_idと、depends_onチェーンとauto_dispatch=trueを持つミッションのリストを返します。 - 計画の表示:ミッションのタイトル、種類、依存関係チェーンをユーザーに提示します。
- ディスパッチ:ルートミッション(
depends_onが空)に対してdispatch_mission(mission_id=<最初のミッションID>)を呼び出します。残りのミッションは、依存関係が完了すると自動的にディスパッチされます(plan_projectがauto_dispatch=trueを設定するため)。 - 監視:
get_mission_status(mission_id=...)またはget_dashboard()を呼び出して進捗を確認します。 - レポート:ミッション完了時に
get_report(mission_id=...)を呼び出します。ハイライトをユーザーと共有します。
並列実行
DevFleet はデフォルトで最大 3 つのエージェントを同時実行します(DEVFLEET_MAX_AGENTS で設定可能)。すべてのスロットが埋まっている場合、auto_dispatch=true のミッションはミッションウォッチャーでキューに入れられ、スロットが空き次第自動的にディスパッチされます。現在のスロット使用状況は get_dashboard() で確認してください。
例
完全自動:計画して起動
plan_project(prompt="...")→ ミッションと依存関係を持つ計画を表示します。- 最初のミッション(
depends_onが空のもの)をディスパッチします。 - 残りのミッションは、依存関係が解決されると自動的にディスパッチされます(
auto_dispatch=trueが設定されているため)。 - プロジェクト ID とミッション数を報告して、ユーザーが何が起動されたかを把握できるようにします。
- すべてのミッションが終了状態(
completed、failed、cancelled)に達するまで、get_mission_statusまたはget_dashboard()を定期的にポーリングします。 - 各終了ミッションに対して
get_report(mission_id=...)を実行し、成功を要約し、失敗についてはエラーと次のステップを明示します。
手動:ステップバイステップ制御
create_project(name="My Project")→project_idを返します。- 最初の(ルート)ミッションに対して
create_mission(project_id=project_id, title="...", prompt="...", auto_dispatch=true)→root_mission_idを取得します。 後続のタスクごとにcreate_mission(project_id=project_id, title="...", prompt="...", auto_dispatch=true, depends_on=["<root_mission_id>"])を実行します。 - 最初のミッションに対して
dispatch_mission(mission_id=...)を実行してチェーンを開始します。 - 完了時に
get_report(mission_id=...)を実行します。
レビュー付き逐次実行
create_project(name="...")→project_idを取得します。create_mission(project_id=project_id, title="Implement feature", prompt="...")→impl_mission_idを取得します。dispatch_mission(mission_id=impl_mission_id)を実行し、get_mission_statusで完了するまでポーリングします。get_report(mission_id=impl_mission_id)で結果をレビューします。create_mission(project_id=project_id, title="Review", prompt="...", depends_on=[impl_mission_id], auto_dispatch=true)— 依存関係が既に満たされているため、自動的に開始します。
ガイドライン
- ユーザーから「そのまま進めて」と言われた場合を除き、ディスパッチの前に必ず計画をユーザーに確認してください。
- ステータスを報告する際は、ミッションのタイトルと ID を含めてください。
- ミッションが失敗した場合、再試行する前にそのレポートを読んでください。
- 一括ディスパッチの前に、
get_dashboard()でエージェントスロットの空き状況を確認してください。 - ミッションの依存関係は DAG を形成します。循環依存関係を作成しないでください。
- 各エージェントは分離された Git ワークツリー内で実行され、完了時に自動マージされます。マージ競合が発生した場合、変更は手動解決のためにエージェントのワークツリーブランチに残ります。
- 手動でミッションを作成する場合、依存関係完了時に自動的にトリガーさせたい場合は、必ず
auto_dispatch=trueを設定してください。このフラグがない場合、ミッションはdraftステータスのままになります。