Tommy

Harness 与 Claude Code:从零理解,再深入拆解

Harness and Claude Code — From First Principles to a Deep Dive

· 10 min read
···阅读reads

引子:为什么模型选对了,agent 还是不好用?

很多人第一次搭 AI agent,都会陷入同一个执念:选模型。GPT 还是 Claude?Opus 还是 Sonnet?要不要等下一代?仿佛只要模型够强,agent 就会自动变好。

然后现实给了一记耳光:同样的模型,别人搭出来稳如老狗,自己搭出来动不动跑偏、死循环、改一个文件碰坏三个。问题出在哪?

答案是一个很多人没听过、但决定成败的东西——harness(框架 / 脚手架)。这篇文章就讲清楚两件事:harness 到底是什么、为什么重要;以及 Claude Code 作为一个具体的 harness,好在哪、边界在哪、该怎么学。

第一部分:建立直觉(写给初学者)

什么是 harness?

先说一个最关键、也最容易被搞混的概念:

大语言模型(LLM)本身不是 agent。 模型只会做一件事——给它一段文字,它接着往下生成一段文字。它不会自己读文件、不会自己跑命令、不会自己调 API、更不会”先想想再动手”。

那 agent 那些”会自己干活”的能力从哪来?来自包在模型外面的那层软件——这层软件就叫 harness。它负责:

打个比方:模型是发动机,harness 是整辆车。 发动机决定了这辆车的性能上限,但你能不能开着它顺利到达目的地,取决于方向盘、变速箱、刹车、导航——也就是 harness。一台 F1 发动机装在没有刹车和方向盘的架子上,还不如一辆设计良好的家用车能跑。

什么是 Claude Code?

这里要纠正第二个常见误解:很多人以为”harness”和”Claude Code”是两个并列的东西,可以二选一。

不是。Claude Code 本身就是一个 harness——它是 Anthropic 做好的、针对编程和智能体任务高度调优的一个具体 harness 实现。

Claude Code 是一个跑在终端里的 AI agent(现在也有 VS Code、JetBrains、桌面 App、网页版和 iOS 版)。你用大白话告诉它想要什么,它自己决定怎么做:读你的代码、跑 shell 命令、改文件、管理 git、调外部服务。换句话说,Anthropic 把上面说的那一整套”车”——方向盘、刹车、变速箱——都给你造好了,你直接上车开就行。

所以正确的对比不是”harness vs Claude Code”,而是:

用 Anthropic 造好的现成 harness(Claude Code) vs 自己造 / 用别的通用框架(LangGraph、AutoGen、CrewAI、OpenHands)

记住这个框架,后面就不会乱。

第二部分:那个反直觉的核心发现

如果这篇文章你只记住一句话,请记住这句:

harness 对 agent 实际表现的影响,常常比换模型还大。

这不是观点,是过去几个月一连串实验反复验证出来的结论。下面都是模型权重完全不变、只改 harness 得到的结果:

来源发现
斯坦福 & 清华研究同一底层模型,因 harness 设计不同,复杂多步任务上出现最高 6 倍的性能差距
Pi Research(Grok Code Fast 1)仅改了编辑工具的格式,SWE-bench 从 6.7% 跃升到 68.3%,模型没动
Vercel删掉 80% 的工具后,成功率从 80% 升到 100%,token 减半,延迟从 724 秒降到 141 秒
LangChain仅改 harness,Terminal-Bench 2.0 从 52.8% 升到 66.5%(从倒数冲进前五)
Princeton CORE-Bench同一模型,一个 scaffold 得 42%,换一个得 78%
SWE-bench Proscaffold 质量可在相同权重上造成 22 分的摆动——好 harness 的中端模型能打败差 harness 的前沿模型
Terminal-Bench 2.0同一模型在不同 harness(Claude Code vs OpenHands vs 自研循环)下摆动 30 到 50 个百分点

学术界已经把这件事提到了新高度。Preprints.org 上一篇综述《Agent Harness for Large Language Model Agents: A Survey》(系统梳理 110+ 篇论文)直接断言:随着 agent 任务变长变复杂,任务可靠性越来越不取决于底层模型的能力,而取决于包在它外面的执行 harness——harness,而非模型,才是真实世界 agent 系统性能的约束瓶颈

一句最精炼的总结来自 SWE-bench Pro 的分析:

模型代表性能天花板,harness 决定你能多接近那个天花板。

对初学者的启示很简单:别再纠结”用哪个模型”这一个旋钮了。你手上还有一个影响更大、却几乎没人优化的旋钮——harness。

第三部分:harness 由什么组成

理解了”harness 很重要”,下一个问题是:它具体在哪些地方影响 agent?把它拆开,主要是这几个机制。

1. 工具设计

工具的数量、描述质量、参数格式。反直觉的是——工具不是越多越好。Vercel 的案例就说明,工具太多反而让模型在选择间犹豫、误选;删减后反而更稳。工具描述写得好不好,本身就能造成任务完成率的可测差异。少而清晰,胜过多而模糊。

2. 循环与规划结构

agent 是不是有一个结构化的”规划 → 执行 → 观察”循环。研究显示,加入结构化规划循环带来的提升,比升级到更贵的模型还大。

3. 上下文管理

长会话里如何压缩、保留、检索历史信息。这是一个 agent 能不能撑过 4 小时会话、还是中途”失忆”的关键。

4. 失败处理与重试

出错了能不能捕捉、回退、换条路走。一个会”撞墙就停、换个思路”的 agent,远比”一条道走到黑”的强。

5. 输出校验

真正的 scaffold 会管理上下文、处理失败、校验输出;而只是个”wrapper”(薄薄包一层)的,会浪费掉模型大部分能力。

这五点合起来,就是为什么同一个模型能差出 6 倍。

第四部分:深入拆解 Claude Code 这个 harness(写给实践者)

现在把镜头对准 Claude Code,看 Anthropic 是怎么把上面这套东西做成开箱即用的。它的护城河其实不只是模型质量,而是模型周围的编排面:项目记忆、工具访问、子智能体、自动化钩子,以及一套已经贴合开发者真实工作流的 loop。

Claude Code 把能力分成五个层次,每一层的”上下文成本”不同——这是它设计的核心逻辑:

是什么何时加载用来放什么
CLAUDE.md项目规则 / 记忆始终加载每一轮都必须为真的规则(“跑完测试再说完成”)
Skills可复用工作流(SKILL.md 文件夹)调用时才加载 body偶尔才需要的流程(部署清单、调试 playbook)
MCP servers接外部工具和数据按需连接内部 API、数据库、第三方服务
Subagents隔离上下文的子智能体派生时获得独立上下文嘈杂的研究 / 审查工作
Hooks生命周期事件上的确定性脚本工具调用前后、会话起止时触发安全检查、强制规则

这个分层有个朴素但好用的判断法则:如果一条指令必须对每一轮都成立,放进 CLAUDE.md;如果是只是偶尔需要的流程,做成 skill;如果是必须强制执行的脚本,做成 hook。

几个值得实践者重点关注的点:

Hooks:确定性 vs 概率性的分界线。 这是 Claude Code 一个很有哲学意味的设计。Hooks 是事件驱动的确定性脚本,不像依赖模型”理解”的 prompt——它们不会幻觉。没有 hooks,你的每一道安全防线都依赖模型听懂你的话;有了 hooks,你在系统层强制执行规则(比如在 rm -rf 真正执行之前就拦截掉)。该交给模型判断的交给模型,该用代码兜底的用代码兜底——这是搭生产级 agent 的核心心法。

Subagents 与 Agent Teams:编排的下沉。 Agent Teams 是由一个主 agent 协调的一群专门化子智能体,每个子 agent 有自己独立的上下文窗口、prompt 和工具权限。主 agent 负责规划与整合,专门 agent 各管一摊有边界的活——代码审查、跑测试、前端 QA、安全扫描。这恰好和 Claude Opus 4.8 的 Dynamic Workflows(可并行启动大量子 agent)是配套的:过去要你自己实现的多 agent 编排,现在变成了框架原生能力。

Plugins:团队复用的单位。 Plugin 把 skills、subagents、slash commands、hooks、MCP server 定义打包成一个可安装单元,是团队之间共享 Claude Code 扩展的规范方式。对带团队的人来说,这是把”个人最佳实践”变成”团队标准”的关键。

一句话概括 Claude Code 的设计哲学:loop 是本地且具体的,subagents、MCP、hooks、skills 都是在扩展这个 loop,而不是替代它。

第五部分:Claude Code vs 自建 / 通用 harness

回到那个正确的对比框架。两条路各有取舍:

维度Claude Code(现成 harness)自建 / LangGraph / AutoGen / CrewAI
上手成本极低,装好即用,loop 已调优高,循环、上下文、重试都要自己设计
模型绑定锁定 Claude 系列模型无关,可接开源模型 / 本地部署
控制粒度中——开放扩展点,但 loop 本身是黑盒完全——每一步状态、分支、回退都可编程
可观测 / 定制受限于官方暴露的接口任意插桩、任意持久化、任意编排拓扑
编码场景成熟度极高取决于你的投入
非编码 / 业务场景偏编码,做业务 agent 需要绕通用,天然适配任意领域
生产部署可无 TTY 一次性运行(适合 CI/CD)运行时自己掌控,但要自己搭

怎么选?一个实用的分界:

关键是:这两者不冲突,是不同的层。 你完全可以用 Claude Code 来开发那个最终跑在 LangGraph 上的业务 agent。开发期的 harness 和运行期的 harness,可以是两个东西。

第六部分:重要的反面——harness 不是万能的

这一节很关键,因为前面的数据太亮眼,容易让人走向另一个极端:“模型不重要了,全靠 harness”。这是错的。

两种效应都真实,只是在不同场景下主导:

一方面,harness 改动确实能带来巨大提升(Vercel、LangChain、Harvey 法律 agent 准确率翻倍)。但另一方面:Scale AI 的 SWE-Atlas 发现,对某些模型族,harness 的选择落在误差范围之内;METR 的基准也显示,Claude Code 和 Codex 并不总能稳定胜过一个基础 scaffold。

规律是:harness 的边际收益,在”任务长、多步、易失败”的场景最大;在短任务、定义清晰的场景里,模型能力本身就够用,harness 的差异被淹没。

还有一个对所有人都该警醒的发现,来自 METR:通过基准测试的 PR,比真实可被合并进主干的 PR,人工合并率低了 24.2 个百分点,而且这个差距还在以每年 9.6 个百分点的速度扩大。 翻译成人话:

benchmark 跑得漂亮,不等于真能落地。

所以无论你最后选哪条路,都要记住:在你自己的真实任务上测,而不是看排行榜。 赢了你的 benchmark 的那个配置,未必赢得了你的周二上午。

第七部分:技术人员该学什么

最后落到行动。学习路径分两条——一条是”harness 这件事的本质”(可迁移,换任何工具都有用),一条是”Claude Code 这个具体工具”(立竿见影的杠杆)。

学 harness 的本质(给所有人,尤其想走深的人)

  1. 上下文工程,而非 prompt 工程。 学会在长会话里压缩、保留、检索状态。这比背 prompt 模板重要一个量级。
  2. 工具设计的”少即是多”。 学会写清晰的工具描述、控制工具数量、设计好参数 schema。记住 Vercel 那个”删 80% 反而更好”。
  3. 失败处理与控制流。 重试、回退、何时停下来问。这是 LangGraph 这类图式 harness 的真正价值。
  4. 确定性 vs 概率性的边界。 哪些事交给模型判断,哪些事用确定性代码(hook)兜底。
  5. 评测的有效性。 记住 METR 那个数据——永远在真实 loop 里验证。

学 Claude Code 的杠杆(给实践者)

业界和资深用户的共识是:掌握五个核心系统就能解锁生产力倍增——配置层级、权限、hooks、MCP、subagents;并且一条铁律是:需要永远执行的事,用 hooks,而不是 prompt。

建议的上手顺序:

  1. CLAUDE.md + 权限——把项目规则和安全边界立起来。
  2. MCP——把你的内部系统、数据库、私有 API 接进来。
  3. subagents + hooks——把代码审查、跑测试、安全扫描做成专门 agent 和确定性钩子。
  4. 最后 Plugins——把这套打包,在团队里复用,变成团队标准。

一个比读十篇文章更有用的练习

如果你既想搞懂理论、又想形成自己的判断,做一次刻意的横向实验:

选同一个真实任务,分别用 Claude Code 的 subagents、用 LangGraph、用 CrewAI 各跑一遍。记录四个维度:token 消耗、轮次、可靠性、可调试性。

一次这样的实验,胜过读十篇对比文章。它会让你对”harness 选型如何影响 agent”这件事,从”听说”变成”知道”。

结语

AI agent 这两年的故事,正在从”模型竞赛”悄悄转向”系统竞赛”。模型的能力上限固然重要,但决定你能不能真正用上这份能力的,是那层常被忽略的脚手架。

对初学者:别再只盯着模型的旋钮,认识到 harness 这个更大的旋钮的存在,你就已经领先大多数人了。

对实践者:Claude Code 给了你一辆造工精良的车,但真正的功力,在于你懂得它的方向盘、刹车和变速箱各自该在什么时候用——以及,知道什么时候这辆车并不适合你要走的路。

模型决定你能走多远,harness 决定你能不能走到。

展开评论Show comments