Harness:控制 Agent 的执行过程
模型说“运行 npm test”,这句话本身不会让任何测试跑起来。真正去跑的,是包在模型外面的那层软件:Harness(控制层)。假设一个 Harness 这样处理这条请求:先查 npm test 在不在允许运行的命令清单里,再把它放进一个限时 5 分钟的子进程;跑完以后,把退出码和最后 200 行输出交回模型,同时写进日志。如果进程中途崩溃,下次就从日志里这条记录接着来。
这一步里,模型只提出了下一步动作,Harness 则让这个动作真的能执行、不越界、事后查得到、出了错能接着做。所以 Harness 不只是聊天界面,它把模型、代码仓库、终端、权限和验证流程连在了一起。
Harness 至少要管八件事
下表把八项职责都落在同一个 npm test 请求上。
模型说“测试都过了”不算数:可靠的 Harness 自己去看 npm test 的退出码,再决定停不停。怎样把这种外部验收接进循环,见有界 Agent 循环。
设计 Harness 时按这个顺序来
- 定义结果和外部成功检查,比如“
npm test退出码为 0”。 - 暴露最小的有用工具集。本地小模型更离不开这一步:迭代要短,工具要少,返回的输出要有长度上限。
- 将只读操作与写入和不可逆操作分开。
- 在对话记录之外保存产物和证据。
- 添加时间、Token、重试和并发限制;停止条件和断路器的细节见有界 Agent 循环。
- 在保护敏感数据的前提下追踪模型回合与工具调用。
- 更改默认模型、Harness 或推理级别前,先重放有代表性的任务。
判断结果能不能交付的检查,比如测试、权限和端到端验收,属于 Harness 和工作流;模型则可以换。变化快的模型与定价信息放在模型与 API 选型雷达,公开测试结果和各工具的故障模式记在挑选 AI 编码 Agent。更强的模型也许能减少重试,但证据、权限和端到端检查一样都省不掉。
这些控制在 Claude Code、Codex 和 Pi 里放在哪
买来的编码 Agent 已经替你实现了上面大部分职责,要调的是它们的开关。下表按 2026-10-29 的官方文档整理;Pi 按 1.4.0。
同一个“沙箱”在三者里管的范围不同,例如 Claude Code 的沙箱打开后仍能读 ~/.ssh。动手前先看 Agent 安全里的对照和起步配置。