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组织长期执行过程的核心媒介。
换句话说,这篇综述把代码视为Agent系统中的可执行、可检查、有状态媒介,并从接口、机制、多Agent扩展三个层次展开了论述。
为什么Harness需要代码作为核心载体?
一个纯粹的大语言模型本质上是无状态的。它可以根据上下文生成下一段文本,但不会天然保存任务进度,也不会自动维护外部世界的状态变化。Harness的作用,就是把模型接入真实的执行环境。
代码之所以适合成为harness的核心载体,是因为它有自然语言不具备的三个属性:
可执行、可检查、有状态
可执行,意味着模型的意图可以变成真实操作。一个计划不只是“我将修改文件”,而是可以落地为shell command、patch或测试脚本。
可检查,意味着执行过程会产生客观反馈。编译错误、运行时错误、测试结果、日志和trace,都能告诉系统当前发生了什么,而不只是依赖模型自我解释。
有状态,意味着任务进度可以被持久保存。仓库、文件系统、配置、测试、commit history、skill library都能记录Agent已经做了什么、失败在哪里、下一步应该接着哪里做。
所以,这篇survey和一般harness综述最大的不同,不是又列一遍工具、记忆和沙箱,而是把代码放在了中心位置:
代码是harness中最稳定、最可操作的状态载体。
代码如何打通Harness的接口?
这篇综述的第一层是Harness Interface:代码如何成为模型和外部世界之间的接口。
首先,
代码让推理可执行
其次,
代码让行动可落地
第三,
代码让环境可建模
代码进入Harness Interface后,推理不再只是文本,行动不再只是承诺,环境也不再只是描述。它们都变成了可以执行、检查和更新的状态。
代码在接口层连接了reasoning、acting和environment modeling,让Agent的推理、行动与环境状态进入同一个可执行闭环。
(代码作为接口层的发展路线图。)
Harness如何用代码管理状态与反馈?
真实任务很少一步完成。修复一个bug,可能要多次定位、修改、测试和回滚;操作一个网页系统,可能要跨多个页面和工具;做一个科学实验,可能要提出假设、运行模拟、分析数据,再根据结果调整下一步。
这时,关键不只是模型更强,而是Agent的每一步是否能被组织进一个可控的执行循环。
Planning
Memory
Tool use
最核心的是
Plan-Execute-Verify循环
一个成熟的Agent不应该害怕报错。报错、测试失败和执行日志,正是代码harness控制Agent行为、让它逐步收敛的反馈传感器。
规划、记忆、工具使用和执行反馈共同构成了代码中心Harness架构,支撑Agent长程运行。
多Agent协作时,代码是共享基底
当任务复杂到单个Agent无法完成,多Agent协作就成为一个自然的方向。一个Agent做manager,一个做planner,一个写代码,一个写测试,一个做reviewer。
但多Agent的真正难点不是“多叫几个模型一起讨论”,而是它们如何共享同一个世界状态。
如果多个Agent只靠聊天记录协作,很容易出现状态发散:每个Agent都以为自己理解了当前进展,但它们对代码到底被改成什么样、测试失败在哪里、哪些修改已经生效,可能并没有共同的认知。
代码在这里提供了更稳定的共享基底。仓库、测试、PR、issue、CI log、review comment、执行trace,都可以成为多个Agent共同读写和验证的对象。真正的协作不是“互相说服”,而是围绕共享程序状态不断收敛。
多Agent系统的共同语言,不应该只是自然语言对话,而应该是可执行的共享代码状态。
(在多Agent系统中,共享仓库、测试、执行状态和workflow构成协作基底。)
从Claude Code到机器人:代码正在成为Agent的操作系统
Code as Agent Harness最先在coding agent中变得明显,这并不意外。软件世界天然可执行、可测试、可回滚、可记录,因此最适合作为Agent落地的样板间。
但这个趋势并不止于写代码。在GUI/OS Agent中,网页和操作系统正在被转化为可编程环境,DOM tree、accessibility tree、Playwright脚本都让界面操作变成可执行的状态转移。在机器人领域,语言意图需要变成技能库、控制脚本和仿真反馈,抽象目标只有落到可执行代码里,才能被物理约束检查。在科学发现中,假设、实验、模拟、数据分析和实验记录可以被组织成代码流水线,Agent不只是生成想法,而是通过可执行的pipeline推进发现过程。
因此,未来很多Agent不一定都叫coding agent,但它们很可能都会运行在某种code-centric harness之上。
模型像大脑,harness像身体和神经系统;而代码,就是把大脑、身体、反馈和记忆连接起来的操作系统。
(Code as Agent Harness从代码助手扩展到GUI/OS、机器人、科学发现、个性化系统等场景。)
开放问题:下一代Agent不能只评测最终结果
当Agent变成长期执行系统,评测方式也必须随之改变。过去的benchmark主要看最终结果:答案对不对、测试过没过、任务完成没有。但对于code-harnessed agent,这远远不够。
一个Agent可能最终通过了测试,但过程中做了大量危险修改、污染了共享状态,或者引入了隐藏的regression。另一个Agent可能没有完成任务,但执行轨迹清晰、失败原因明确、状态可恢复。在真实部署场景中,后者未必更差。
论文因此提出了几个开放问题:如何做harness-level evaluation,不仅评估最终输出,也评估计划、工具调用、状态转移和反馈使用;如何处理incomplete feedback,因为测试通过不代表程序真正正确;如何实现regression-free self-evolution,避免harness在自我优化时引入新的失败模式;如何解决多Agent共享状态中的语义冲突;以及如何把human-in-the-loop变成可记录、可追责、可验证的系统状态。
AI Agent的下一步,不只是让模型更会回答,而是让整个代码化执行过程更可检查、更可恢复、更可治理。
过去,代码是模型的考题。
现在,代码正在成为Agent的操作系统。