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 二进制文件(参见 SECURITY.md 中关于 localhost MCP 服务器的内容)。
工作原理
用户 → "构建一个带认证和测试的 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)。对于长时间运行的任务,建议改用get_mission_status每 30–60 秒轮询一次,以便用户能看到进度更新。
工作流:规划 → 派发 → 监控 → 报告
- 规划:调用
plan_project(prompt="...")→ 返回project_id以及带有depends_on链和auto_dispatch=true的任务列表。 - 展示计划:向用户展示任务标题、类型和依赖链。
- 派发:对根任务(空
depends_on)调用dispatch_mission(mission_id=<first_mission_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="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="实现功能", 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()以了解智能体槽位可用情况。 - 任务依赖形成 DAG —— 不要创建循环依赖。
- 每个智能体在隔离的 git 工作树中运行,并在完成时自动合并。如果发生合并冲突,更改会保留在智能体的工作树分支上,需要手动解决。
- 手动创建任务时,如果希望它们在依赖完成时自动触发,务必设置
auto_dispatch=true。未设置此标志时,任务将保持在draft状态。