规约(Seed)
访谈的答案被整理成一个 YAML 文件,叫 Seed。运行时照着它写代码,评估也照着它判分。开跑之前先读一遍,确认它写的是你想要的东西。
1. 它是什么
Seed 是一个 YAML 文件,装着目标、约束、验收标准和数据结构。一次运行开始之后,这次运行里的 Seed 不会再变。
2. 生成
在 Claude Code 会话里,用上一章拿到的 session_id:
ooo seed <session_id>
预期结果:生成 Seed,存成 YAML 文件,默认落在 ~/.ouroboros/seeds/ 下面。装了 Codex CLI 或 OpenCode 插件(装插件)的话,同一条命令在那边的会话里一样能用。
3. 七个字段
Seed 的顶层字段就是下面这七个(core/seed.py):
| 字段 | 装什么 | 怎么检查 |
|---|---|---|
goal | 这次运行要产出什么 | 看它说的是「用户能做到什么」。像「做得好看点」这种没法判的说法要改掉。 |
constraints | 必须守住的限制 | 技术、环境、范围三类限制和你的回答对不对得上。 |
acceptance_criteria | 判断做完了的标准 | 每一条都要能在屏幕上看到、或者能被测试直接验。评估那一章就是拿这些来比对。 |
ontology_schema | 要处理的数据结构 | 字段名和类型跟功能对得上。 |
evaluation_principles | 评估时加权的原则 | 看重点放对了没有。 |
exit_conditions | 什么时候算结束 | 结束条件是不是可判定的。 |
metadata | 模糊度分数等元信息 | 上一章那个分数会记在这里。 |
4. 判分用的东西不进 worker 的契约块
当一条验收标准定义了自己的验证命令或期望输出时,那些值不会进执行 agent 拿到的契约块,也没有开关能把它放回去。原因很直接:断言一旦看得见,卡住的 agent 最省力的路就是去糊弄那个字符串,而不是把功能做出来。
两点要说清楚,免得你以为它比实际更严实:
- 这两个字段是可选的。没有定义验证命令和期望输出的验收标准是合法存在的,所以别把这条读成「每一条都被藏起来」。
- 契约块之外的脱敏是逐字的,只覆盖五种编码。换个形状的副本仍然会漏。这个缺口挂着公开 issue,没有藏着说已经解决。
另外,项目级的 lint 和 test 命令是故意给 agent 的。藏起来的是那条标准自己的答案,不是所有命令。
5. 进化的时候什么会变、什么不会
评估没过而进入演化循环时,验收标准不会被悄悄改松。代码里的做法是:只有散文描述会被重写,其余字段整份从父代继承过来(evolution/acceptance_contracts.py 的 evolve_acceptance_contracts)。新的标准可以往后追加,已有的不能删、也不能重排。
这条设计是为了堵一个具体的漏洞:让 agent 自己出考题,它迟早会把题目改容易。
6. 下一步
确认 Seed 没问题之后,就可以进入执行。逐章指南的执行、评估、演化目前在英文版和한국어版里,中文这几章在补。
这一页对着当前源码核过:七个字段来自 core/seed.py,存储路径来自 auto/adapters.py,继承规则来自 evolution/acceptance_contracts.py。有对不上的地方,欢迎到 GitHub Issues 说一声。
