图解精读 腾讯云开发者 · 魏依承 · 原文约 12,000 字

模型越来越强,
harness 该留下什么?

一个团队删掉了自家 agent 框架 61% 的内容,同一时间 Anthropic 删掉了 Claude Code 系统提示词的 80%。两边独立收敛到同一个结论——这篇讲的是那个结论。

本轮减记Write-down
tdsql-harness 根指令删到只剩 6,400 字符
−61%
Claude Code 系统提示词编码评测无可测量损失
−80%
skill 数量与 agent 数量(10 → 6)
−40%
删的过程中反复在问同一个问题——这一条,到底还有没有用?整篇文章就是这个问题的答案。
01

核心命题

整篇文章只有这一句,其余全是它的推论

harness 里的每一个组件,都编码了一个关于「模型自己做不到什么」的假设——而这些假设会随着模型变强而过期。

Anthropic《Harness design for long-running application development》

把这句话反过来读,问题就清晰了:你 harness 里的每一条,都在赌一件模型做不到的事。问题只是这个赌注什么时候到期。

所以真正的工作不是「精简」,而是识别哪些赌注已经到期、哪些永远不会到期。这个区分一旦建立,后面所有的具体建议——删什么、怎么写、留什么——都能自己推出来。

而区分的判别式只有两条,简单到可以背下来:

拿出 harness 里的任意一条 问:它为什么存在? EXPIRES 「模型记不住」 「模型不会主动做」 「模型容易漏」 HOLDS 「只有我们团队知道」 「只有人能承担后果」 → 永不过期,且越积越厚
用法:左边那三条理由,只要出现,这条规则就已经在到期队列里排着了,只是还没轮到。你现在能做的,是给它绑一个具体的失败模式,好让轮到的时候你认得出来。
02

四层归属:判断一条内容保不保值

全文最实用的结构,也是原文里那张图

「这些东西以后会不会被模型内化掉」——这个问题没有统一答案,一概而论地回答「会」或「不会」都不对。得分层看。

L0 模型默认就会的事 目录结构、架构概览、技术栈描述、复述默认行为的 skill 已被内化 L1 通用 agent 脚手架 执行循环、状态管理、subagent 编排、上下文管理 平台会吸收 L2 组织特有的流程与内部工具 内部系统接入、封装脚本、固化的操作流程、模块 gotcha 迁移,不消失 L3 验收标准与授权边界 什么算做完、价值排序、主观标准、不可逆动作的授权 永不内化 灰 = 随模型变强而贬值  青 = 长期保值
关键观察:作者删掉的 61% 全部落在 L0 和 L1;剩下的 6,400 字符全部落在 L2 和 L3。Anthropic 删剩的那 20% 也一样——按他们自己的描述,剩下的是产品级上下文、团队意见、gotchas、验证 skill、安全边界。两边独立收敛到了同一处。
最常见的错配

力气全花在 L1 上

很多团队自建 harness,重写自己的执行循环、设计自己的 workflow 引擎。而 L1 恰恰是最会被平台原生吸收、最不保值的一层——Claude Code、Codex 每个版本都在往里吸收这些能力。

那是投入最大、贬值最快的地方。

注意 L2 的措辞

是「迁移」不是「消失」

L2 不会被模型内化,但会从指令层沉降到工具层——变成 linter 规则、测试用例、CI 门禁。

一条容易记的分工:指令层的强度取决于模型当下怎么读它;工具层不取决于。所以能表达成工具的,就别留在指令里。

有个很干净的检验方法:把「换一个团队,这条会不会不一样」套上去。L2 和 L3 的答案全是「会」,L0 和 L1 的答案全是「不会」——所以 L0 与 L1 注定由模型和平台提供。

03

为什么现在必须删

原文第一部分 · 冗余从「中性」变成了「负数」

如果只把这轮变化理解成「精简一点更好」,就错过了最重要的部分。

在弱模型时代,多写一句话最坏的结果是浪费 token;今天,多写一句话可能覆盖掉模型自己更好的判断。这是性质的变化,不是程度的变化。

过度规定流程会引入噪音、缩小模型的搜索空间,或者导致机械化的回答。

OpenAI · GPT-5.5 prompt guidance

「缩小搜索空间」是这轮变化的技术内核:你写下的每一条路径规定,都在从模型可选的方案里剪掉一部分。当模型比你更清楚哪条路好走时,这个剪枝就是净损失。

3.1三个字面执行陷阱

这三条最值得抄下来贴在显示器上,因为它们都是很多人正在写、而且自以为无害的写法。

陷阱一 · 程度副词

「保守一点」「只报高危问题」

在人类之间这是个程度副词;在指令遵循能力足够强的模型那里,是一条会被严格执行的规则。你以为在调节风格,实际在削减召回。

官方给的正确做法:让它全报,然后另开一轮过滤

陷阱二 · 强调语

CRITICAL: You MUST use this tool when…

过去为了让模型可靠调用工具,大家习惯这么写。现在官方建议降级成普通的 Use this tool when…——新模型对系统提示词更敏感,激烈措辞会导致过度触发

同理,If in doubt, use [tool] 这类兜底句现在是过度触发的主要来源。

陷阱三 · 负面指令

「不要思考 / 不要推理」

这类规则官方要求直接删掉——它反而会增加内部标签泄漏到可见输出里的概率。而且「点名负面项」比「笼统表述」效果更差。

正面替代:与其写一堆「不要怎样」,不如给一个你想要的样子的正面例子。

注意官方的处置建议是「删除」,不是「改写」。Anthropic 的文档里甚至直接点名了 legacy harness scaffolding(遗留的 harness 脚手架)——那是在明确告诉你:你 harness 里那些旧脚手架该拆了。

3.2最干净的案例:prefill 消失了

上面几条都还停留在「建议」层面。prefill 不是建议,是既成事实。

prefill(预填充助手回复的开头来强制输出格式,比如先塞一个 {"result": 逼模型接着输出 JSON)是个存在多年的标准技巧。从 Claude 4.6 开始,这个能力从 API 层面直接移除,带 prefill 的请求返回 400。

官方理由只有一句:模型智能和指令遵循已经进步到大多数 prefill 场景不再需要它。

这是「脚手架消失」最干净的一个样本,也点破了这轮变化的性质——脚手架不是被优化掉的,是它防御的那个问题不存在了。

04

那该怎么写:五道关卡

原文第二部分 · 全文最能直接照做的一节
1 该不该写 读代码能 找到就删 2 怎么表达 规则换成 判据 3 给多大自由度 路径放开 验收收紧 4 怎么验证 先建裁判 再写内容 5 往哪里退 沉降到 工具层 最省力的优化是不写 —— 所以第一关永远是「这一条到底该不该存在」
五关是一条流水线:前两关决定内容,第三关决定边界,第四关决定怎么知道自己写对了,第五关决定这条内容最终应该住在哪一层。

4.1第一关的真正代价:你在制造第二个事实来源

大家精简 prompt 时想的通常是省上下文预算,但真正的代价在别处:

你加了一个文件,agent 读了它,然后又去读真实代码确认一遍,现在它得调和两个事实来源。

Addy Osmani · Stop Using /init for AGENTS.md

代码会变,你写的那份描述不会跟着变。当两者不一致时,agent 要么信了过期的那份,要么花额外的推理去判断该信谁。过期的文档比没有文档更危险。

配套的删除判据非常好用——这条信息,agent 读你的代码库能不能找到?能找到就删。按这条:目录结构、架构概览、技术栈描述全该删;而「用 uv 管理依赖」「跑测试必须加 --no-cache,否则会有假通过」这类要留,因为读代码找不到。

作者团队还有一条可以逐行机械执行的判据,比抽象提醒好用得多:一个没有本次会话记忆的 agent 读到这一行,行为会怎么变?答不出来就删。用它扫一遍,三类东西必然出局——元评论(「这里以前出过 bug」)、自我辩护(「这就是本 skill 存在的理由」)、防御性否定(「这不是指某某」,为了澄清反而把被否定的概念引入了上下文)。

4.2第三关:最容易被误读的一关

前面一直在讲「少写、别规定路径」,很容易被理解成另一个极端:那就什么都别写,全交给模型。这是放羊,不是放权。

你必须写死 目标结果 成功判据 约束条件 3 / 4 留给模型 路径 先做什么、用什么方法、 分几步、要不要开 subagent 1 / 4 「给目标而不给步骤」不等于写得更少 —— 是把笔墨从「怎么做」挪到「怎么算做完」
而且判据必须能被机械判定。「代码质量要好」不是判据,它产不出任何证据;「测试变绿 / 产物存在 / diff 为空 / 命令 exit 0」才是。没有证据,这一步就不算完成。

关于绝对措辞,OpenAI 给了一条很实用的分界线:把 MUST / NEVER 留给真正的不变量;判断题——何时搜索、何时追问、何时用工具、何时继续迭代——一律改写成决策规则。

按这条线,作者团队 harness 里保留绝对措辞的地方只剩一类:不可逆动作。commit、push、MR 合入、deploy、workspace 之外的删除。这些是真正的不变量,写死没有代价。其余全部改成了判据。

4.3第四关的副产品,比它本身更重要

官方要求:在写大量文档之前,先建评测。五步是——不带 skill 跑一遍记录具体失败(不是「效果不太好」,是「它在第三步漏掉了 X」)→ 针对 gap 建三个评测场景 → 建立 baseline → 写刚好够填补 gap 的最少内容 → 迭代对照。

注意「最少内容」的定义方式:不是靠写的人自己把握分寸,而是由评测反推——能让评测从不通过变成通过的那些内容就是必要的,多出来的都是待辩护的。这也是为什么 Anthropic 敢一次删掉 80%:删了会不会坏,不是靠判断,是靠跑出来的。

但这套流程真正的价值在它的副产品:每条规则天然绑定了它防御的那个具体失败。这一点直接决定了你能不能在未来删掉它。

05

什么值得留下

原文第三部分 · 两类资产的分野

把删掉的和留下的并排放,harness 里的内容其实分成了两种资产:一种每次模型升级都要减记一次,另一种越积越厚而且没人能替你积。

减记资产 · Depreciating

补模型能力缺口的部分

L0 + L1 · 过去一年真实到期的脚手架

  • context resets(上下文重置)
  • 任务分片与手工编排
  • prefill 强制格式
  • CoT 诱导(「请一步步思考」)
  • self-check / 显式验证指令
  • CRITICAL 类强调语
  • 穷举式禁令与流程规定
几条已经从「多余」反转成了「有害」
保值资产 · Compounding

只有你们知道 / 只有人能承担

L2 + L3 · 删剩的 6,400 字符只有这四类

  • 什么算做完(成功判据与验收)
  • 哪里必须停下来找人(gate 与升级条件)
  • 状态放在哪(跨 session 恢复的约定)
  • 什么不能自己做(不可逆动作的授权边界)
  • 内部系统的接入能力(MCP、封装脚本)
  • 模块 gotcha 与运维坑
  • 独立 reviewer 与跨模型校验
Anthropic 删剩的 20% 也落在这里

5.1L3 永不内化的两条理由

理由一

信息不可达

价值排序、私有 context(三年前那个模块为什么要那样设计)、主观 oracle(什么样算好看)——这些信息物理上不在模型能到达的地方

不在公开语料里,否则每个组织都会是一样的答案;也不在你的 repo 里,否则 grep 就能拿到。这不是智力问题,是信息可达性问题。

理由二 · 更硬

责任不可转移

第一条理由有个漏洞:信息不可达,理论上可以靠「把信息补齐」来缩小。第二条堵住了它。

只有人能继承后果。你可以让 agent 在 policy 内安全地做选择、路由、合并、升级,但它无法继承后果。这不是能力问题也不是信息问题,是社会结构问题——出了事,被问责的是人。连理论上都无法被技术进步消解。

5.2为什么所有 CLAUDE.md 都只增不减

这一节回答了一个很普遍的现象。根因不是懒——是这些规则当初就没写清防的是什么,所以谁也不敢删,因为谁也判断不了它是否还有用。文件于是变成一堆没人说得清是否还起作用的历史包袱。

说不清防什么的规则,从写下来的那一刻起,就已经无法被淘汰了。

这句话是全文最该记住的一条工程纪律

所以「面向未来设计」唯一可执行的形态不是「留个接口、留点余地」(那是猜测,而且猜错代价很高),而是——你预测不了模型什么时候会内化某条规则,但你可以让「已经被内化」这件事变得可检测。做法就是给每条规则绑定它防御的具体失败模式。

Addy Osmani 把这叫「棘轮法」:只在观察到真实失败之后才加约束,规则必须能追溯到真实发生过的错误,而不是猜测。

5.3一类不会消失的东西:结构性偏差

除了 L3,还有一类容易被漏掉——因为它不是能力缺口

模型自评时会自信地夸奖自己的作品,即便在人看来质量明显平庸。这不是「模型不够聪明」,而是评价者与被评价者是同一个造成的结构性问题。用 Addy 更直白的说法:写代码的那个模型给自己的作业打分,实在是太宽容了。

结论:独立 reviewer 和跨模型校验的价值,不随模型变强而衰减。需要补充一个精确的观察——Anthropic 的实测是 evaluator 的价值边界只是外移了:以前需要 QA 复核的任务现在模型能自行完成,但复杂应用仍然从独立评审中获益。是边界移动,不是价值消失。

06

度:自主度的上界

「面向未来设计」与「不能无条件信任」之间的平衡点

你能交给一个循环的自主度,上限就是你能廉价且可靠地验证的那么多——一寸都不能多。

Addy Osmani · back pressure
你的验证能力(多快知道错了 · 多干净能撤销 · 什么能证明对了) AUTONOMY CEILING 安全放权区 认知债累积区 代码干净、测试全绿,但没人真正理解它
注意这个上界绑定的是「验证能力」,不是任务重要程度,也不是模型能力。一个很重要的任务,如果验证成本低、错了能回滚,反而可以给高自主度;一个不起眼的任务,如果错了发现不了,就不能放手。

顺着这条线还有一个更大的背景:验证,而不是生成,才是真正的瓶颈。启动一个 agent 只要一句话,但收口一个 agent 一点也不便宜。当生成速度超过你能有意义地验证的速度,积累的就是认知债

这种债最麻烦的地方在于它不像技术债那样通过摩擦暴露自己——它滋生的是虚假的信心。

这条上界还有一个直接推论落在 gate 的设计上:gate 的数量上限,等于人能真正判断的数量上限。人在 gate 面前会退化成快速点头,所以对策不是减少 gate,而是让每个 gate 便宜到能真判——把需要裁决的事项、证据和推荐前置,全文和 diff 作为可选读的附录。一个人判不动的 gate 等于没有 gate,而且更糟:它制造了「已经审过」的假象。

07

术语速查

原文默认你懂的几个词
harness
模型之外的一整套运行环境。它决定 AI 能看到什么、能做什么、不能做什么、做完后如何验证、出错后如何修正、什么时候交还给人。
skill
按需加载的指令包。只有元数据(名字和描述,约 100 token)常驻上下文,正文在被触发时才读进来。
渐进式披露
上面那个机制的名字。好处是你可以装几十个 skill 而不撑爆注意力预算。
prefill
预填充助手回复的开头来强制输出格式。Claude 4.6 起从 API 移除,带 prefill 的请求返回 400。
gate
必须停下来交给人裁决的检查点。设计原则见第 06 节。
判据 vs 规则
规则是穷举式禁令,判据把边界判断交回给模型。判据更短但覆盖的情况更多,因为模型读得到上下文,而你写规则的时候读不到。
棘轮法
只在观察到真实失败之后才加约束,不靠猜测。规则必须能追溯到真实发生过的错误。
意图债
技术债在代码里;认知债是系统超出团队理解的部分;意图债则存在于那些你从未写下的东西里——目标、约束、以及系统为什么是现在这个样子的理由。
context rot
上下文越长模型越容易迷失。每多塞一个 token,其他 token 分到的注意力就少一点,重要信息被稀释。
08

能直接用在自己的 agent 上的六条

不带团队也成立的部分
  1. 工具接口设计优先于用法示例。与其在 prompt 里举例子,不如把状态字段枚举成 pending / in_progress / completed——枚举本身就在引导正确用法。对足够强的模型,示例反而会成为约束,因为它比你给的例子更有想象力。
  2. 给每个工具写退出条件,不写步骤。「做完 X → 拿出证据 → 达标才继续」。证据是测试结果、日志、文件是否存在,不是模型说「我做完了」。
  3. 别让模型给自己打分。这是结构性问题不是能力问题。做事的 agent 和评估的 agent 要分开;调教一个独立评估者变得更怀疑、更严格,比要求生成者对自己保持批判容易得多。
  4. 不可逆动作写死绝对措辞,其余全改判据。commit / push / deploy / 删除 是真正的不变量,写死没有代价。
  5. 每加一条规则,先写清它防的是哪个具体失败。写不出来就别加——你连它什么时候该删都判断不了。
  6. 能沉降到工具层的,就别留在指令层。linter、测试、CI 门禁比任何措辞都可靠。指令层的强度取决于模型当下怎么读它,工具层不取决于。
09

回原文时的跳读指南

哪些值得细读,哪些可以直接翻过去
跳过
1.1 两家头部厂商收敛到减法 —— 就一句话的信息量:Anthropic 和 OpenAI 独立走到了同一个方向。
细读
1.2 冗余从中性变成负数 —— 全文的技术内核在这里,「缩小搜索空间」那段值得读两遍。
细读
第二部分全部五关 —— 最能直接照做的一节,尤其 2.1 的删除判据和 2.3 的路径/验收之分。
细读
3.1 / 3.3 / 3.4 / 3.5 —— 赌注框架、如何检测过期、四层归属、L3 的两条理由。整篇的论证骨架。
跳过
3.6 官方给出的留与删 —— 佐证性质,观点在 3.4 已经讲完了。
跳过
3.8 大部分 —— 讲团队为什么要自建 harness、内部打通了哪些系统。不带团队的话用处有限,但「agent 不只是知道怎么做,而是能做」那个区分值得瞄一眼。
细读
第四部分 —— 很短,是全文的收束,两条判别式都在这里。

另外提醒一句:原文里有十几处关键内容是图片——四层归属图、到期清单表、删除类型归纳、注释规则的 before/after 对照。本文里的四层模型和到期判别式是从图片周围的文字反推出来的,逻辑成立,但如果你要引用具体分类项,最好回原文对着图看一遍。

如果只挑一篇一手原文读,选 Anthropic 的 The new rules of context engineering for Claude 5 generation models——删掉 80% 的来龙去脉、六个转变、以及规则→判据的 before/after 对照都在里面。