架构
架构
工作的流向是:你 → ooo 命令 → Core → 运行时。记录落到 EventStore 和 Ledger。
1. 六块分别干什么
| 组成 | 职责 |
|---|---|
| 你 | 给想法、答问题、确认 Seed 和结果 |
ooo 命令 | Claude Code 会话里的功能入口,比如 ooo interview、ooo run |
| Core | 跑访谈、生成 Seed、管执行顺序、调用评估。通过 MCP 和运行时说话 |
| Seed | YAML 工作规约,装目标、约束、验收标准、数据结构。一次运行期间不变 |
| 运行时 | 真正动文件和代码的 AI 编码工具。Claude Code 是默认,还支持 Codex CLI、OpenCode 等 |
| EventStore | 存每一个执行事件的本地 SQLite 数据库,断掉的会话靠它恢复 |
| Ledger | 提问和写 Seed 过程中确认下来的假设、排除项和判断依据 |
| 评估器 | 对着 Seed 的验收标准验证结果 |
最后一行按实情说:评估分 Mechanical / Semantic / Consensus 三层,但三层齐跑只在直接评估这条路径上成立,演化循环里只跑 Semantic 一层。细节在评估那一章。
2. 数据怎么流
- 你用
ooo命令递进去一个想法。 - Core 在访谈里问掉没做的决定,把答案变成 Seed。
- Core 把 Seed 交给运行时,运行时写代码。
- 评估器拿结果对着 Seed 的验收标准比对。
- 每一步的事件进 EventStore,判断依据进 Ledger。
3. 为什么记录要单独存一层
EventStore 用的是本地 SQLite(源码里强制要求 sqlite+aiosqlite:// 这类 URL)。这一层不是「顺手记个日志」,它撑起两件事:
- 断了能接上。窗口关了、机器重启了,会话还在,因为状态是从事件重建出来的,不是攒在内存里。
- 说过的话可以被查。agent 声称做了什么,和事件里实际记了什么,是两份可以互相对照的东西。没有这一层,「它说做完了」就只能靠信。
Ledger 存的是另一类东西:不是发生了什么,而是当初为什么这么定——哪些假设被确认、哪些范围被排除。这两份记录合起来,才能在几代之后回头问「这个决定是谁在什么依据下做的」。
4. Core 和运行时之间:MCP
Core 不直接改文件,运行时不管流程。中间的协议是 MCP(Model Context Protocol)——运行时通过它调用 Core 的功能。这也是为什么安装那一章里 ooo setup 要注册一次 MCP 服务,以及 -32000 那个启动失败发生在这一层。
这一页对着当前源码核过:EventStore 强制 SQLite 后端在 persistence/backend_contract.py;Ledger 在 core/seed.py 等处;评估三层的路径差异在 config/models.py 与 mcp/server/adapter.py。第 1 节最后一行的那句限定,英文版和韩文版目前没写。有对不上的地方,欢迎到 GitHub Issues 说一声。
