把已核验进度单独保存,再分轮执行长任务
任务管理者 Manager 写本轮目标和验收要求;Executor 在新会话执行;Auditor 独立检查环境。三者构成外层运行系统(harness),不更新模型。
失败往往发生在步骤之间,而不是某一步做不会
早期错误变成后续前提
Agent 把一次误判写进计划,后面的动作都围绕错误状态继续推进。
历史越长,关键状态越难取回
工具输出、截图和试错淹没当前目标;上下文长度增长不等于状态更清楚。
执行者也负责宣布完成
文件“看起来存在”、界面“看起来正确”,都可能被当作已经满足任务。
LongHorizon-Harness 不改模型,也不改 Claude Code/Codex 的内部循环
| 路线 | 主要改什么 | 何时发生 | 核心证据 |
|---|---|---|---|
| Harness-Zero | 把专用程序示范的操作蒸馏进模型 | 训练阶段 | 执行成功的示范及模型自己尝试的结果 |
| Agentic Harness Engineering | 自动修改提示、工具、中间处理逻辑和记忆 | 跨任务演化 | 真实执行记录与逐题成败变化 |
| LongHorizon-Harness | 外置任务状态,分轮调用现有执行程序 | 单次任务运行时 | 环境中的独立只读审计 |
| 普通 Claude Code / Codex | 在一个会话中规划、执行、压缩上下文 | 单次任务运行时 | 自身工具结果与自我判断 |
先看提升,再确认哪些比较条件相同

assets/harness_perf.png,MIT License。WeaveBench 的 51.8→80.7 和 Terminal-Bench 的 69.7→77.2 是同 Qwen 3.7-Plus、同 Claude Code backend 的直接对比;OSWorld 主表把 single-action baseline 与 hybrid GUI+CLI 放在一起。一轮只允许一个主要状态变化

assets/mea_main.png,MIT License。图中的 report 是跨轮证据;当前源码还增加了 contract audit,最终完成需要 complete、clean、aligned 同时成立。Manager 维护当前进度,以及每轮的验收要求
- Requirement:原任务中的目标或限制。
- Artifact:执行中创建或修改的输出。
- Fact:后续轮次需要依赖的环境事实。
- 每条事实引用
round_003一类审计轮次。
这一轮要改变的一个主要环境状态。
哪些可观察条件同时成立才算完成。
不能碰哪些对象,允许用什么流程。
已满足与未满足的前置条件,以及执行方式的选择理由。
只附上本轮验收要求(contract)明确引用的核验报告。
结果必须写入用户或下游真正使用的位置。
Executor 的“我做完了”只能触发审计,不能直接改 task state
读取进度
Manager 看到原任务、当前进度和历史核验报告。论文设计不让它访问环境。
选一件事
写目标、验收条件、不能改的对象和相关证据引用。
新会话
Claude Code 或 Codex 只收到本轮信息,并可修改环境。
自述结果
输出做了什么、产物在哪里、遇到什么问题。此时仍未验证。
只读重查
从环境核验文件、应用状态、日志、截图与已保存结果。
更新进度
Manager 采用核验支持的事实,保留缺项和尚未可信的结论。
下一轮
继续执行、询问用户、报告受阻,或结束。
Next: done 必须跨过三个独立条件
当前源码解析前三行
分别判断是否完成、核验是否违规、验收要求是否忠于原任务。正文再列证据、缺项、阻断条件和进度更新建议。
源码明确拒绝哪些结束请求
- Claude Code 适配器比较工作区前后快照;发现写入就标为违规。
- 仍有阻断项时,
complete会被改成incomplete。 - Manager 请求结束,最近报告必须同时是 complete、clean、aligned。
clean:未发现核验违规
aligned:验收要求与原任务一致
缺一项 → 拒绝结束,送回缺项
上下文不继承旧聊天,任务文件仍保留
--print --output-format stream-json,关闭自动记忆和提示历史;按角色禁用部分工具。codex exec --json,从标准输入读取本轮提示;可配置模型、思考档位与 MCP 工具连接。设计边界不等于硬沙箱
三套 benchmark 使用三种不同的最终评分路径
WeaveBench
Opus 4.7 读取任务、产物和完整 chat.jsonl,逐项核对要求,再给 8 个维度打分。
OSWorld 2.0
官方 env.evaluate() 给每题得分。Binary 只认分数 = 1;Partial 为 108 题平均分。
Terminal-Bench 2.1
Harbor + Docker 保留 CPU、内存和环境限制。267 条记录中,测试全部通过才得 1。
识别出 GUI 卡住还不够,必须把失败转成下一轮可执行状态
任务与最终 judge
WeaveBench 官方任务要求用浏览器图表、JSON 和抓包交叉检查视频层。最终 judge 核对任务、产物和完整轨迹。
已识别 Decode As 对话框无响应。
仍重试 400 多步,只解码一条流,缺失证据未补齐。
把已核验结果与未解决的界面阻碍分开,下一轮只补缺项。
约 46.5 秒的 f 层 fps=0、frameWidth=0×0;帧率图的 38–52 秒区间为 0;再核查 21,018 个包。
视觉完成、文件语义、修复前证据是三种不同的验收条件
DOC_task_2:统一标题样式
Baseline 发现 FakeBoldParagraph 后直接编辑 XML,没有按要求在 LibreOffice 中操作,也未证实 PDF 导出,judge 给 0.00。
LongHorizon 通过 GUI 应用 Heading 1,逐页复查;Auditor 随后解析 XML,确认 15 个标题为 Heading_20_1、outline-level=1,得 0.89。
DOC_task_4:修复 VLOOKUP
Baseline 已保存部分初始错误截图,但证据未收全就改 XML;重开仍有 Err:510,文件与截图序列不一致,得 0.45。
LongHorizon 把缺失的修复前截图留作待办,收全后才修改,再核验九张前后截图,得 0.87。
文件存在、可以编译,不等于所有测试通过
SQLite:编译并启用覆盖率
gcov 用于检查代码哪些部分运行过。对照的编译和 PATH 测试通过,但覆盖率测试失败,reward 0。
LongHorizon 在六轮中检查源码、编译位置、覆盖率符号、.gcno 文件和最终保存位置,三项测试全过,reward 1。
mystery binary:独立复刻图像
对照文件存在且能编译,但图像相似度测试失败。LongHorizon 交付独立 C 程序,静态编译,gzip 后小于 2000 字节,不调用原程序。
公开案例中图像一致,移走原程序后 MD5 仍一致;九轮后 reward 1。未展示多类输入,不据此宣称普遍等价。
稳定提升出现在条件相同的配对实验;最大数字未必是最干净的因果证据
可靠性来自更多核验,但成本不是固定倍数
按 benchmark 看总成本
Terminal-Bench 中,分轮和审计减少了无效重试;OSWorld 则付出更多观察与恢复。
谁在花新增 token?
效果更偏向需要保留、检查、修订多个环境状态的任务。纯数学、短算法或单步感知瓶颈受益较小,部分细分类别还会回退。