摘要
如果你第一次听见 Agent Harness,很容易把它理解成“某个 Agent 框架的新叫法”,或者“工具调用外面再包一层壳”。
但我越来越觉得,这个词最适合先用一个寓言来理解。
因为它真正想讲的,不是一个模型有多聪明,而是:一个聪明但不稳定的东西,怎样才被允许真正去做事。
寓言:城北工坊里的少年
北渡城有一间很有名的工坊。
这间工坊不以木料最好、铁器最利出名,真正让它出名的,是一个少年。
少年名叫阿砚。
阿砚有一种古怪的本事。无论来客说的是修桥、造钟、整账、誊地图,还是替商队设计更快的路线,他只要听一遍,大多就能立刻说出一串像模像样的步骤。许多人说,他不像学徒,倒像一面会思考的镜子。别人只给他一句话,他能在镜中照出十步之后的样子。
所以没过多久,城里的人都在传:
- 这孩子天生就是做大事的
- 只要把差事交给他,他总能自己想出办法
- 北渡城真正厉害的,不是工坊,是这个少年
最开始,连工坊里不少老师傅也这么想。
直到他们真的把差事原封不动地扔给阿砚,才发现事情远没有传闻里那么简单。
阿砚确实很会想。
可他也有几个毛病。
第一,他太敢补空白。来客话里缺了一截,他会自己补上,而且补得煞有介事。若你不盯着,他有时会把猜测当成事实。
第二,他太容易被眼前的东西带偏。桌上如果同时摊着十几份图纸、三四本旧账、几把不同的尺和凿子,他会一会儿想翻账,一会儿想改图,一会儿又要开柜子找别的零件。每一步看起来都说得过去,合起来却未必还记得最初为何出发。
第三,他不知道什么叫“最好先别碰”。普通学徒看见城门钥匙、熔炉总阀、水闸机关,心里会先生敬畏;阿砚只会觉得,既然这东西能解决问题,那为何不用。
第四,他很怕桌子太乱。纸片一多,笔记一厚,他就容易把早晨答应过的话忘到午后,把刚试错过的法子傍晚又试一遍。
这就让老师傅们慢慢明白一件事:
阿砚不是没本事。
恰恰相反,正因为他本事太大,若让他直接伸手碰整座城,反而危险。
于是,工坊掌事沈衡开始改工坊。
他没有先去改阿砚,而是先去改阿砚周围的一切。
他把每一份委托都重写成一张差事单,挂在阿砚面前。差事单上不再只是“修好南桥”这种笼统一句,而会写清四件事:
- 这次到底要做成什么
- 哪些东西绝对不能碰
- 优先看哪几本册子、哪几张图
- 最后要拿什么来验收
阿砚不再面对整间库房,只面对这张单子。
随后,沈衡又把工坊的柜子重新上了锁。
做账时,只开账册柜和算盘柜。
看地图时,只开图册柜和量尺柜。
修小钟时,只把钟匠桌周围的零件匣推出来。
至于城门钥匙、水闸机括、熔炉总阀,那些碰一下就会让整座城跟着一起承担后果的东西,全被放进了带铜牌的高柜里。阿砚若真觉得非碰不可,必须先敲铃,写明理由,等人来看。
再后来,沈衡干脆规定:阿砚自己不能离开长桌。
他想查旧档,就敲左边的小铃,由跑腿学徒去档案室抄来需要的那几页。
他想试一块新齿轮,就敲右边的小铃,由器房拿来样件和废木。
他想验证一个想法,就先送去后院沙盘或废料台上试,不许一上来就碰南桥真梁、水渠真闸、钱庄真账。
阿砚照样能做事,但他碰到世界的方式,被改成了“先请求,再观察,再继续”。
工坊里又多了两个新角色。
一个叫抄录员,坐在阿砚身后。
阿砚每做一步,抄录员就把“刚才要做什么、实际做了什么、得到什么结果、下一步为什么继续”记成短条,钉到墙上。
开始时,阿砚嫌烦,说这样像被人盯着。
沈衡说,不是盯你,是替你记住你自己。
另一个叫摘记官。
墙上纸条一多,阿砚果然开始眼花。于是摘记官会每隔一阵,把前面几十张纸压成一页摘要:哪些事情已经确认,哪些路已经试过,哪些禁令不能忘,现在哪件事最重要。旧纸条仍然留档,但不再全部摊在阿砚面前。
这样一来,桌上的世界小了,身后的记忆却更稳了。
后来城里的差事越来越大。
有时不是一张桌子能做完的,而是要同时查三本旧账、勘两段河道、比四种木料,还要顺手问问南市那边最近的税路是不是改了。
沈衡又想了个法子。
他不让阿砚一个人满场乱跑,而是把大差事拆成几间偏屋。
每间偏屋里只放一小段任务、一小撮资料和一小串钥匙,让小助手们各查各的:
- 有人只负责找旧例
- 有人只负责试材料
- 有人只负责核对尺寸
- 有人只负责把现成结果整理成能交付的样子
这些小助手并不知道整座城的全部样子,他们只知道自己这间屋的边界。等各屋有了结果,再送回主桌,由阿砚继续判断。
北渡城的人因此越来越信这间工坊。
来客们站在门口,只会看见阿砚落笔飞快、开口成章;真正藏在门后的那些铜牌、抽屉、铃绳、沙盘、账墙、摘记官和偏屋,大多数人根本不会注意。
大家都说:
“北渡城有个神童。”
却很少有人说:
“北渡城还造出了一整套让神童不至于把城烧掉的办法。”
直到有一年春汛,东岸来了一位急脾气的都监。
他听遍全城传闻,认定北渡工坊赚钱的秘密,不过是阿砚一个人。他觉得沈衡太慢、规矩太多、铃绳太烦、铜牌太碍事。
于是他花高价,把阿砚请去东岸,专门给他腾出一间空阔大屋。
屋里什么都有。
所有柜子都不锁。
所有钥匙都挂在墙上。
没有抄录员。
没有摘记官。
没有偏屋。
没有沙盘。
也没有人规定先试废料还是先动真桥。
都监很得意地对阿砚说:
“如今再没人束着你。你不是最会做事吗?这整间屋,任你自由施展。”
刚开始,阿砚确实像鱼入大河。
他一会儿翻旧河图,一会儿开机关柜,一会儿要动水闸,一会儿又觉得该顺手改账册和税单,好让整个工程一并更顺。
每个决定单看都像聪明。
可半天之后,屋里已经乱得像刚起过风。
旧图和新图混在一起,试过的方案和没试过的方案堆成一叠,昨日留下的限制没人替他记,早晨说过先不要碰的总阀午后又被他摸了一次。最糟的是,他终于把一个只该在沙盘上先试的改法,直接动到了真闸上。
那天傍晚,东岸险些漫水。
都监这才慌了,把阿砚送回北渡城,亲自去见沈衡。
他原本以为会看见一个被规矩压坏的天才,没想到看见的却是一个重新坐回长桌前、立刻又能稳定做事的少年。
都监沉默了很久,问沈衡:
“所以北渡城真正买下来的,到底是什么?是这孩子,还是这些规矩?”
沈衡看了看阿砚面前那张差事单,又看了看墙上的摘记和高柜上的铜牌,说:
“都不是。”
“我们买下来的,是让这孩子可以安全碰世界的那整副架子。”
“阿砚当然重要。他是会想办法的脑子。”
“但脑子不是工坊。”
“没有这副架子,他最多只是个能说出许多步骤的人;有了这副架子,他才真能替人把差事做完。”
后来,北渡城新来的学徒私下给这整套东西起了个名字,叫作“驭匠架”。
老匠人们听见了,也没纠正。
因为他们知道,真正被驯住的从来不是天赋本身,而是天赋伸手碰世界的方式。
破题:我刚才真正想讲的是 Agent Harness
上面的故事里:
- 阿砚,对应的是模型,尤其是会推理、会规划、能把一句目标展开成多步行动的那个“脑子”
- 差事单,对应的是任务包装、系统提示和目标约束
- 只打开相关柜子,对应的是按任务暴露上下文和工具,而不是把整个世界一股脑丢给模型
- 铜牌和敲铃,对应的是权限申请、人类确认、allowlist 和策略控制
- 沙盘、废料台,对应的是沙箱、测试环境、预演环境
- 抄录员和摘记官,对应的是日志、轨迹、记忆、摘要、compact
- 偏屋和小助手,对应的是子代理、任务拆分和多代理协作
- 验收要求,对应的是测试、校验、评审和回滚
这些东西加在一起,才是 Agent Harness。
如果把话说得更直接一点:
Agent Harness 就是包在模型外面、负责把“会想”变成“能安全做事”的那层执行与控制系统。
很多人一开始会把注意力放在模型上,觉得模型越强,Agent 就越强。
这当然有一部分是真的。
但只要 Agent 开始碰真实世界,例如:
- 读文件
- 改代码
- 跑命令
- 调 API
- 写数据库
- 发消息
- 调起浏览器
问题就变了。
这时候真正棘手的,不再只是“下一句话生成得准不准”,而是:
- 它此刻能看见哪些信息
- 它允许调用哪些能力
- 哪些动作必须先问人
- 动作执行完以后,结果怎么再送回去
- 上下文太长时,哪些该保留,哪些该压缩
- 出错后是重试、回滚,还是直接停下
- 一项大任务要不要拆给多个子代理
- 整个过程能不能被记录、回放、审计
这些都不是“模型自己”天然会解决的事。
这些是 Harness 要解决的事。
一个真正的 Agent Harness,通常至少要负责什么
1. 组织目标和上下文
它要把用户一句宽泛的话,整理成模型当前这一轮真正要处理的工作面。
这通常包括:
- system prompt
- 当前任务约束
- 相关文件、记忆、规范和历史
- 哪些信息此轮该出现,哪些先不要出现
没有这一步,模型看到的不是“足够的上下文”,而往往是“混乱的上下文”。
2. 暴露工具,但不是裸暴露
很多人以为,给模型挂一堆函数,就已经做成 Agent 了。
其实那通常还不够。
真正的 Harness 还要决定:
- 这轮能看到哪些工具
- 同一个工具在什么权限下能用
- 某些危险参数能不能直接传
- 某些结果是直接返回,还是要先摘要、先落盘、先脱敏
换句话说,tool calling 只是接口;harness 是治理。
3. 推进那条“想一想、做一步、看结果、再继续”的循环
Agent 不是一问一答,而是一个循环:
- 接到目标
- 组织上下文
- 调模型
- 模型请求动作
- 系统执行动作
- 把观察结果送回模型
- 继续直到完成、失败或被中止
这条循环,常常就叫 agent loop。
而在很多工程语境里,驱动这条循环、并把它和权限、状态、工具、恢复机制连起来的那层东西,就是大家口中的 Agent Harness。
4. 管理状态、记忆和摘要
模型本身并不会天然“长期记住”一项复杂任务的全过程。
所以 Harness 往往要负责:
- 存历史消息
- 存关键中间产物
- 存用户偏好和规则
- 在窗口快爆掉时做摘要、折叠、压缩
- 在下一轮把最重要的部分重新放回上下文
这也是为什么很多成熟 Agent 看起来都很在意:
- memory
- compact
- artifact
- checkpoint
- trace
因为没有这些,Agent 很容易在长任务里失忆、绕圈,或者把已经试错过的路再走一遍。
5. 控制副作用和真实风险
一旦 Agent 能运行真实命令,风险就不再是“回答不优雅”,而是:
- 改坏文件
- 删错数据
- 误发消息
- 越权访问
- 无限循环烧时间和算力
所以 Harness 往往还要管:
- sandbox
- 权限等级
- 预算和超时
- 审批点
- 允许和拒绝规则
- 环境隔离
很多时候,用户觉得“这个 Agent 很稳”,本质上不是因为模型突然不犯错了,而是因为 Harness 把错误能造成的半径压小了。
6. 负责验证、恢复和交付
Agent 真正能进生产,不是因为它会生成答案,而是因为它能对自己的动作负责。
所以一套像样的 Harness,通常还会内置这些环节:
- 运行测试
- 检查 lint 和类型
- 比对 diff
- 失败后重试或换路
- 必要时回滚
- 记录全过程供人审查
这也是为什么成熟 Agent 产品最后拼的,常常不是“更会说”,而是“更会验”。
7. 在需要时组织多代理
当任务足够大时,Harness 还会承担调度器的角色:
- 把大任务拆成子任务
- 给不同子代理不同上下文
- 收紧各自权限边界
- 合并结果
- 决定何时等待、何时中断、何时放弃
这不是简单“多开几个模型窗口”,而是一种受控协作。
它不是什么
理解 Agent Harness,有几个常见误区最好顺手拆掉。
1. 它不等于模型本身
同一个模型,放在不同 Harness 里,最后呈现出的 Agent 质量可能差很多。
因为模型决定“会不会想”,而 Harness 决定“怎么做、能做到哪一步,以及做坏了怎么办”。
2. 它不等于一组工具
“能调终端、能读文件、能搜网页”只是能力清单。
如果没有权限、循环、状态、预算、恢复和日志,这些工具更像一堆散落在桌上的钥匙,不像一套能稳定交付的工坊。
3. 它也不只是 prompt engineering
Prompt 能改善模型在纸面上的表达。
Harness 改变的是模型和世界发生接触的方式。
一个好 prompt 能让它更聪明。
一个好 harness 才能让它在真实环境里更可靠。
4. 它和 runtime 往往重叠,但强调点不一样
不同团队对术语切分不完全一致。
有的人会把 runtime 和 harness 混着说。
如果一定要做个粗分,可以这样理解:
runtime更偏“把 Agent 跑起来的执行层”harness更偏“把执行层变成可约束、可观测、可治理系统的那层控制壳”
工程实践里,这两者经常写在一起、长在一起,边界未必绝对清楚。
但你只要记住一个重心就够了:
当大家开始谈 Agent Harness 时,关注点通常已经从“模型怎么答”转向“系统怎么让它做事”。
为什么这个概念值得单独学
因为一旦你接受了这个视角,很多看似零碎的设计就会突然连起来:
- 为什么有的 Agent 一定要先 ask for approval
- 为什么很多本地 Agent 强调 sandbox
- 为什么上下文压缩会成为主循环的一部分
- 为什么技能、记忆、日志、回放、评测都开始变重要
- 为什么多代理不是多开几个对话框,而是要有调度和边界
这些东西以前常被看成“配套细节”。
但在 Agent 时代,它们越来越像正戏。
模型像阿砚,是那个会想办法的脑子。
而 Agent Harness 更像北渡城的工坊:它决定这个脑子能看见什么、能碰什么、怎么记住、怎么试错、怎么停手、怎么把结果真的交出来。
所以最后可以把整篇文章压成一句话:
模型负责生成判断,Agent Harness 负责把这些判断变成一套可执行、可约束、可观察、可恢复的现实行动。
如果没有 harness,模型也许依旧聪明,但它更像一个会说出许多步骤的人。
有了 harness,它才更像一个真正能被托付差事的 Agent。
延伸阅读
- OpenAI 在 2026-01-23 发布的 Unrolling the Codex agent loop 把
Codex harness描述为提供核心 agent loop 和执行逻辑的那层系统 - OpenAI 在 2026-02-11 发布的 Harness engineering: leveraging Codex in an agent-first world 进一步把注意力放到边界、反馈回路和可治理性上
- Anthropic 的 Claude Code 产品页对“agentic, not autocomplete”以及权限控制、项目级执行有很直白的说明
- Anthropic 在 2025-10-16 发布的 Equipping agents for the real world with Agent Skills 解释了为什么真实 Agent 需要额外的程序性知识和可组合能力
