怎样让 Codex 连续开发几天?
HoH 固定模型与底层 coding harness,在外面增加 Planner、Developer、QA Tester 和跨轮 evidence state,把长期开发变成一系列版本化、可核验的候选。

代码会留下,关于代码的可靠认识却会不断过期
几小时后,Agent 会同时面对持续增长的历史,以及互相脱节的 artifact、需求、回归风险和测试结论。

HoH 不改 Codex,也不训练模型;它改的是外层开发协议
HoH 把验证证据绑定到候选版本,跨轮状态不再只是对话摘要
| 路线 | 优化或保存什么 | 验证从哪里来 | 与 HoH 的关键差异 |
|---|---|---|---|
| Long context / memory | 对话、摘要、外部 memory | 通常仍由同一 Agent 自判 | 记住过去,不等于知道哪条事实已在当前候选上通过 |
| MetaGPT / ChatDev | 角色文档与消息流程 | 角色间 review | HoH 固定 read/write boundary、冻结候选和 evidence schema |
| AgileCoder / EvoDev / EvoMAC | sprint、feature dependency、test feedback | 迭代计划与测试 | HoH 将 artifact state 与 QA evidence 分成两条持久通道 |
| Meta-Harness / AHE | prompt、tool、middleware、harness code | 跨任务 benchmark | 它们改底层 harness;HoH 固定底层 harness,持续改项目 |
| LongHorizon-Harness | 单任务 task state 与 audit report | 只读 Auditor | 更通用;HoH 专门面向版本化软件与独立 QA |
| Harness-of-Harness | 项目 artifact + candidate-bound evidence | 隔离 QA + 最终 benchmark verifier | 同一 harness/model 被固定角色反复调用 |
一轮包含一次受控的状态提交

代码和证据必须分开保存,又必须绑定到同一个候选
Artifact state
- 真实代码、资源、配置与项目元数据
- 由 Developer 从
At−1warm-start - 冻结后复制到隔离 QA workspace
- candidate identity 防止测试结论串到另一个版本
Evidence state
- verified records:已有证据支持的行为
- gap records:尚未满足或出现回归的行为
- 截图、replay、日志、runtime trace、公开测试
- 下一轮 Planner 只能把它当作有来源的观察,而不是永久真理
三个角色的分工由权限边界保证
Project Planner
- 读取 PRD 与上一轮 evidence
- 只读检查项目结构
- 选择 bounded but locally complete increment
- 输出 development document
Dt - 不能修改生产 artifact
Developer
- 从旧 artifact warm-start
- 读取 PRD 与本轮 development document
- 建立 baseline,实施修改并自测
- 保留已验证行为
- 唯一拥有 read-write workspace
QA Tester
- 读取冻结候选的隔离副本
- 黑盒运行与白盒检查交叉验证
- 输出 verified / gap records
- 不能修代码,也看不到外部 hidden score
- 只报告证据,不替 Developer 补丁
Planner 选边界,Developer 写候选,QA 只对冻结版本出证据
选增量
用 PRD 与旧 evidence 选择本轮最值得做的一条完整用户路径。
列保护项
写明哪些已验证行为不能回归,以及如何重查。
改 artifact
Developer 在现有项目上实现;不是从空仓库重复生成。
建立 baseline
修改前后都运行公开检查,记录失败和修复。
冻结候选
复制到隔离 QA 区,生成与候选绑定的 identity。
更新 evidence
QA 只观察、复现和判定;verified / gap 进入下一轮。
Planner 和 Tester 的只读边界会在初始化时被验证
class WorkspaceAccess(str, Enum): READ_ONLY = "read-only" READ_WRITE = "read-write" @dataclass(frozen=True) class RoleBinding: role: RoleName workspace_access: WorkspaceAccess godot_mcp: GodotMCPAccess def __post_init__(self): if self.role is not RoleName.DEVELOPER: if self.workspace_access is not READ_ONLY: raise ValueError(...)
每条 claim 都带 candidate、scope、observation 和 limitation
{
"candidate_id": "loop-70-...",
"final_status": "FAIL",
"verified_records": [
{
"claim": "clean boot works",
"method": "runtime replay",
"evidence": ["log", "screenshot"]
}
],
"gap_records": [
{
"claim": "encounter reaches combat",
"observed": "idle / walk only",
"impact": "golden path blocked"
}
]
}内部 QA 能帮助下一轮;外部 hidden verifier 只能在结束后结算
生成 Et
- 输入:PRD、本轮 development document、冻结候选
- 可用:运行、replay、截图、日志、runtime trace、公开测试
- 输出:verified records、gap records、最终 PASS/FAIL
- 结果会进入下一轮 Planner
生成论文分数
- GameCraft:binary gate + 四个 rubric dimension
- FrontierSWE:官方 task verifier reward
- ProgramBench:hidden behavioral tests
- 隐藏测试、分数和 rationale 不进入 HoH 循环
先看提交经过什么 judge,再看表格里的数字
GameCraft-Bench
15 个 game family 各采 3 题。运行失败时 binary gate B=0,Overall 直接归零;可运行后再按四个 rubric dimension 加权。
FrontierSWE
4 Implementation、9 Performance、2 Research。排除 Tinker API 登录不可用的 frogsgame-rl,以及 driver 版本不足的 modular-stack-wan21。
ProgramBench
Agent 根据 executable 与文档重建程序。每题得到 hidden behavioral tests 的通过比例,再对任务做 macro average。
三种 harness/model 的总体指标都提高,但不能当成生成方差估计
| Harness + model | GameCraft Overall | FrontierSWE mean reward | ProgramBench Avg. Test Pass Rate |
|---|---|---|---|
| Codex + GPT-5.5 high | 49.58 → 71.52 | 0.31 → 0.54 | 60.41 → 66.50 |
| OpenCode + DeepSeek-V4-Pro | 26.90 → 48.98 | 0.23 → 0.31 | 45.27 → 57.56 |
| Pi + MiniMax-M3 | 42.16 → 58.78 | 0.26 → 0.55 | 35.83 → 52.68 |
提升不只来自“项目终于能启动”,内容深度和呈现也一起变化

三轮 HoH 更常把核心交互、UI 和场景细节同时补齐

Repeated Vanilla 也会进步,但 HoH 每轮更有效地使用新增 token

| Protocol | Pass 1 | Pass 2 | Pass 3 | Tokens@3 |
|---|---|---|---|---|
| Vanilla / Continue | 49.58 | 54.99 | 58.24 | 6.33M |
| HoH | 59.71 | 64.84 | 71.52 | 8.41M |
三条跨轮通道都重要;丢掉 artifact 最贵

Dominance 上升与长期零分可以同时存在


总体平均上涨,不代表每个任务、每个阶段都变好

Developer 完成了代码任务,不代表用户路径已经被验证
Planner 要修什么?
关闭 4 个 combat_readability issue,同时保留:
- clean boot
- A / B / C 三档 roster:3 / 5 / 10
- mouse-look、武器组件与终局逻辑
选择 combat readability 作为 bounded increment,并把现有玩法列为 preservation constraints。
Developer receipt 标为 PASS;3 tasks,修改 6 个 paths。
clean boot 通过;rifle 不再错误绑定 Pistol_* 组件。
这些改动还没有证明 encounter 能完整进入 aim / fire / reload / hit / death。
QA 运行的是完整路径:局部修复通过,golden path 仍被阻断

最值得复用的是 candidate-bound evidence;最需要补的是重复实验与 QA 校准





