- src/model: 复杂度分级、16 状态状态机、实体类型 - src/store: better-sqlite3 接 schema,transition 受 canTransition 守卫, decide 审批闸(reject 必带改进意见),事件订阅广播,nextExecutable - src/api: Fastify REST + ws 事件广播(/ws) - src/daemon: maestrod 入口(env 配置,默认 ~/.maestro :4517) - test: 9 个生命周期单测全过;typecheck/build 干净;REST+WS 端到端实跑验证 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
7.5 KiB
Maestro — 多项目 TODO 管理与 Agent 执行系统 · 设计方案 v0.1
本地优先的 daemon:管理多个本地 git 项目的任务,按复杂度分级驱动审批闸,并用后台 agent(Claude Code)自动执行可执行任务。
Context(为什么做)
前身是 ~/.claude/skills/todo(JSON + HTML 单机原型):单项目、无真正后端、确认靠临时 http hack、无自动执行。它验证了「复杂度分级 + 确认闸 + 看板」的形态,但不可扩展。Maestro 把它升级为正式系统:多项目、任务层级化、复杂度驱动的审批闸、完整状态机、本地常驻 daemon、每项目一个后台执行 agent、与 Claude Code 深度集成(MCP + Agent SDK)。
0. 关键决策
| 维度 | 决策 |
|---|---|
| 运行时 | Node / TypeScript |
| 部署 | 本地优先 daemon(跑在用户机器,管理本地 git 项目) |
| Claude Code 集成 | MCP 服务(任务读写)+ Claude Agent SDK(headless 自动执行) |
| Easy 自动化边界 | 改动隔离到 git worktree/分支,不自动合并 |
1. 系统总览
maestrod(核心 daemon,常驻)
├─ 任务存储 SQLite ├─ 项目注册表
├─ REST + WebSocket API ├─ MCP server(给任意 Claude Code 会话)
├─ 编排器 Orchestrator └─ 每项目 worker 池(执行器)
│ │
Web 看板(多项目·实时·页面内 accept/reject) 执行 agent:Agent SDK 在 worktree 跑 headless Claude Code
闭环:建任务 →(Hard 分析拆解 / Medium 写方案 / Easy 写操作)→ 前置审批闸 → ready → 编排器领取 → worktree 起 headless CC 执行 → verify → 结果闸(审/合)→ done。
2. 复杂度分级
Hard / Medium / Easy ↔ 旧 tier 1/2/3。每个任务(含子任务)都带 complexity,决定它走哪条「产出 + 审批」路径。(见 src/model/complexity.ts)
3. 任务层级
parent_id + depth;默认 ≤3 层,极复杂 ≤4 层(创建第 5 层时拒绝)。子任务各自带 complexity。叶子任务才可执行;被拆解的 Hard 是容器,进度由子任务汇总。
4. 三条产出路径与审批闸
| 复杂度 | 产出(执行前) | 前置闸 | reject 规则 |
|---|---|---|---|
| Hard | 强制进 plan 分析 → 产出「分析 + 任务拆解(子任务,各带复杂度)」 | plan_review,accept 才进下一步 |
必须带改进意见 → 退回重做并附 feedback |
| Medium | 写「具体方案 = 改动内容 + 为什么这么做」 | spec_review,accept/reject |
同上(必带意见) |
| Easy | 写清「将执行的操作」记录在任务上 | 无前置闸,直接可执行 | — |
结果闸 exec_review(所有产生改动的执行后、合并前):改动在隔离分支,用户审/合;reject 必带意见 → 返工。承载「不自动合并」边界。
5. 状态机(见 src/model/status.ts)
init · analyzing · plan_review · decomposed · speccing · spec_review · ready · blocked · queued · executing · exec_review · failed · needs_attention · done · paused · cancelled
主要流转:
init→(Hard)analyzing→plan_review—accept→decomposed—子全 done→done;—reject(+意见)→analyzinginit→(Medium)speccing→spec_review—accept→ready;—reject(+意见)→speccinginit→(Easy,写完操作)→readyready—deps 满足→queued→executing→exec_review—accept(合并)→done;—reject(+意见)→ 返工executing→failed—自动重试 n 次→executing/needs_attention
合法流转表与守卫在 TRANSITIONS / canTransition()。
6. 数据模型(见 src/model/types.ts 与 src/store/schema.sql)
- Project:repo_path、default_branch、verify_cmd、autonomy、model、concurrency、status
- Task:project_id、parent_id、depth、complexity、status、deps[]、plan/spec/operations、result、assignee
- ApprovalRecord:gate(plan/spec/exec)、action、actor、reason(reject 必填)、at
- Run:kind(planner/executor)、worktree、branch、status、transcript_ref、claude_session_id
- Event(append-only):审计 + 实时看板推送源
7. 编排器与执行 agent
- daemon 内编排循环 + 每项目 worker 池(并发可配,默认 1–2)。
- 选「可执行任务」(叶子、
ready、deps 满足):Easy 自动入队;Medium/Hard 子任务在 spec accept 后入队。 - 执行 = Claude Agent SDK 起 headless Claude Code:
cwd=worktree,附 MCP、权限模式(worktree 内 acceptEdits)、任务 spec/operations 作指令、项目 CLAUDE.md 作上下文。 - 完成 → 跑
verify_cmd→exec_review(带分支 + diff 摘要);失败 →failed→ 重试 n 次 →needs_attention。 - Hard 拆解 / Medium 方案也可由 Agent SDK 起 planner run 自动产出 → 进前置闸:「自动产出,人工把关」。
8. Claude Code 集成
- MCP server(交互面):项目里的 Claude Code 配
.mcp.json接maestro-mcp。工具:list/get tasks、create、decompose、write_spec、write_operations、update_status、attach_result、request_approval、get_next_executable、get_pending_approvals。 - Agent SDK(自动面):编排器用 Claude Agent SDK 起 headless CC 跑可执行任务。
- approve/reject 是用户动作,走看板按钮。
-
以官方 Claude Agent SDK / MCP 当前能力为准,落地前用 PoC 校准具体 API 与包版本。
9. 后端架构与项目绑定
- 存储 SQLite(better-sqlite3,单文件零运维);run 转录日志存文件,Run 表引用。
- API:REST(CRUD)+ WebSocket/SSE(实时看板)。
- 项目绑定:
maestro project add <repo>记录 repo 路径/默认分支/verify/autonomy/model/并发;repo 内.maestro/config.json+ daemon 中央 DB 行。 - worktree:执行在 repo 的 git worktree(隔离分支),不自动合并。
10. Web 看板
多项目切换 / 全局总览;任务树(层级折叠)、复杂度徽章、状态、内联审批闸(accept/reject,reject 必填意见)、实时执行状态、exec_review 的 diff/分支链接。实时 WS。
11. 从现有 skill 迁移
旧 todo.mjs/JSON 作为 v0 原型被取代。importer:读旧 todo/todo.json,tier1/2/3 → hard/medium/easy,导入为一个项目。/todo 改用 MCP + 看板。
12. 分期实施
- Phase 1 核心(可控、无自动执行):daemon + SQLite + 项目注册 + 任务模型 + 状态机 + 看板 + MCP(读写 + 审批)。手动驱动。
- Phase 2 自动化:编排器 + Agent SDK 执行器(Easy 自动跑 worktree,结果闸)+ planner runs。
- Phase 3 打磨:并发/重试/通知/指标/可选远程看板。
13. 风险与未知
- Agent SDK headless 执行 + MCP 回写的可靠性(PoC 先验证)。
- 自动执行安全:worktree 隔离 + 不自动合并 + verify 把关 +
needs_attention人工兜底。 - 长任务上下文超限、并发资源、worktree 清理。
- Hard 自动拆解质量需人工把关(reject 带意见返工)。
14. 验证 / PoC
- 最小执行闭环:注册项目 → 建 Easy 任务 → 编排器在 worktree 起 headless CC 改一个文件 → verify → 看板出现
exec_review→ accept 合并。 - MCP 往返:交互 CC 会话里 list/create/update 跑通。
- 审批闸:Hard 自动拆解 →
plan_review→ 看板 reject(带意见) → 退回analyzing→ 重拆 → accept。