CLAUDE CODE · 2026 · 详尽总集图号 GP-HARNESS-01 · 施工手册

模型是支点,
harness 才是杠杆

Claude Code 把 agent 主循环替你写好了,循环之外那一圈得你自己搭。同一个 Claude,这一圈搭得好不好,决定它是只能改几行的工具,还是能扛 70 万行遗留系统的开发者

项目用好 Claude Code 的 harness 图别施工总说明 · 共 0–4 层 审核承重数字逐条事实核查 日期2026-06 · 版次 v3
支点 · 模型(给定) harness(你配的) 产出上限 ↑ 杠杆臂 = 本文第 0–4 层,逐层加长
GenAI Playbook · 十余篇 Claude Code 使用经验的整合 · 读完这一篇,不必再回头翻那十余篇
为什么先搭 harness

同一个模型,
环境决定它的上限

把 Claude 当一名新入职开发者认真接入,原本搁置的工作会重新推进;而模型本身的能力又确实是天花板。两面合起来:harness 是可调的杠杆,模型是固定的支点。支点换不了,能动手的只有杠杆。

两周
华盛顿大学 Skyline:搁置一年的功能两周完成;停更三年的夜间测试不到一天重启
11 天
用 Workflow 把 Bun 从 Zig 迁到 Rust,约 75 万行,测试通过率 99.8%
43→84%
同一套 harness 只换模型,compaction 质量从 Sonnet 4.5 升到 Opus 4.6

一条贯穿全文的纪律:harness 会随时间失效。模型一升级,此前搭的脚手架可能反成负担。所以下文每介绍一层,都要同时想它的退役时机,这点留到结语。

先把范围说清楚

这篇只讲「配 Claude Code」

Claude Code 提供的是 Anthropic 已实现好的主循环,无需自己编写 agent 主循环。本文只讨论一件事:这个现成框架该怎么配。三类东西不要混:①模型给的(改不了,第〇层)、②你配的(本文主体)、③你从零建的(不在本文范围)。

▸ ②配 Claude Code(本文主体)

底座选型、上下文管理、知识与工具的搭建顺序、用 subagent 与 Workflow 编排、把验证独立出来。全是在 Claude Code 里只配不建的东西。

另有 ①模型能力:给定项,改不了只能绕,是 harness 的地基(第〇层)。

▸ 不在本文范围:从零搭 agent

prompt caching 设计规则、MCP server 实现、面向 agent 的命令行、单 loop 与多 agent 架构取舍、把产物改造成可验证接口。这些是用 API/SDK 从零搭 agent 才会碰到的。

遇到此类内容本文只点到为止、标明「不在本文范围」,不展开。

全文施工图 · 点任意一层直达

五层,自下而上

0 · 地基:模型能力给定项 · 只能认不能改 1 · 上下文:唯一真正在管的资源5 分支点 2 · 知识与工具:7 层施工图CLAUDE.md → MCP 3 · 编排:计划该交给谁subagent / Workflow 4 · 验证:生成 ≠ 评估独立 Evaluator 实战 · 70 万行接入 + 结语 · 边搭边砍 施工顺序 · 自下而上
每层建立在下一层之上:地基认清了再管上下文,上下文管好了再添知识工具,然后才谈编排与验证。左侧导航全程跟着你,读到哪层亮哪层。
0Sheet 00 · 地基①模型能力 · 给定项,不是你搭的

第〇层:你绕不开的地基

这层不是搭出来的,是给定的。但要先认清它,因为它决定了 harness 能精简到什么程度。

0.1上下文窗口与 context rot

窗口是 100 万 token(系统提示词 + 完整对话 + 所有工具输出 + 已读文件),但窗口大不等于可以随意填。

窗口容量 噪声占比 ↑(旧的、无关的) 可用注意力 / 信号 ↓ 0 token 1M token
注意力机制的固有特性,不是 bug:上下文越长,信噪比越低。1M 不是用来塞下一切,是让单个任务更可靠地完成。

实用 tip:给状态栏装个 context 进度条。不用反复敲 /context 打断手感,剩多少窗口一眼可见:

claude — acme-monorepo
› 把 payments 服务改成用新的 ledger 客户端
Read services/payments/ledger.ts (+2.1K tokens)
Edit services/payments/charge.ts
~/acme-monorepo⎇ mainopus-4.8 · xhighcontext720K / 1M · 72%
这条就是插件加在状态栏的东西:剩多少窗口实时可见。过了七八成它会从绿转黄变红,提醒你该 /compact 或开 subagent,不用再敲 /context 打断手感。
0.2选对模型,本身就是 harness 设计

当前最强编码模型是 Opus 4.8,但比版本号更重要的是几条不随升级过期的原则。

A
effort 默认 high,编码请手动调到 xhighOpus 4.8 在所有界面(含 Claude Code)都默认 high,这是质量与体验的平衡点。但官方明确推荐:编码、agentic、长时异步任务设到 xhighhighmax 之间)。max 留给极难问题,易过度推理、token 失控,收益递减。(4.7 时 Claude Code 默认就是 xhigh,4.8 改回 high,这本身就是下面 C 点的例子。)
B
思考预算自适应。需要加压就在提示词写「先逐步仔细推理,此题难度高于表象」,需要提速就写「优先快速响应,不确定时直接作答」。
C
每换一代默认行为都会变。为旧模型调好的提示词需要重看:响应长度、推理 vs 调工具、默认 subagent 数都可能变。别假设「全面超越」,每代都有取舍。下表是三类最常踩的变化。
D
把 Claude 当工程师委派,而非结对伙伴。每轮交互都增加推理开销,应充分授权:首轮就把意图、约束、验收标准、文件位置讲清,批量化让它持续推进。
这一代变了什么具体你要做的
默认 effort 变了4.7 时 Claude Code 默认 xhigh,4.8 改回 high编码手动设回 xhigh
长上下文检索回退(4.7 那代)多针检索 MRCR:256k 91.9%→59.2%、1M 78.3%→32.2%;连带重度联网研究 BrowseComp 约 −4.4ppRAG / 长文 / 纯联网调研,升级前按场景 A/B,别只看版本号
默认语言偏好变了4.8 默认中文输出偏弱、更倾向英文中文团队在 CLAUDE.md 里显式要求「用中文回答」
0.3模型越可靠,验证 harness 越能薄

4.8 这一代幻觉显著下降,直接改变你要在验证上花多少力气。同一套 fact-check 流程核 11 篇报告(独立 subagent 在干净上下文逐条比对原文、有问题就改、换新 subagent 复核到零问题),切到 Opus 4.8 那天是一道清晰的分水岭:

切 4.8 前 切 4.8 后 平均核查轮次 3.2 1.2 首轮零问题 0/6 4/5
数字密度最高的一篇(832 账号 / 13873 观测 / 33%→56% / r=0.28)也一轮零修正。幻觉率直接决定验证返工次数。

但别误读成「4.8 之后不用验证了」。变薄的是返工次数,不是验证本身。生成不等于评估、由独立 agent 验收而非执行者自评,这套分工制衡删不掉(详见第四层)。

0.4缓存决定你的配额:几条顺着来的规矩

prompt caching 是一层「不可见但花钱」的机制:前缀逐字节匹配,任何位置变一字节、其后缓存全失效。cache miss 让每轮全价重算、成本翻倍,进而把订阅计划的 rate limit 砍半,命中率直接决定 Pro/Max 给你多少配额。顺着它来即可:

·
不在长对话中途切模型。10 万 token 的 Opus 对话切到 Haiku 反而更贵(要为新模型重建缓存)。留在当前模型,或开 subagent(独立前缀链,不污染主缓存)。
·
窗口仍有余量时主动 /compact。compaction 被设计为复用父对话前缀以不破缓存,顺应系统而非对抗。原因见第一层。

caching 另有 5 条面向「从零搭 agent」的设计准则(tools 不中途增删、defer_loading、不跨模型、消息传递更新而非改 system prompt、compaction 伪装成父对话延续),不在本文范围,不展开。

1Sheet 01 · 上下文②配 Claude Code

上下文:你唯一真正在管的资源

loop 是现成的,你管的是输入什么、何时清。几乎所有使用差异都源于对窗口的管理。Claude 每完成一步,你都站在一个分支点上,5 个选择,4 个是为了管上下文质量:

完成 一步 Continue继续当前对话,上下文不变 /rewind回退,留文件读取、丢失败尝试 /clear清空重来,自写要点带入 /compact压缩为摘要后继续 Subagent独立全新窗口,只返回结论
悬停看清每条分支。最自然的是「继续」,但另外四个才是管上下文的杠杆。
1.2 / 1.3compaction 机制,与自动 compact 的坑

compaction 是有损压缩:接近上限时把整段对话总结成摘要,模型在全新窗口里基于摘要继续。问题出在自动触发的时机,它恰好落在模型最弱的时刻:

会话开始 上下文填满 → 模型可靠度(随 context rot 下降) ✓ 主动 /compact 状态尚佳、你清楚下一步 ✗ 自动 compact 在此触发 最弱时做最关键的总结决策
典型失败链:长 debug 后自动 compact,摘要聚焦调试;你说「去修 bar.ts 的警告」,可警告细节已被丢掉。对策:利用 1M 余量,趁状态好时提前主动 compact。
1.4Rewind 优于纠正

场景:读了 5 个文件、试方案 A 失败、要换 B。

直接口头纠正

失败连同纠正都留着

「那个不行,试试 B」,失败的方案 + 你的纠正全留在上下文里,继续增加噪音、干扰判断

/rewind(双击 Esc)

回到岔路口,干净换路

退到「读完 5 文件、还没试 A」的点,再说「别用 A,foo 没暴露那接口,直接用 B」。留下文件读取,丢掉失败尝试。

配套 "Summarize from here":让 Claude 把所学写成一条交接消息,相当于未来的 Claude 给过去的自己写信(「我试了 A,因……行不通」),避免后续会话重蹈覆辙。

1.5 / 1.8怎么选:两张速查表

/compact 与 /clear 都清上下文,区别在谁决定保留什么

维度/compact/clear
工作量低,Claude 自动总结高,你手动提炼
控制精度Claude 决定保留什么你决定携带什么
Context Rot部分缓解完全消除
适用任务中途清冗余开始全新任务
场景推荐原因
同任务,上下文仍相关Continue窗口内容都还在起作用
Claude 走错了路Rewind留文件读取、丢失败尝试
会话堆满过时调试信息/compact + 指令省力,你引导方向
开始全新任务/clear零 rot,你完全控制
下一步大量只需结论的输出Subagent中间噪音留子上下文

新任务 = 新会话。关联任务权衡:高度相关就继续(省去重读),否则 /clear。subagent 的心智测试,「我要的是工具输出本身,还是只要结论?」只需结论就派出去,更多用法见第三层。

2Sheet 02 · 知识与工具②配 Claude Code · 核心框架

知识与工具:7 层施工图

这层是全文核心框架。一个常被忽略的前提:harness 的重要性等于甚至超过模型本身。先说底层机制,Claude 找代码用的是 agentic search,不是 RAG:

维度RAG 工具Claude Code · agentic search
索引维护需 embedding pipeline不需要
时效性滞后(小时/天/周)实时操作 live codebase
失败模式返回已删/改名的函数,无提示无此问题
扩展性数千人并发提交时跟不上每个实例独立运行

代价:它需要足够起始上下文知道「从哪开始找」,导航质量取决于 setup 质量。结论:投入 codebase setup 的团队拿到更好的结果

2.2搭建顺序:七层,自下而上
自下而上构建 L1 · CLAUDE.md自动读取 L2 · Hooks自我进化 L3 · Skills本层重点 L4 · Plugins打包分发 L5 · LSP附加能力 L6 · MCP接外部系统 L7 · Subagents附加能力
每层建立在前一层之上,不宜跳跃。实线 = 五个扩展点,虚线 = LSP / Subagents 两项附加能力。另:从子目录初始化优于从仓库根(Claude 自动向上遍历,反而拿到更聚焦的上下文)。
最常见的错误用法
L1 CLAUDE.md塞可复用专业知识(该进 skill)
L2 Hooks用 prompt 实现本该自动跑的
L3 Skills全塞 CLAUDE.md
L4 Plugins让好配置停在个人手里
L5 LSP以为是自动的(要装 plugin 加 language server)
L6 MCP基础没搞好就先建
L7 Subagents同一 session 同时探索与编辑
2.3让代码库可导航:六个实践
1
CLAUDE.md 精简且分层:root 给全局、子目录给局部,叠加加载;root 只放指针和关键 gotcha。
2
从子目录初始化,而非 repo 根:Claude 自动向上遍历、加载沿途每个 CLAUDE.md,root 上下文不丢。
3
按子目录 scope test/lint:否则改一个 service 却跑全部测试,超时又费上下文。
4
.ignore 排除生成物/构建产物/第三方,把 permissions.deny 提交进版本控制、全团队共享。
5
结构不清晰时建 codebase map:repo 根放轻量 markdown,每个顶级目录一行描述。
6
跑 LSP 按 symbol 而非字符串搜:过滤发生在 Claude 读取之前,不必逐个打开判断。
acme-monorepo/
├── CLAUDE.md root:只放指针 + gotcha
├── .claude/
│   └── settings.json permissions.deny 入库
├── apps/web/
│   ├── CLAUDE.md 子目录级 test / lint
│   └── src/
├── services/payments/
│   └── CLAUDE.md 从这里 init,不从根
├── codebase-map.md 目录级索引
└── (LSP: clangd) 按 symbol 搜,不按字符串
六个实践不是「让 Claude 更聪明」,是「让代码库更好被探索」。Claude 在大库里的上限 = 它找到正确 context 的能力。
2.4Skills 深入:它是文件夹,不是一个 md

很多人以为 Skill 就是一个 SKILL.md。其实它是一个文件夹,SKILL.md 只是入口,旁边还能挂脚本、参考资料、模板、甚至自己的 hooks,这正是它比一段提示词强的地方。

my-skill/
├── SKILL.md 入口:description = 触发条件
├── scripts/ 可复用脚本,让 Claude 组合而非重写
├── references/ 渐进式揭露,要用才读(api.md…)
├── assets/ 模板、样例文件
├── hooks/ 按需拦截,如 /careful 拦 rm -rf
└── config.json 用户配置,没设就 AskUserQuestion
文件夹结构才是 Skill 的本体:SKILL.md 给方法,scripts/ 给手脚,references/ 按需加载省上下文。

官方把 Skills 的常见用途归成九类,从查文档一路覆盖到运维:

库 / API 参考
产品验证
数据分析
流程自动化
脚手架生成
代码审查
CI / CD
Runbook
基础设施运维

来自 Anthropic 内部上百个 Skills 的九条最佳实践:

写法 · 前五条

把 skill 写对

  • 不讲废话:聚焦能把 Claude 推出默认思维的信息(例:叮嘱避免 Inter 字体和紫色渐变)
  • 建 Gotchas 章节:最值钱的内容,逐条记录失败点并持续更新
  • 文件系统做渐进式揭露:细节拆进 references/api.md,要用才读
  • 别过度限制灵活性Description 是触发条件,不是摘要
运维 · 后四条

让 skill 持久好用

  • 存脚本让 Claude 组合,而非重建重复模板
  • 按需 Hooks/carefulrm -rfDROP TABLE
  • 持久化用 CLAUDE_PLUGIN_DATA(skill 目录升级会被删)
  • 用户配置用 config.json,没设就让 agent 用 AskUserQuestion 问

分享:小团队签入 .claude/skills,规模化走 plugin marketplace(需筛选避免烂 skill)。用 PreToolUse hook 记调用量看哪些受欢迎。一条经验:好 skill 多从几行字开始、随踩坑完善。

2.5MCP:接入侧怎么用

MCP 把外部数据源和系统接入会话。本文只讲怎么接进来用,怎么设计一个 MCP server 不在本文范围。接入侧有两个降本开关,都是客户端能力,不是 server 设计:

↓85%
Tool Search:工具众多时不预加载全部定义、运行时按需搜,工具定义 token 降约 85% 而选择准确度不变
↓37%
Programmatic Tool Calling:多次调用在代码沙箱里循环/过滤/聚合,只送最终输出,整体开销约降 37%
10 + 8
一个真实数据分析 plugin 打包 10 skill + 8 MCP server,一次安装从通才变领域专家

MCP 与 Skills 互补:MCP 给工具和数据,Skills 给操作知识,最强的 agent 两者兼用。(MCP server 五大设计模式不在本文范围。)

2.6这一层的暗线:less is more

早在 2024 年末,Claude 3.5 Sonnet 仅用 Bash 和 Text Editor 两个通用工具就拿下 49% 的 SWE-bench Verified,当时的 SOTA。Claude Code 的架构基础至今仍是这两个通用工具,Skills、Memory 都是它们的组合。

工具的 schema 和过长指令都会挤占推理空间。别急着设计复杂工具链,先看通用工具能不能做好。
3Sheet 03 · 编排②配 Claude Code

编排:计划该交给谁

问题变成:一个任务,让 Claude 自行逐回合承载整个计划,还是把计划交由他处持有。原则:小任务不拆分,大任务不让模型在上下文中独自记忆整个计划

3.1subagent:三特性、内置类型、五场景
三特性 / 三内置类型

它是什么

  • 三特性:全新起点(不继承历史)、并行、权限隔离(研究只读 / 实现可编辑)
  • General-purpose:全工具,复杂多步
  • Plan Agent:只读,研究加规划
  • Explore Agent:只读,快速搜索
五个适用场景

什么时候派出

  • 研究密集(读几十个文件)
  • 多个独立任务(并行)
  • 需要全新视角(不继承假设/偏见)
  • 提交前验证(独立检查)
  • 流水线工作流(明确阶段/交接)
10+ 文件
需探索的文件超过此值就派出
3+ 子任务
彼此独立的子任务超过此值就派出
3≈1
3 个并行 subagent 的耗时约等于单个
3.2 / 3.3五种调用,四 pattern,五反模式

成熟度路径一句话:先对话,后自动化。先用自然语言,观察哪些反复出现,再固化:

step 1
对话式
自然语言,可 Ctrl+B 转后台
step 2
自定义 subagent
.claude/agents/,description 写触发条件
step 3
CLAUDE.md 规则
沉淀为长期约定
step 4
Skills 工作流
可复用的成套打法
step 5
Hooks 自动化
最自动,如 Stop hook 测试不过时阻止结束
四个实战 pattern

该用的姿势

  • 先研究再实现(从摘要谈起,而非 20 个原始文件)
  • 并行批量改(独立文件套同一模式)
  • 独立代码审查(全新视角更客观)
  • 流水线(设计/实现/测试,用文件交接)
五个反模式

别这么用

  • 顺序依赖:单会话顺着做更干净
  • 同文件编辑:并行改同一文件会冲突
  • 小任务:委派有开销,直接做
  • 专家 agent 过多:降低自动委派可靠性
  • 需 agent 间协调:彼此不能通信,该用 Agent Teams
3.4升维:Workflow,把计划搬进脚本

区分三者的不是规模,而是一个问题:那枚标着 PLAN 的方块在谁手里。Subagent/Skill 时由 Claude 逐回合持有、中间结果落进上下文;Workflow 让脚本持有,Claude 只看最终答案。

Subagent
Claude 逐回合
CLAUDE 上下文 ◆ PLAN { } 脚本
计划在脑中,每个中间结果都落进上下文
Skill
Claude 跟指令
CLAUDE 上下文 ◆ PLAN { } 脚本
指令是建议不是保证,怎么走仍逐回合定
Workflow
脚本
CLAUDE 只留最终答案 { } 脚本 ◆ PLAN
循环/分支全在脚本,中间结果不进上下文
SubagentsSkillsWorkflows
谁决定下一步Claude,逐回合Claude,跟 prompt脚本
中间结果存哪Claude 的上下文Claude 的上下文脚本变量
可复现什么worker 定义指令编排本身
规模每回合几个同 subagent每 run 几十到几百
中断时重启该回合重启该回合同会话内可 resume

Workflow 不是 Skill 的替代,两者正交:Skill 改变「模型知道什么」,Workflow 改变「如何确定性地编排」。一个 workflow 里 fan-out 的 agent 完全可以先挂 skill 再干活。

3.5 / 3.6计划进代码解锁三件事,与硬限制
1
中间结果不进上下文 → 不腐烂 → 能跑几小时甚至几天。协调发生在对话之外,无论任务多大,计划都保持在轨。
2
质量套路固化成代码强制执行,而非指望模型每次记得,「代码强制每条结论都过 N 个独立 skeptic」。
3
整个编排可保存、可重跑:在 /workflows 选满意的 run,按 s 存成 command。
16
并发 agent 上限(核少更少)
1,000
单次 run agent 总数上限
0
运行中可插入的用户输入
1
resume 仅限同一会话

收敛是退出条件而非固定轮数。触发:prompt 写 workflow / /effort ultracode / 跑已存 command;自带 /deep-research。可用性 Max/Team/API 默认开、Pro 需 /config、Enterprise 默认关。token 消耗远高于普通会话,先在小任务试手,大 run 前看 /model 把不需最强模型的阶段路由到小模型。

⚠ 3.7 · 旗舰案例 Bun 的前提,不能略过

用 workflow 把 Bun 从 Zig 移到 Rust:约 75 万行、11 天、测试通过率 99.8%,四个串联 workflow(① 映射 Rust lifetime ② 逐文件翻译,数百 agent 并行、每文件两个 reviewer ③ 驱动 build/测试到双绿 ④ 夜间优化、每处单独 PR 等人审)。但前提极其特殊,不可理解为「任意迁移都能 11 天」

  • strangler-fig 渐进替换,不是推倒重建,Zig 与 Rust 全程链入同一 binary、按类逐个开关切换
  • 每次切换都过 tests + shadow-diff + 不超过 2% 性能门禁,是验证驱动收敛而非「完成即信任」
  • 极高既有测试覆盖(99.8% 的前提是套件够强)、单作者主导尚未投入生产(99.8% 终究不是 100%)

正确读法:在有强测试与强验证门禁的高价值模块上,确定性脚本 + build/test 修复循环,能把按季度估的工程压到天级。先挑这样一块试点,而非照搬时间承诺。

3.8用 Workflow 前先懂三个失败模式

默认 harness 把规划与执行挤在同一上下文,碰上长时间跑、大规模并行、对抗性任务就会塌,塌法有三种,这正是要把计划搬进脚本的原因:

done! 35 / 50
agentic laziness
偷懒

50 项审查做到 35 项就宣布「搞定」。

产出 自己评 ✓ 全过
self-preferential bias
自我偏袒

评判自己刚做的东西时倾向回护。

别做X
goal drift
目标漂移

多回合后忠实度流失,compaction 丢掉「别做 X」。

Workflow 从结构上治这三样:偷懒,脚本持有完整清单、循环不到末尾不算完;自我偏袒,验证交给另一个独立 agent;目标漂移,目标写在脚本里、不随 compaction 流失。

3.9六个可组合的 pattern

成对比较(comparative judgment)比绝对打分更可靠,排序类任务尤其如此。

3.10 / 3.11用例:相当一部分并非编写代码

反直觉的是,它在非技术工作上常更有用。官方点名的九个用例,过半与写代码无关:

迁移重构每改动一 agent 在自己 worktree 改、另一 agent 对抗审查再 merge
深度研究不止联网,也能从 Slack 上下文汇总状态报告
深度核查一 agent 提取所有事实声明、每条派子 agent 查证标来源
排序淘汰赛 / 两两比较流水线
记忆与规则遵守
根因调查
规模化分诊带出下方的 quarantine 安全 pattern
品味驱动探索
模型路由
🛡 quarantine 隔离

读取不可信公开内容的 agent 不得执行高权限动作,高权限动作交给另一批专责执行的 agent。读取与执行分离,这是防 prompt injection 的结构性手段。

什么时候别用:workflow 能在很多场景做出超常结果,但并非每个任务都需要、且烧多得多的 token。先问「这真需要更多算力吗」。多数传统编程任务并不需要一个五人评审团。窍门:详细 prompt 最关键;小任务可开 quick workflow;配 /loop /goal;写 use 10k tokens 封顶;按 s 存进 ~/.claude/workflows 或纳入 skill。把它当探索新用法的起点,不是终点。

4Sheet 04 · 验证②配 Claude Code

验证:执行者不应评判自己的产出

代码编写成本已经很低,瓶颈后移到验证。核心一句:生成不等于评估,二者必须分离。让干活的 agent 评自己的产出,它几乎总自信地给好评,如同让开发者审自己的代码。一个工程现实:把独立 Evaluator 调严,比让 Generator 学会自我批评容易得多

规格·做什么 交付 verdict·合约回流 Planner需求·只定做什么 Generator按 Sprint 增量构建 Evaluator像真实用户一样测
Evaluator 用 Playwright 真点真填、对每条验收标准逐条打分(一个关卡编辑器就 27 条),抓的是「mouseUp 没触发导致填充工具失效」这种真 bug。Design Quality / Originality 高权重,Craft / Functionality 是 baseline。
▸ ②本文范围内

用独立 review subagent,或 Workflow 的对抗式验证 pattern,让验收与执行不是同一个、也不共享上下文。纯 Claude Code 用法,不写一行额外代码。

▸ 自有产品可更进一步(不在本文范围)

把产物改造成 agent 可读可验的接口(data-verify-* 契约、window.__verify API、.verify.ts)。核心论点是「经济学翻转」:agent 把验证的边际成本压到趋零,contract testing 才第一次在前端规模化可行。这是改造自有产品才会做的事。

Sheet 05 · 集大成案例 · 全程只用现成能力

70 万行遗留代码库的接入

把四层组合用在开篇提到的 Skyline 上。核心方法论:把 Claude 当新员工 onboard,像带实习生一样,解释足够背景让它完成一个有限项目,并为下一轮产出更好的 context。这是个五步闭环,每轮起点更高:

↻ 下一轮,起点更高 限定 scope 提供 context 完成任务 沉淀 context 扩展 scope
正如「你不会让新人第一天就面对 70 万行代码」。每次任务结束都把所学写回 context 层,下一轮 Claude 起点更高。
华盛顿大学 MacCoss 实验室70 万行+ C#20 万+ 夜间测试2008 起 · 17 年
上下文层
context 置于独立 repo pwiz-ai,而非代码仓库,否则会被分支隔离,每个分支上的 Claude 成了「不同的人」。团队当正式工程产物维护、打版本。
知识层
skills 严格遵循 "Reference, Don't Embed"。debugging skill 硬性触发:调查 bug/失败/异常时必须加载,强制根因分析,杜绝改一行试一下。
工具层
两个自建 MCP server:截图 Diff Server 把 2000 余张教程截图重现率提到接近 100%、让 Claude「看见」UI 回归;每日摘要 Server 把 20 万夜间测试的失败直接喂给 Claude。
两周
搁置一年、开发者离职后停摆的 Files View 面板交付,commit 全 co-authored
<1 天
停更三年的 Java/LabKey 夜间测试模块重启,含以前要请设计师的 CSS
4 层全用
连一个原本持怀疑的成员也独立用它完成了一个面板

四条启示:scope 隔离是前提(大屎山不能一把梭,切片喂、逐步扩展)· debugging skill 必须硬约束(70 万行盲改一行可能连锁爆炸)· context 必须独立于代码分支 · MCP 打通测试基础设施。一个诚实的前提:这不是装上就能用的银弹,需要有人维护 context 层、渐进推进。但它在「最不适合 AI 的场景」里跑通了。

Sheet 06 · 结语 · 竣工即开始减法

边搭边砍:harness 的半衰期

harness 不是一次搭就一劳永逸,它有半衰期。每个组件都编码了一个对模型能力的假设,而假设会过期。能删多少,取决于模型多强。

真实案例:Sonnet 4.5 近上限时会「上下文焦虑」提前结束任务,团队加了段 context reset 补偿;Opus 4.5 上线、这行为消失后,那段代码就成了纯负担。同理,一个为强制走 Perforce p4 edit 而拦截写文件的 hook,在原生支持后也变多余。正确心态不是「怎么让 Claude 更强」,而是「我能停止做什么」。

Sonnet 4.5
43%
Opus 4.5
68%
Opus 4.6
84%
compaction 质量天花板:决定上限的是模型能力而非压缩算法。模型越强,越能把控制权交还给它,harness 越能薄。
同一个「造完整应用」任务,模型一升级,脚手架就能砍
Opus 4.5 Planner Generator Evaluator Sprint 拆解 context reset 6h · $200
Opus 4.6 Planner Generator Evaluator Sprint 拆解 context reset 3h50 · $124

但有些东西删不掉。Planner 与 Evaluator 这类分工制衡保留了下来:没有 Planner,Generator 会 under-scope;没有 Evaluator,边界任务的 bug 会遗漏。可删减的(脚手架)与不可删减的(上下文纪律、分工验证)要分清。建议每 3 到 6 个月做一次 harness 审计。

134 天 / 126 版
Claude Code 自身迭代节奏,周均 6.6 个版本,近七成日子都在出版本
$200→$124
同产出,模型升级后成本下降、流程更简
只会挪位置
值得关注的 harness 空间不会随模型进步缩小,只会迁移