普通 agent loop 的缺陷
一个典型的 agent loop 是模型主导的:- 自述完成幻觉:模型说”我做完了”,但实际没测、没改、甚至没碰代码。
- 上下文失忆:长任务被压缩或中断后,模型靠猜恢复进度,丢失”做到哪了”。
- 无限打转:同一个验证失败反复出现,模型不断”改”但语义上没进展。
机制一:验收缺口回灌
普通 loop 失败时,模型用自由文本描述”哪里有问题”,下一轮自己回忆。Native 不允许这样——Verify 失败时,Runtime 从已校验的验收矩阵里派生出结构化的缺口:- 哪些验收项 failed(跑过但没通过);
- 哪些验收项 missing(还没提供证据);
- 哪些 required check 失败了。
机制二:语义进展判定
这是防止”无限打转”的关键。普通 loop 里,模型改了文件就算”有进展”,于是可以一直改下去。Native 的标准更严: 只有以下情况才算语义进展:- failed 的验收项减少了;
- 失败的检查转绿了;
- 缺失的证据补上、恢复有效了。
- 改了文件、重写了实现,但失败的验收集合没变;
- 改了 implementation scope,但缺口还在;
- 重写了说明文字,但检查还是红的。
机制三:失败签名与三段式停止
Runtime 给每个失败算一个签名:由当前契约 hash + 排序去重的失败验收项 + 失败检查项组成。同一个签名反复出现,触发递进的停止:
第 3 次停下时,允许模型用一次 override 换个思路再试——但必须带一个具体的新假设,且同一个签名不能重复 override。这是给强模型”换个角度”的空间,又不让它无限重试。
机制四:总失败预算
除了按签名的停滞检测,每个契约还有一个总预算:默认同一份需求最多 5 次 Verify 失败(可用native.max_verify_failures 调)。
预算用完,Runtime 停下交还用户,一次说清当前证据和三个方向:
- 放宽上限;
- 修改已确认的需求;
- 停下。
机制五:恢复依赖仓库状态
整个 loop 的状态不在对话里,而在磁盘上:- 验收条件和缺口 →
comet-state.yaml、acceptance matrix; - 阶段内进度 → checkpoint;
- 验证证据 →
verification.md、receipt; - 实现范围 → implementation scope(内容哈希)。

