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 + 任務有向無環圖
↓
向用戶展示計劃 → 取得批准
↓
dispatch_mission(M1) → 代理 1 在工作樹中啟動
↓
M1 完成 → 自動合併 → 自動分派 M2(依賴於 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 和任務數量,讓用戶知道啟動了什麼。
- 定期輪詢
get_mission_status或get_dashboard(),直到所有任務達到終止狀態(completed、failed或cancelled)。 - 對每個終止狀態的任務執行
get_report(mission_id=...)— 總結成功之處,並指出失敗及其錯誤和後續步驟。
手動:逐步控制
create_project(name="我的專案")→ 回傳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="實作功能", 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="審查", prompt="...", depends_on=[impl_mission_id], auto_dispatch=true)— 由於依賴項已滿足,會自動啟動。
指導原則
- 在分派之前,務必先向用戶確認計劃,除非他們表示可以直接執行。
- 報告狀態時,請包含任務標題和 ID。
- 如果任務失敗,請在重試之前先讀取其報告。
- 在大量分派之前,檢查
get_dashboard()以了解代理槽位可用情況。 - 任務依賴關係形成一個有向無環圖 — 不要建立循環依賴。
- 每個代理在隔離的 git 工作樹中執行,並在完成時自動合併。如果發生合併衝突,變更會保留在代理的工作樹分支上,等待手動解決。
- 手動建立任務時,如果希望它們在依賴項完成時自動觸發,請務必設定
auto_dispatch=true。如果沒有此標誌,任務將保持draft狀態。