★ 实现状态 ✅ 全部上线
+本方案各项已于 2026-06-25 实现、补测试并经 launchd daemon 端到端实跑验证;下表为「优化点 → 实现 → 提交」对照。线上实测捕获并修复了 3 个单测未覆盖的 bug(DB 迁移漏列 / fable-5 不可用未触发回退 / autoApproveExec 传错 id)。
+ +| 优化点 | +实现要点 | +状态 | +提交 | +
|---|---|---|---|
| Agent 记忆注入 L1–L4 | +L1 上次失败原因(重试任务)· L2 项目级 agent 规范(DB 列)· L3 拆解背景(父意图+兄弟状态)· L4 全局规范文件,注入 4 处 prompt 头部 | +✅ | +ecea1ae fe7923a 74be3ec |
| ① plan 自动放行 | +autoApprovePlan:全 easy 子任务 + ≤5 个时跳过 plan_review(项目级开关,默认关) | +✅ | +73f80d2 |
| ② approve 前硬闸 | +分项 lint/typecheck/build 闸 + diff 体量闸 + 复审并行(Promise.all) | +✅ | +2d12769 |
| ② exec 自动放行 | +autoApproveExec:双复审 approve 后跳过 exec_review 自动 --no-ff 合并;抽出共享合并流程 exec-merge.ts | +✅ | +1f318c2 4c09186 |
| 模型可配置(项目维度) | +projects.models(JSON,按角色×复杂度覆盖);默认统一 opus-4.8;优先级 models > 旧 project.model(仅 exec/planner)> env > 默认;回退链 opus→sonnet→fable | +✅ | +ff2d7c2 59ce391 |
| ② diff 声明外文件闸 | +tasks.scope_files(glob/路径);scopeFileGate 改动越界=硬闸;planner 拆解出 files 自动填充;executor prompt 注入范围约束 | +✅ | +59ce391 |
| 线上实测 bug 修复 | +ensureColumn 漏迁移补列 · isModelError 识别「issue with the selected model」触发回退 · autoApproveExec 传错 id | +✅ | +1bf3fec a9c5102 4c09186 |
注:③ 解冲突专用 conflict run / 模型固定档 等部分按方案落地,conflict 模型同样走「项目可配置 + 默认 opus-4.8」。fable-5 在本机不可用,已从内置默认移除,仅在项目级显式配置时使用。
+① 任务拆解类 (planner) ✅ 定稿
+Hard 任务拆解(decompose) · Medium 写方案(spec) · 只读主仓、不建 worktree
+ +| 维度 | +现状 | +优化决策 | +变更 | +
|---|---|---|---|
| 触发 / 执行期锁 | +Hard→analyzing / Medium→speccing;无写保护 | +
+ 执行期锁(通用规则):任务有在途 run 即锁只读;禁改 title/spec/complexity/deps,禁再调度;run 结束解锁。 + 覆盖 AUTO 占位回填竞态;store mutation 入口 + API 层加"在途即拒"校验。 + |
+ 新增 | +
| 调度并发 | +与 executor 共用 concurrency 池 | +维持共用池,不改并发模型 | +不变 | +
| 执行流程 | +纯只读 Read/Glob/Grep;maxTurns=60 固定 | +
+ ① 加 Bash(git log/*) Bash(git diff/*) Bash(git show/*)(读历史/演化)+ ② decompose prompt 注入 tasks.depth + 剩余可拆层数(≤3层),防无限拆 hard+ ③ maxTurns 按复杂度:hard=90 / medium=60 / easy=40 + |
+ 改进 | +
| 模型 / 档位 | +一律 claude-opus-4-8 |
+
+ 按复杂度分档:hard fable-5
+ medium opus-4-8
+ easy sonnet-4-6 + env MAESTRO_MODEL_PLAN_EASY/MEDIUM/HARD 三档可独立覆盖
+ |
+ 改进 | +
| 输出格式 | +spec=3段md;decompose=分析+fenced JSON{plan, subtasks:[{title,complexity}]} |
+
+ decompose 扩展为: + ① 正文先输出子任务 Markdown 表格(标题/复杂度/优先级/依赖序号)供人审 + ② 末尾 JSON 扩展: {plan, subtasks:[{title,complexity,priority,deps:[序号]}]}+ ③ 解析向后兼容(缺 deps/priority 给默认值);deps 序号→taskId 二次映射后写 tasks.deps+ spec 增加验收标准必填 + 可选影响文件清单 + |
+ 扩展 | +
| 是否审批 | +decompose→plan_review;spec→spec_review;均强制人审 | +
+ 默认仍人审;可选自动放行(默认关): + auto-approved + 拆解全 easy + 子任务数≤N → 跳过 plan_review 直接 ready+ 项目级开关 autoApprovePlan 控制;高风险,默认关 + |
+ 新增选项 | +
实现涉及文件
++ + +
② 执行类 (executor + verify + 双复审) ✅ 定稿
+执行 → verify → 双复审(code+security)→ exec_review 人审 → 合并
+ +当前 approve 前的检查链
+| # | 检查 | 当前性质 | 优化后 |
|---|---|---|---|
| 1 | executor 完成 + commit 含 task ID | 硬闸 | 不变 |
| 2 | verify(project.verifyCmd,10min,未配=通过) | 硬闸(可选) | 不变 |
| 3 新 | 执行前 sync main + 分歧度量 | 无 | 新增:merge main 进 worktree;冲突/改动面过大→重评估/needs_attention |
| 4 新 | 分项 lint/typecheck/build 闸 | 无 | project 可配 checks;分项报告;任一非0=硬失败 |
| 5 新 | diff 越界/体量闸 | 无 | 改了声明外文件 / diff 行数超阈值 → 拦截或告警 |
| 6 | code review(maxTurns40,15min) | 仅建议 | reject → 硬闸:退回重执行(带复审意见)而非进 exec_review |
| 7 | security review(与 code 串行) | 仅建议 | reject → 硬闸;改并行跑(Promise.all,总耗≤15min) |
| → | exec_review 人审 | 强制 | 补完硬闸后:auto-approved+全绿+双approve → 自动合并(默认关) |
| merge | git merge --no-ff(approve后) | 硬闸 | 不变(冲突→③解冲突) |
| 维度 | 现状 | 优化决策 | 变更 |
|---|---|---|---|
| 触发 | +ready/queued → claimOne runKind=executor | +同上 + 执行前 sync main(通用规则13) | +改进 | +
| 调度并发 | +共用 concurrency 池;复审在 worker 内串行,不占名额 | +维持不变 | +不变 | +
| 执行流程 | +建 worktree → executing → verifying → diff → reviewing(串行) → exec_review | +
+ ① 新增 sync main 步骤(verify 前) + ② 新增 分项检查 + diff 越界闸(verify 后) + ③ code+security 双复审改 Promise.all 并行 + ④ reject 变硬闸(不进 exec_review,退回/needs_attention) + |
+ 改进 | +
| 模型 / 档位 | +reviewer easy=sonnet/medium=opus/hard=opus;code+security 共用档;project.model 覆盖全角色 | +
+ 复审统一 fable-5(三档全升) + 复审不被 project.model 降档(保自审独立性) + |
+ 升档 | +
| 输出格式 | +verdict 二元 approve/reject;均为建议 | +verdict 仍二元;但 reject 变硬闸(ingest 分流,不再无条件进 exec_review) | +硬化 | +
| 是否审批 | +双复审后一律 exec_review 强制人审 | +
+ 分阶段:先补完三项硬闸,再开自动合并 + 条件:auto-approved + verify全过 + 分项检查全过 + diff合规 + 双approve → 跳过 exec_review 自动合并(默认关) + |
+ 新增选项 | +
实现涉及文件
++ + +
③ 解冲突类 (conflict agent) 🆕 新实现
+当前仅检测冲突+abort,无专用 agent;本轮新建完整解冲突流程
+ +现状硬伤
+-
+
- executor 白名单没有 git merge——补救任务被要求 git merge 却跑不了,CC 只能 Read/Edit 硬模拟,极易丢改动 +
- 解冲突标 easy→sonnet,最弱档,认知难度远超单文件改动 +
- 补救 worktree 从 defaultBranch 新建分支,operations 文字写"已从 targetBranch 检出",文案与实际不符 +
| 维度 | 现状 | 优化决策 | 变更 |
|---|---|---|---|
| 触发 / 调度 | +合并冲突→建 P0 easy 补救任务;按 score 排队等领取 | +
+ 触发不变(自动建补救任务,幂等) + 调度改为优先抢占:conflict run 插队,先于普通 executor 领取 + |
+ 改进 | +
| 执行流程 | +复用 executor pipeline;CC 靠 Read/Edit 猜着解冲突;无专用模板 | +
+ 专用 conflict pipeline: + 1. worker 在补救 worktree 内真正发起 git merge <branch> 制造冲突态+ 2. CC 以只读+Edit 逐个解冲突文件(白名单加 Bash(git merge:*))+ 3. CC commit 沿用合并 commit message + 4. 走双复审(同②) + 5. exec_review 通过后自动收口原任务 + |
+ 新建 | +
| 模型 / 档位 | +easy → sonnet(最弱) | +固定 fable-5(不随原任务复杂度,恒最强) | +大幅升档 | +
| 输出格式 | +无专用;executor 自述 | +
+ 专用解冲突自述模板: + 解了哪些文件 / 各文件取舍策略 / 保留了双方哪些意图 / 测试结果 + |
+ 新增 | +
| 是否审批 | +走 exec_review + 合并成功自动收口原任务 | +保持;可选纳入②的自动放行条件 | +不变 | +
实现涉及文件
++ + +
④ 任务通用规则(13条,全部采纳)
+跨三类的横切规则;蓝色=本轮新引入;灰色=已有不变量明文固化
+ +-
+
-
+ 1++ 新增 + 执行期锁:任务有在途 run(planner/executor/reviewer/conflict)即锁只读——禁改 title/spec/complexity/deps 等任何字段,禁再调度;run 结束(finishRun/failAttempt/reap)解锁。 ++实现:store mutation 入口 + API 层加"在途即拒"校验;orchestrator.claimable 已天然排除,保持+
+
-
+ 2++ 固化 + worktree 隔离:写类 run(executor/conflict)在独立 worktree 内,禁碰 worktree 外文件;planner/reviewer 只读,不建 worktree。 ++
+
-
+ 3++ 固化 + 不 push / 不部署:任何 run 都不得+
git push/ 对外发布 / 部署;解冲突的 merge 是受控本地合并,不 push。 +
+ -
+ 4++ 固化 + commit 含 task ID:所有产出 commit message 必带任务 ID;+
ensureCommitted兜底。 +
+ -
+ 5++ 改进 + 模型回退链:模型不可用 →+
fable-5 → opus-4-8 → sonnet-4-6回退(fable 置链首),单 run 内只重试一次。 +实现:+models.tsMODEL_FALLBACK_CHAIN改为['claude-fable-5','claude-opus-4-8','claude-sonnet-4-6']
+ -
+ 6++ 固化 + 重试退避 + 上限升级:失败按退避(backoff,间隔递增)自动重试;超+
max_retries(项目配,默认2)→ 转needs_attention(需人工介入)。 +needs_attention = 任务卡住不再自动重试,等人改/requeue/取消。触发:①失败超重试上限 ②合并冲突 ③歧义+
+ -
+ 7++ 新增 + 自动放行默认关:所有"跳过人审自动放行"(plan/exec)默认关闭,须项目级开关 ++
auto-approvedautonomy 才生效。 +
+ -
+ 8++ 固化 + 审批 reject 必带意见:plan/spec/exec 的 reject 必须带 reason,按状态机回流。 ++plan_review→analyzing · spec_review→speccing · exec_review→ready+
+
-
+ 9++ 强化 + 复审独立性:复审只读、与执行分离、用最强模型(fable-5);复审不被 project.model 降档;任一 verdict=reject 变硬闸(退回重执行,不进 exec_review)。 ++
+
-
+ 10++ 固化 + daemon 唯一 DB 写者 / worker 不碰 DB:进程模型铁律;状态变更只经+
transition()守卫(canTransition)。 +
+ -
+ 11++ 新增 + 统一输出锚点:每类 run 固定输出模板——planner=表格+JSON · executor=自述 · reviewer=模板+VERDICT · conflict=解冲突自述,便于机器解析 + 人审。 ++
+
-
+ 12++ 固化 + 超时分层:planner/executor 30min · verify 10min · 复审15min(并行) · conflict 按强档给足;均可项目级配置。 ++
+
-
+ 13++ 新增 + 执行前同步 main + 分歧重评估:任务正式执行前,先把 defaultBranch 最新代码 merge 进 worktree;若改动过大 / 耦合过深 / 存在逻辑冲突,则触发方案重评估(回 planner 重写 spec / 重拆,或转 needs_attention)而非盲目继续。 ++与③协同:执行前同步冲突=早发现;执行后合并冲突=③兜底+
+
+ + +
⑤ 任务状态机流转图
+据 src/model/status.ts TRANSITIONS 真实表绘制;paused/cancelled 通用终态图中略去
主干流转(按复杂度)
+ +Hard 任务
+Medium 任务
+Easy 任务
+执行主链(所有复杂度共用,从 ready 开始)
+失败 / 重评估链
+合并冲突链(③)
+完整 Mermaid 图
++ + +
⑥ 数据库结构(单一 SQLite · ~/.maestro/)
+ WAL 模式,外键开。三类任务是 tasks 表上按 complexity+status+run.kind 区分的行为,不是独立表。schema 见 src/store/schema.sql
+ +
实现顺序
+每类先 typecheck + build + test 验证,通过后再进下一类
+