Claude Code爆火背后的Agent Harness底层逻辑,UIUC、Meta、斯坦福深度解读
过去两年,大模型写代码已经不再新鲜。从代码补全到 GitHub issue 修复,从竞赛编程到仓库级软件工程,人们习惯用一个简单标准评估 coding agent:代码能不能写对?测试能不能通过?
但 Claude Code、Codex 这类系统的出现,正在把问题推向更底层的一层。真正强的 coding agent,并不只是 “会写代码”。它还要能在长时间窗口内读仓库、做计划、改文件、运行命令、查看报错、修复失败、维护上下文,并在多轮反馈中持续推进任务。
这套让模型长期可靠 “跑起来” 的执行系统,就是 Agent Harness。很多关于 harness 的讨论,关注的是模型外面应该包什么:工具、API、沙箱、记忆、权限边界、验证器、反馈循环。它们回答的是 “一个可用 Agent 需要哪些系统组件”。
来自伊利诺伊大学香槟分校(UIUC)、Meta 和斯坦福(Stanford University)的 102 页综述《Code as Agent Harness》进一步追问: 当 Agent 被放进长期任务环境里,真正把推理、行动、反馈、验证和协作串起来的操作对象是什么?
答案是:代码。
论文标题:Code as Agent Harness
论文:https://arxiv.org/pdf/2605.18747
GitHub 仓库:https://github.com/YennNing/Awesome-Code-as-Agent-Harness-Papers
这里的代码,不只是模型最终生成的一段程序,也不是说 Agent 框架本身由代码写成。它指的是 Agent 在 harness 中不断生成、运行、修改、保存和共享的一系列代码化中间物:Plan.md、测试脚本、shell 命令、patch、执行日志、workflow、技能库、仿真器、验证器,甚至共享仓库状态。
传统代码生成里,代码通常是模型最后交付的产物; 但在 Agent Harness 里,代码会进入整个执行循环,承载计划、执行、反馈、验证和状态管理,正在成为 harness 组织长期执行过程的核心媒介。
Code as Agent Harness 将代码视为 Agent 系统中的可执行、可检查、有状态媒介,并从接口、机制、多 Agent 扩展三个层次展开。
为什么 Harness 需要代码作为核心载体?
一个纯粹的大语言模型本质上是无状态的。它可以根据上下文生成下一段文本,但不会天然保存任务进度,也不会自动维护外部世界的状态变化。Harness 的作用,就是把模型接到真实执行环境里。
代码之所以适合成为 harness 的核心载体,是因为它有自然语言不具备的三个属性: 可执行、可检查、有状态 。
可执行,意味着模型的意图可以变成真实操作。一个计划不只是 “我将修改文件”,而是可以落成 shell command、patch 或测试脚本。
可检查,意味着执行过程会产生客观反馈。编译错误、runtime error、测试结果、日志和 trace,都能告诉系统当前发生了什么,而不是只依赖模型自我解释。
有状态,意味着任务进度可以被持久保存。仓库、文件系统、配置、测试、commit history、skill library 都能记录 Agent 已经做了什么、失败在哪里、下一步应该接着哪里做。
所以,这篇 survey 和一般 harness 综述最大的不同,不是又列一遍工具、记忆和沙箱,而是把代码放在中心位置: 代码是 harness 中最稳定、最可操作的状态载体 。
代码如何打通 Harness 的接口?
这篇综述的第一层是 Harness Interface:代码如何成为模型和外部世界之间的接口。
首先, 代码让推理可执行 。过去模型依赖自然语言 Chain-of-Thought 做推理,但文本推理很难验证。PoT、PAL 等方法把中间推理转成程序,让解释器完成计算;Lean/Coq 相关工作则进一步把推理变成机器可检查的证明过程。关键不在于 “模型会写程序”,而在于推理本身被外部化成了可执行对象。
其次, 代码让行动可落地 。对于 Claude Code 或 Codex,行动不是一句 “我会修复 bug”,而是实际修改文件、运行测试、查看报错、再生成 patch。对于机器人,SayCan、Code as Policies、Voyager 等工作展示了另一种形式:语言目标被转成技能调用、控制脚本或可复用函数。
第三, 代码让环境可建模 。Agent 要长期运行,就必须知道环境状态。软件仓库、测试结果、执行日志、DOM tree、仿真器、数据分析脚本,都可以成为 Agent 理解世界的结构化表示。SWE-bench、AgentBench 等可执行评测环境也正是基于这一点:任务不再只是静态问答,而是在一个可执行环境中完成。
代码进入 Harness Interface 后,推理不再只是文本,行动不再只是承诺,环境也不再只是描述。它们都变成了可以执行、检查和更新的状态。
主题:状态