阅读 OpenAI《Harness Engineering》 与 Anthropic《Effective harnesses for long-running agents》《Harness design for long-running application development》有感.
2025 年 8 月,OpenAI 一个三人团队向空仓库提交了第一行代码。五个月后,这个仓库膨胀到一百万行,1,500 个 PR,数百名日活用户。团队扩大到七人,人均日处理 PR 数不降反升。
而人类工程师写下的代码行数是:零。
几乎同时,Anthropic Labs 让 Claude 用 6 小时独立构建了一个 2D 复古游戏引擎,4 小时构建了一个数字音频工作站(DAW)。在多轮迭代中,它还设计出了荷兰艺术博物馆的高质量官网——那种在第 10 轮迭代时突然抛弃常规布局、改用 CSS 3D 透视渲染展厅空间的”创造性跳跃”。
这两个实验的主角不是 GPT-5 也不是 Claude Opus 4.5。主角是一套被称为 Harness 的运行制度。
但这里有一个悖论:模型能力明明在指数级增长,为什么反而更需要”缰绳”?如果马跑得越来越快,缰绳不应该越来越松吗?
答案是:大模型的原生缺陷不是能力不足,而是”组织自己”的能力不足。
大模型应用的发展经历了三个阶段:
| 阶段 | 核心关注点 | 代表实践 | 局限 |
|---|---|---|---|
| Prompt Engineering | 单次输入的魔法咒语 | Few-shot、CoT、ToT | 无法处理长周期、多步骤任务 |
| Context Engineering | 如何高效填充上下文窗口 | RAG、压缩、分层检索 | 只解决 “输入什么”,不解决 “如何运转” |
| Harness Engineering | 设计智能体的运行环境与制度体系 | 多 Agent 协作、状态外化、反馈回路 | 需要系统性架构思维 |
Harness(缰绳) 这个词的隐喻极其精准:它不是马匹本身(模型能力),也不是骑手(人类意图),而是 连接二者、传递力量、施加约束、确保方向的整套装备系统。在大模型语境下,Harness 是:
一套包含工具接口、沙箱环境、架构约束、自动化测试、反馈循环及监控仪表盘的完整运行环境与制度体系,旨在引导和约束 AI 智能体,使其能够自主、可靠地完成复杂长周期任务,而无需人类实时干预。
没有 Harness 的前端模型,即使强如 Opus 4.5,在面对 “构建一个 claude.ai 克隆” 这样的高级指令时,也会表现出四种系统性失败模式:
这些缺陷的根源在于大模型的底层机制:
Harness Engineering 正是为了系统性解决这些原生缺陷而生。
两篇文章表面上是技术实践,我觉得底层是更像是两种工程世界观的碰撞。
OpenAI 的 Codex 团队构建的是产品级 Harness——一套需要持续演进五个月的工业化制度。
他们的核心信念是:“人类掌舵,智能体执行。” 工程师不写代码,而是设计环境、意图和反馈回路。随着代码吞吐量增加,人类 QA 成为瓶颈,因此他们将审核工作 Agent 化,形成了所谓的 “Ralph Wiggum 循环”(源自《辛普森一家》中那个总是说”我什么都没做”的角色——讽刺的是,人类在这个循环中确实越来越不需要做什么)。
关键设计:
代码仓库即记录系统(System of Record)。所有知识必须版本化、可机械检查。专职 linter 验证文档链接有效性、新鲜度、结构合规性。甚至有一个”doc-gardening”智能体定期扫描过时文档并发起修复 PR。
渐进式披露(Progressive Disclosure)。AGENTS.md 只有约 100 行,是”地图”而非”说明书”。它指向 docs/ 目录中的深层文档——设计文档、执行计划、产品规范、技术债务追踪器。
可观测性即感官延伸。Chrome DevTools MCP 让 Codex 能选择目标、清除控制台、捕获 DOM 快照、触发 UI 路径、截图对比。验证循环是

指标的可观测性则是通过:日志查询(LogQL)和指标查询(PromQL)直接暴露给 Agent。这样前后端都是可观测的
Anthropic Labs 构建的是项目级 Harness——针对单次 4-6 小时的长周期任务,强调对抗性优化。
他们的核心信念是:“每个新 session 都是一位失忆的新工程师,靠交接文档恢复状态。”
关键设计:
claude-progress.txt、feature-list.json、init.sh)启动新 session。Reset 不是放弃记忆,而是将记忆外化到更可靠的存储——文件系统。Anthropic 在实验中发现了一个反常识现象:Harness 的组件不是越复杂越好,而且模型的进化会不断让某些组件”失效”。
Opus 4.5 表现出强烈的 Context Anxiety,因此必须依赖 Sprint 分解和 Context Reset。但 Opus 4.6 发布时,其官方改进包括”更谨慎地规划、更长时间地维持 Agent 任务、在更大代码库中更可靠地运行、更好的代码审查和调试能力”。于是 Anthropic 做了一个实验:移除 Sprint 结构。
结果令人惊讶:4.6 可以在没有 Sprint 分解的情况下连续运行超过两小时保持连贯。Evaluator 仍然有价值,但只在超出模型原生能力边界的任务上。对于模型已经能可靠完成的任务,Evaluator 变成了不必要的开销。
这揭示了一个深层原则:Harness 中的每个组件都编码了一个关于”模型不能做什么”的假设。这些假设会随模型进化而失效,因此 Harness 必须持续被”压力测试”和简化。
| 维度 | OpenAI(Codex 团队) | Anthropic(Labs 团队) |
|---|---|---|
| 业务目标 | 从零构建内部 SaaS 产品(百万级代码库) | 长周期自主软件工程(前端设计 + 全栈应用) |
| Harness 哲学 | 制度性(Governance):CI、linter、doc-gardening | 对抗性(Adversarial):Generator-Evaluator 博弈 |
| 状态管理 | 仓库即真相源,渐进式披露 | 文件系统外化(JSON + progress.txt + init.sh) |
| 测试策略 | Chrome DevTools MCP + LogQL/PromQL | Playwright MCP + 结构化评分 |
| 评估机制 | Agent 自审 + 交叉审查 + 人类可选审核 | 独立 Evaluator,四维度评分(Design/Originality/Craft/Functionality) |
| 成本特征 | 持续投入,追求吞吐量 | 单次高成本($200 vs $9),追求质量跃迁 |
尽管路线不同,两篇文章在底层设计上高度一致:
法则一:状态必须外化到文件系统
OpenAI 将 docs/ 目录作为知识库的唯一真相源,Anthropic 将 claude-progress.txt、feature-list.json 和 init.sh 作为跨 session 的 “交接文档”。核心共识:上下文窗口不是存储,文件系统才是。 这类似于解决内存泄漏的思路——不优化内存,而是重启进程并从磁盘恢复状态。
法则二:渐进式披露优于百科全书式灌输
OpenAI 的 AGENTS.md 只有 100 行,是 “地图” 而非 “说明书”;Anthropic 的 Feature List 是 JSON 结构化数据,每次只加载当前任务所需信息。两团队都发现:给 Agent 一张地图,比给一本 1000 页的说明书更有效。 过多的指导会挤占任务上下文,导致模型进行错误的局部模式匹配。
法则三:分离 “做事” 与 “评判”
OpenAI 让 Codex 在提交 PR 前进行自我审查,并引入其他 Agent 进行交叉审查;Anthropic 明确将 Generator 与 Evaluator 分离,并指出:“让独立的 Evaluator 保持怀疑态度,远比让 Generator 自我批评更容易实现(far more tractable)。” 这本质上是在 Harness 层面实现了 关注点分离(Separation of Concerns)。
法则四:可观测性必须对 Agent 可读
OpenAI 将 Chrome DevTools Protocol、日志查询(LogQL)、指标查询(PromQL)直接暴露给 Codex;Anthropic 让 Evaluator 通过 Playwright MCP 与实时页面交互。两者的共同洞见:如果人类需要看截图才能判断 UI 好坏,Agent 也需要同样的感知通道。 可观测性不是给人类看的仪表盘,而是 Agent 的感官延伸。
法则五:增量推进是长周期任务的唯一可行策略
OpenAI 采用 “深度优先” 的模块化解构;Anthropic 强制 “每次只做 1 个 feature”。两者都拒绝了 “大爆炸式” 开发,因为 上下文窗口的离散性决定了复杂任务必须被切分为可在单个窗口内完成的原子单元。
OpenAI 的 Harness 是为 持续演进的产品 设计的:需要处理 1500 个 PR、维护技术债务、进行文档园艺(doc-gardening)、支持多人(多 Agent)协作。其 Harness 强调 制度性——CI 验证、 linter、知识库新鲜度检查。
Anthropic 的 Harness 是为 单次长周期项目 设计的:6 小时构建游戏引擎、4 小时构建 DAW。其 Harness 强调 对抗性——Generator-Evaluator 的迭代循环、上下文重置的干净启动。
这种差异决定了 Harness 设计的两个方向:产品 Harness 需要治理(Governance),项目 Harness 需要对抗(Adversarial)。
Anthropic 在前端设计和全栈开发中采用了受 GAN 启发的三 Agent 架构:
plain
复制
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Planner │────→│ Generator │←────│ Evaluator │
│ (规划器) │ │ (生成器) │ │ (评估器) │
└─────────────┘ └─────────────┘ └─────────────┘
│ ↑ │
└───────────────────┴───────────────────┘
(迭代循环,5-15 轮)
关键设计细节:
OpenAI 的 Harness 更侧重于 代码生产的工业化流程:
plain
复制
人类工程师描述任务
↓
Codex (Generator)
↓
打开 Pull Request
↓
┌─────────────────┐
│ 本地自审 Agent │
│ 云端审查 Agent │
│ 交叉审查 Agent │
└─────────────────┘
↓
反馈循环直到通过
↓
可选人类审核
↓
合并
OpenAI 将这个循环称为 “Ralph Wiggum 循环”(源自《辛普森一家》)。其核心洞见是:随着代码吞吐量增加,人类 QA 成为瓶颈,因此必须将审核工作 Agent 化。 最终,该团队几乎将所有审核工作调整为 “Agent 审 Agent” 的模式。
Anthropic 在脚注中澄清了一个重要设计选择:其 Initializer Agent 和 Coding Agent 实际上是同一个 Agent,只是使用了不同的初始 user prompt。系统提示词、工具集和整体 Harness 完全相同。
这揭示了一个深层架构决策:
| 模式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 单 Agent 多角色(Anthropic 早期) | 实现简单,无需角色间通信协议 | 角色混淆,评估偏差难以消除 | 任务边界清晰、评估客观的场景 |
| 多 Agent 分离(Anthropic 后期/OpenAI) | 评估更客观,可并行,可专业化 | 需要定义 Agent 间通信格式和状态传递 | 主观评估、长周期、高质量要求 |
Anthropic 从前端设计(主观)到全栈开发(客观)的演进中,逐渐从单 Agent 多角色转向多 Agent 分离,尤其是在 Evaluator 独立化上。OpenAI 则从一开始就是多 Agent 协作,因为产品级代码审查天然需要多视角。
实战启示:如果你的任务包含主观判断(UI 设计、文案质量),必须将 Evaluator 独立出来;如果任务以客观正确性为主(API 实现、算法逻辑),单 Agent 多角色即可满足。
OpenAI 的 Harness 将可观测性从 “人类仪表盘” 重新定义为 “Agent 感官系统”:
Chrome DevTools MCP 接入:
Snapshot BEFORE → Trigger UI → Runtime Events → Snapshot AFTER → Apply Fix → Re-run Validation → Loop Until Clean。可观测性堆栈:
这使得提示词如 “确保服务启动在 800ms 内完成” 或 “这四个关键用户旅程中的任何跨度都不得超过两秒” 变得可执行——Agent 可以直接查询验证。
Anthropic 明确拒绝了 curl 级别的浅层测试,坚持使用 Playwright/Puppeteer 级别的浏览器自动化:
“Claude was able to identify and fix bugs that weren’t obvious from the code alone.”
其测试流程是 Generator 编码 → 启动应用 → Evaluator 用 Playwright MCP 导航 → 截图/交互验证 → 评分反馈。这种测试不是 “检查 API 是否 200 OK”,而是 “检查按钮点击后模态框是否正确动画弹出”。
关键设计:测试必须产生 结构化评分(JSON),而非开放式文本。Anthropic 的前端评估四维度(Design Quality / Originality / Craft / Functionality)每个都有明确的评分标准和 few-shot 校准示例。
两篇文章共同定义了 Harness 中反馈回路的三种形式:
| 反馈类型 | 触发时机 | 形式 | 作用 |
|---|---|---|---|
| 即时反馈 | 单轮工具调用后 | 工具返回结果(成功/失败/输出) | 修正当前行动 |
| 会话内反馈 | 单 session 内多轮迭代 | Evaluator 评分 + 批评 | 优化当前 feature |
| 跨会话反馈 | 新 session 启动时 | Handoff Artifact(progress.txt / git log / feature list) | 恢复状态,确定下一步 |
基于对 OpenAI 和 Anthropic 实践的拆解,我总结出一个优秀 Harness 应具备的 六层架构模型。这个模型不是理论设想,而是对两家前沿团队实践的抽象与整合。
┌─────────────────────────────────────────────────────────────┐
│ Layer 6: 意图与治理层 (Intent & Governance) │
│ - 人类指令解析、伦理约束、安全策略、成本预算 │
├─────────────────────────────────────────────────────────────┤
│ Layer 5: 知识库与渐进披露层 (Knowledge & Progressive Disclosure)│
│ - AGENTS.md (地图)、docs/ (真相源)、Feature List、Design Docs │
├─────────────────────────────────────────────────────────────┤
│ Layer 4: 评估与反馈层 (Evaluation & Feedback) │
│ - Evaluator Agent、评分标准、测试套件、审查规则 │
├─────────────────────────────────────────────────────────────┤
│ Layer 3: Agent 执行层 (Agent Runtime) │
│ - Generator Agent、Planner Agent、工具调用循环、上下文管理 │
├─────────────────────────────────────────────────────────────┤
│ Layer 2: 任务分解与状态管理层 (Task & State Management) │
│ - Feature List JSON、Progress Log、Handoff Artifact、Git 状态 │
├─────────────────────────────────────────────────────────────┤
│ Layer 1: 工具与沙箱层 (Tools & Sandbox) │
│ - MCP 工具集、浏览器自动化、可观测性查询、文件系统、代码执行环境 │
└─────────────────────────────────────────────────────────────┘
这是 Harness 的基础设施。OpenAI 提供了 Chrome DevTools MCP、本地脚本、gh CLI、可观测性查询工具;Anthropic 提供了 Playwright MCP、代码执行工具、文件读写工具。
设计原则:
这是 Harness 最核心的创新层。状态外化是这个层的核心设计模式。
关键数据结构:
// feature-list.json (Anthropic 模式)
{
"features": [
{
"id": "auth-login",
"description": "Implement OAuth2 login flow",
"priority": 1,
"dependencies": ["db-schema"],
"passes": false,
"test_command": "npm run test:auth",
"notes": "Blocked by token refresh bug"
}
],
"metadata": {
"last_updated": "2026-05-21T14:32:00Z",
"session_count": 7
}
}
<!-- claude-progress.txt (Anthropic 模式) -->
## Session 7 Summary
- Completed: User profile page layout
- Blocked: Image upload (CORS issue)
- Next: Fix CORS then implement upload
- Git commit: a1b2c3d
# init.sh (环境恢复脚本)
#!/bin/bash
git checkout main
git pull
npm install
npm run db:migrate
npm run dev &
echo "App ready at http://localhost:3000"
设计原则:
这是 Harness 的 “大脑调度器”。
上下文管理三策略:
这是 Harness 的 “免疫系统”。
Evaluator 设计要点:
OpenAI 的 AGENTS.md + docs/ 架构是这个层的最佳实践:
AGENTS.md (≈100 行) ──→ 地图,指向深层文档
├── ARCHITECTURE.md ──→ 域和包分层的顶层地图
├── docs/
│ ├── design-docs/ ──→ 设计理念、核心信念
│ ├── exec-plans/ ──→ 活跃/已完成计划、技术债务
│ ├── product-specs/ ──→ 产品需求
│ └── references/ ──→ 外部技术参考(如 Nixpacks、uv)
├── DESIGN.md ──→ 设计系统
├── FRONTEND.md ──→ 前端规范
├── QUALITY_SCORE.md ──→ 质量评分与差距追踪
└── SECURITY.md ──→ 安全规范
设计原则:
这是 Harness 的 “方向盘”。即使 Agent 自主运行,人类工程师仍通过以下机制保持掌控:
Anthropic 发现的 “Context Anxiety”(上下文焦虑) 是一个极具洞察力的现象。从 Transformer 的注意力机制分析,这一现象有其数学必然性:
Transformer 的注意力计算为 A tt e n t i o n(Q, K, V)= so f t ma x(d k Q K T)V 。当序列长度 L 接近上下文上限时:
Compaction 的问题在于:它将历史对话压缩为摘要,但摘要的 信息损失 在复杂任务中是不可接受的。更关键的是,Compaction 保留了 “这是一个长对话” 的元信息,模型仍然感知到自己在处理一个历史沉重的会话。
Context Reset 的优雅之处在于:它彻底切断了这种元认知压力。新 session 面对的是一个干净的注意力矩阵,没有任何历史负担。模型从 “交接文档” 中恢复状态,而非从压缩的上下文中继承焦虑。这类似于操作系统的 进程隔离——不修复内存泄漏,直接重启进程。
从认知科学视角看,Harness 本质上是 将模型的认知过程外化为可操作的符号系统:
这揭示了一个深层原理:大模型不是缺乏智能,而是缺乏 “智能的组织结构”。 Harness Engineering 不是让模型变得更聪明,而是为模型设计一个 外骨骼——让它能够承载超出其原生认知带宽的复杂任务。
OpenAI 和 Anthropic 的实践共同指向一个未来图景:Agent Operating System(Agent 操作系统)。
当前的 Harness 还是 “每个项目一套配置” 的手工业模式。未来的 Harness 将演化为操作系统级别的抽象:
| 当前 Harness | 未来 Agent OS |
|---|---|
| 项目级 init.sh | 系统级进程管理(fork/exec/session) |
| 手工编写的 AGENTS.md | 自动生成的 Agent 能力目录(类似 /proc) |
| 专用 Feature List | 通用任务调度器(类似内核调度器) |
| 单一 Evaluator | 多维度质量守护进程(类似系统守护进程) |
| 静态工具集 | 动态 MCP 加载与卸载(类似内核模块) |
这个 Agent OS 将具备:
OpenAI 的五个月百万行代码实验和 Anthropic 的六小时游戏引擎构建,共同证明了一个结论:大模型的能力边界不是由参数规模决定的,而是由 Harness 的设计质量决定的。
在 Agent 优先的世界里,人类工程师的价值不再是代码产量,而是 系统设计能力、意图表达能力、反馈回路设计能力。优秀的 Harness 工程师像是一位经验丰富的驯马师——他不亲自奔跑,但深知如何让马匹在正确的方向上全速前进。
写好一个 Harness,意味着你要站在大模型底层原理(注意力、上下文、自回归)的认知高度上,为 Agent 设计一套 外化的认知架构。它必须让 Agent 在失忆后能迅速恢复状态,在自我膨胀时能被客观评估,在迷失方向时能被清晰的知识地图引导。
Harness Engineering 不是 Prompt Engineering 的升级版,它是 软件工程在 AI 时代的本体论升级——从 “人写代码” 到 “人设计系统,Agent 写代码”。
而我们现在,正处于这场升级的原点。
参考文章:
正在加载评论...