Ouroboros
访谈

访谈

你的想法里有一堆还没做的决定。访谈把它们找出来,一条一条问你,然后把答案攒成下一步生成规约的原料。一句话的输入就够开始。

1. 它到底在干什么

「做个待办事项应用」这句话没有决定数据存哪、勾选之后怎么处理。这类决定会实打实改变结果。访谈负责把它们挑出来问清楚。

2. 开始

在 Claude Code 会话里跑:

ooo interview "一个能记下今天的待办、勾掉已完成的简单网页应用"

预期结果:出现第一个问题。问题的数量和顺序取决于你的想法本身。想先空跑一遍熟悉流程,可以先跑 ooo tutorial。装的是 Codex CLI 或 OpenCode 插件(见装插件)也一样,同一条命令直接能用;只用命令行、不装 Claude Code 的 standalone 路径命令不同,是 ouroboros init start,见第 4 章

3. 怎么答

每个问题钉住一个决定。拿上面的例子来说:

问题主题示例回答钉住的决定
数据持久化「刷新之后还得在」存储方式
完成状态「别删掉,划一道线就行」已完成怎么呈现
使用范围「就我一个人用」排除账号和同步

用大白话答就行。真不知道的时候,直接说不知道、让它给个建议,比含糊地答一句强。

4. 模糊度分数

模糊度把「需求里还剩多少没说清」表达成 0 到 1 之间的一个值。目标的清晰度(权重 40%)、约束(30%)、成功标准(30%)加权平均,分数是 1 减去这个平均值。越接近 0 越清楚。阈值是 0.2

5. 什么时候可以往下走

分数高于 0.2 会挡住规约生成。绕过它的办法只有一个:显式传入 force——CLI 会把这个选项和继续、取消并排摆在屏幕上。这道门槛是一个可以被反驳的默认值,不是锁。

这里我先写错过一次,把经过留在这儿。我在 mcp/tools/authoring_handlers.py:1385 看到插件分发路径会在访谈被标记为完成时跳过它自己的预检查,就写成「绕过的路有两条」。那是错的:真正的闸在 bigbang/seed_generator.py:1762-1780if force / elif not is_ready_for_seed → ValidationError),那里没有 is_complete 分支,而 :1573force 原样传下去。我找到第一道闸就停了,没问下面还有没有第二道。

还有一点:分数低不代表内容对。它衡量的是你把它的问题答得多完整,不是答案本身是否为真。一个自信地答错的人也能拿到好分数。所以生成规约之前,把数字和摘要一起看一遍。

6. session_id

访谈结束时,输出里会留下一个 session_id。把它复制下来,下一章生成规约要用它作为输入。

7. 从提问到执行一条命令跑完 — auto

想把提问、生成规约、执行交给一条命令:

ooo auto "一个能记下今天的待办、勾掉已完成的简单网页应用"

预期结果:提问轮次自动进行,然后进入规约生成和执行。中途停下来的话,输出里会有一个 auto_session_id,用它可以接着跑。

它不会拿一份没准备好的规约去执行。auto 模式有一道确定性的 A 级闸:只有等级判定为 A 且没有 blocker 时才放行(auto/grading.py 里是 may_run = grade == SeedGrade.A and not blockers;被挡下来时 auto/pipeline.py 会以 grade_gate 的名义标记 blocked)。等级分 A / B / C 三档。

这一页是对着当前的 README 和源码逐条核过的,不是从英文版直译的。和英文版有两处不一样,都写在这里:一是英文版把 0.2 说成「降到这个值以下才能生成规约」,读起来像必要条件,但准确的说法是「高于阈值会被挡住,显式 force 可以通过」(见第 5 节);二是英文版说 auto「只有规约拿到 A 级之后才开始执行」——这句话是对的,我一开始判断错了:我只翻了 auto/interview_driver.py,没找到就写了「源码里没有这个门槛」。真正的实现在 auto/grading.pymay_run = grade == SeedGrade.A and not blockers)。现在第 7 节按实际情况补上了。把这段留在这里,是因为「在哪里没找到」和「不存在」是两回事,而我刚好踩了这个坑。有对不上的地方,欢迎到 GitHub Issues 说一声。