核心理念
1. 原生规范继续说了算
需求、设计、任务和质量门属于 OpenSpec / Spec Kit。Spec Autonomous 的 plan 是执行细分,不是另一份产品需求。
2. CLI 永远不创建 Agent
CLI 可以运行 Git、原生 provider、测试和明确配置的 hook,因为这些是确定性操作。但它没有 Codex / Claude SDK,也没有模型选择器。
需要理解、设计、编码或审查时,CLI 返回工作包。宿主创建 fresh-context Agent,完成后返回结构化结果。
这样做的好处:
- 复用宿主已有的认证、模型和工具;
- 不把 CLI 绑死在某一家 Agent;
- 宿主能真正控制会话创建和取消;
- CLI 可以在没有模型的环境中测试全部状态机。
3. 声明和观察分开
“Agent 说完成了”是一项声明。实际 diff、测试 exit code、Git revision、原生任务状态是观察。
系统只有把声明与观察对上,才接受结果。
4. 完成不是一个布尔值
至少要区分:
- 进程退出;
- 原生任务 checkbox 完成;
- 任务验证通过;
- 阶段验收通过;
- 代码已集成;
- 指定范围完成;
- 整个里程碑完成;
- 已归档。
把这些压成一个 done=true,恢复和审计一定会出问题。
5. Fresh context 必须是协议,不是口号
每个工作请求要求唯一 session_id 和 fresh_context:true。宿主负责兑现真实的新会话;CLI 负责防止同一会话跨请求复用。
Worker 只收到当前任务、相关规范、依赖摘要、写入边界和验证要求,不继承完整协调历史。
6. 未知写集默认串行
“开了多个进程”不代表文件安全。只有依赖满足且读写集合不冲突的任务才会一起执行。
锁文件、公共 schema、共享入口和无法判断范围的改动优先串行。并行是经过证明的优化,不是默认冒险。
7. 验证绑定源码版本
测试通过必须回答“对哪个 commit 通过”。代码变了,旧证据不能继续证明新代码。
因此每次验证记录 argv、cwd、exit code、日志和被测 revision。验证过程如果修改源码树,也会被拒绝。
8. 恢复先核对,再重试
崩溃点可能位于:
- 回执已写文件但账本未更新;
- 原生 checkbox 已改但 Git 尚未推进;
- Git 已推进但 accepted 状态尚未保存;
- hook 已执行但结果没来得及确认。
恢复必须读取持久化意图与真实 Git 状态,完成缺失的一半或要求人工确认。盲目重跑会重复副作用。
9. 所有危险动作先预览
归档、清理、repair 等操作先返回绑定 source / head / config 的 plan_hash。应用时任何关键输入变化都会拒绝旧计划。
10. 不夸大兼容性
有代码路径、有 CI 配置和在真实平台验证过是三件不同的事。项目只声明实际通过的 provider 版本、平台和安装方式。