结合 claude code 源码,可以把 Harness Engineering 理解成:

不是“把模型拴上”,而是把“模型所需的工作空间、行动边界、反馈链路、长期状态”工程化。

具体而言:

  • Context Engineering 解决的是:模型这一步看到了什么
  • Harness Engineering 解决的是:模型这一步能做什么、怎么做、做到哪一步停、失败后怎么恢复、结果如何验证

看了 Claude Code 源码后,我认为:

Harness Engineering = Context Engineering + Tool/Permission 协议 + Agent Loop + 状态/恢复 + 验证/反馈 + 子智能体编排

———

Claude Code 是怎么做 Harness 的

1)先给模型造“工作空间”

Claude Code 不直接把用户的问题发给模型,他会先拼运行上下文:

  • system prompt 由很多 section 组成:session guidance、memory、环境信息、语言偏好、输出风格、MCP 指令、scratchpad、tool result 总结规则等
  • 把环境细节补进 prompt,比如 cwd、OS、shell、额外工作目录,以及“子 agent 必须用绝对路径”这类执行约束
  • 加载项目内的 CLAUDE.md、.claude/CLAUDE.md、.claude/rules/*.md ,作为模型的项目记忆/规范
  • 统一组装 systemPrompt + userContext + systemContext

这一步就是 workspace construction:把 repo、规则、环境、记忆变成可用的“工作空间”。

———

2)定义“它能做什么”

Claude Code 给工具做了完整的能力装配:

  • 内建工具 + MCP 工具会统一组装成 tool pool
  • deny rule 会在调用之前先把工具从模型可见范围里剔掉
  • 为了 prompt cache 稳定性,cc 会对工具排序

这一步很关键:
Harness 不只是 prompt,还包括 capability surface 的设计。

———

3)给行为加边界:权限、审批、策略

在 CLI 源码中,权限系统非常像 harness 的“边界层”:

  • 每次 tool use 都会进入 permission context,支持记录决策、持久化权限更新、会话级规则变更
  • bash 之类会先走 classifier 自动审批
  • 运行 permission hooks,让策略先改写/拒绝请求
  • 交互态下,本地 UI 和 bridge 远端审批会竞争响应,谁先批准谁生效
  • swarm worker 模式下,worker 会把权限请求转发给 leader

这说明 Claude Code 的 harness 不是“模型自己决定一切”,而是:

模型负责规划,harness 负责定义可行动作的协议与边界。

———

4)核心是 agent loop

Claude Code 真正的 agentic 核心在 query() / queryLoop():

  • 它维护多轮状态、消息、turn count、预算、compact 状态等
  • 它让模型在 loop 里决定“继续说 / 调工具 / 接收结果 / 再规划”
  • 当 token budget 没打满时,系统还能自动追加 continuation nudge,逼着 agent 继续工作

所以这不是传统的 workflow automation,而是:

一个由模型驱动、由 harness 托底的多轮执行循环。

———

5)成熟 harness 一定支持 long-running

Claude Code 把“长期运行”当一等公民:

  • 当前主会话可以被后台化成 task
  • 会话可恢复,文件历史、attribution、上下文折叠状态都能从日志恢复
  • /resume 会恢复 session id、录屏、cost state、context collapse snapshot
  • 上下文太大时会 compact/microcompact
  • 可以分析当前 context 使用情况

这就是 Anthropic 的“long-running harness”相关文章说的东西:
不是让 agent 跑久,而是让它跑久了还不崩、能恢复、能继续。

———

6)反馈与验证也是 harness,不是附属品

“反馈”在流程中很关键很关键,源码中体现在:

  • 每轮结束后会跑 stop hooks,拿当前消息、system prompt、上下文去做 turn-end 检查/后处理
  • 内置了一个 verification agent,要求它独立跑 build/test/lint、做 adversarial probe,并且必须给出 VERDICT: PASS/FAIL/PARTIAL

实现 agent ≠ 验证 agent;验证本身也被产品化成 harness 的一部分。

———

7)成熟 harness 会做角色拆分

Claude Code 不是一个大一统 agent,它会造专职的子智能体:

  • Explore agent 被限制成只读搜索型,不允许编辑/写文件,甚至可以省掉 CLAUDE.md
  • runAgent() 会给子 agent 创建独立上下文、消息、状态和 transcript

这个可以理解为“相关上下文模块”:
不同 agent,不只是 prompt 不同,连工具权限、记忆范围、工作目标都不同。

———

所以,Claude Code 里的 Harness Engineering,本质是什么?

总结:

Claude Code 的完善,不在于 prompt 写得多,而是它把“上下文、工具、权限、执行循环、恢复、验证、分工”全部做成了一个可持续运行的系统。

Harness Engineering 就是把 LLM 从“会回答”变成“能在真实环境里稳定工作”的那层运行时工程。

在这里插入图片描述

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐