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

模型是支点,
harness 才是杠杆

Claude Code 已实现 agent 主循环,围绕它配置的上下文、工具、编排与验证,构成了这里所说的 harness。同一个 Claude 能承担什么工作,也取决于这套环境如何配置。70 万行遗留系统的接入案例,展示了 harness 在大型项目中的实际作用。

项目用好 Claude Code 的 harness 图别施工总说明 · 共 0–4 层 审核结构与语气全文校订 日期2026-10-20 · 全文统稿
支点 · 所选模型 harness(你配的) 产出上限 ↑ 杠杆臂 = 本文第 0–4 层,逐层加长
GenAI Playbook · 十余篇 Claude Code 使用经验的整合 · 原理、配置与操作速查集中在一篇
为什么先搭 harness

同一个模型,
配置影响实际表现

像接入一名新入职开发者一样,把 Claude 接入项目,有助于推进原本搁置的工作;它能做到什么,仍受所选模型的能力约束。harness 是可调的杠杆,选定的模型是它的支点。配置不会改变这个模型本身的能力,但模型可以选择或更换,harness 也需要随之调整。

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

harness 需要随模型变化持续调整。模型升级后,原有配置可能失效,此前有用的脚手架也可能成为负担。每层配置都需要考虑保留和退役的时机。

先把范围说清楚

这篇只讲「配 Claude Code」

Claude Code 提供了 Anthropic 已实现的 agent 主循环,使用者无需从零编写这部分。本文讨论如何配置这个现成框架,并区分三类内容:①选定模型本身的能力(第〇层),②围绕任务配置的 harness(本文主体),③从零构建 agent 框架(不在本文范围)。这里的区别是配置现成框架与从零构建框架,而不是是否编写代码。

▸ ②配 Claude Code(本文主体)

模型选型、上下文管理、知识与工具配置、subagent 与 Workflow 编排,以及独立验证,都围绕 Claude Code 已有框架展开,也可能用到 hook 或 Workflow 脚本。

另有 ①模型能力:所选模型的能力边界,是 harness 的地基(第〇层)。

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

prompt caching 设计规则、MCP server 实现、面向 agent 的命令行、单 loop 与多 agent 架构取舍、把产物改造成可验证接口。本文不展开这些自建 agent 或改造外部系统的实现细节。

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

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

五层,按任务需要配置

0Sheet 00 · 地基①模型能力 · 配置的前提

第〇层:模型能力与使用成本

模型选定后,它本身的能力就是配置 harness 的前提。认清这些能力及其边界,才能判断哪些配置仍有必要,哪些可以精简。

0.1上下文窗口与 context rot

上下文窗口容纳系统提示词、完整对话、所有工具输出和已读文件。窗口容量可达 100 万 token:截至 2026 年 10 月,Fable 5.x、Opus 4.7 及之后、Sonnet 5 及之后、Haiku 5.5 原生支持 1M,老模型标准为 200K。容量更大,并不等于可以不加选择地填入内容。

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

状态栏可以加上 context 进度条。它实时显示上下文窗口的用量,无需反复运行 /context 查看:

claude — acme-monorepo
› 把 payments 服务改成用新的 ledger 客户端
● Read services/payments/ledger.ts (+2.1K tokens)
● Edit services/payments/charge.ts
…
~/acme-monorepo⎇ mainopus-5.5 · mediumcontext720K / 1M · 72%
状态栏插件实时显示窗口用量。过了七八成,颜色会从绿转黄变红,提示可以考虑 /compact 或 subagent,无需反复运行 /context 查看。
0.2选对模型,本身就是 harness 设计
A

effort 从模型的默认档起步,再按评测调整。在 Claude Code 里,支持 effort 的模型多数默认 high;例外是 Opus 5.5、Sonnet 5.5、Haiku 5.5 默认 medium,Opus 4.7 默认 xhigh。官方的依据是,Anthropic 测试中 Opus 5.5 的 medium 在编码和知识工作评测上达到或超过 Opus 5 的 high,而同一档位下 Opus 5.5 每轮想得更多,所以从 Opus 5 换过来应从 medium 起步,不要沿用旧档位。

档位共五档(Opus 4.6、Sonnet 4.6 没有 xhigh)。

只要评测显示质量没有下降,就该优先用 low 和 medium,官方把它们定位成控制 token 成本与响应时间的主要开关;高要求的编码与 agentic 工作适合调高到 high 或 xhigh。max 只适合确实值得无约束消耗 token 的任务,因为它仍有收益递减和容易过度思考的问题。

从上一代沿用的设置也不能直接照搬,官方要求在自家评测上重新跑一次 effort 扫描。(默认 effort 在 Opus 4.7 那代是 xhigh,4.8 回到 high,5.5 这代又降到 medium,这几次来回本身就是下面 D 点的例子。)

B

开局先确认自己在哪一档。新会话先跑一次 /model 和 /effort:两者都会记住上次选的,所以这个选择应当是有意为之。明知这次是粗活,MAX_THINKING_TOKENS=0 可以关掉这一个会话的思考,它是 /effort low 之下的一档;但在 Opus 5.5、Sonnet 5.5、Haiku 5.5 和所有 Fable 模型上思考关不掉,这个变量不起作用。中途切换模型和(老模型上的)effort 的缓存代价见 0.4。

/effort 五档之外还有 auto,由 Claude 按每次请求自己选档;滑块里另有一个 Ultracode 开关,它是设置不是档位(见 3.7)。

max 消耗用量额度更快,官方建议按会话开启,只留给难调的 bug 和架构决策。(官方帮助中心的技巧合集里,Claude Code 团队成员的个人口径是「所有事都用 Opus 加 thinking」:引导次数少、工具用得好,总耗时反而比小模型短。这是工程师个人经验,说的是选哪个模型,与上面「从模型默认档起步、按评测调整」的档位建议不冲突。)

C
思考预算自适应。需要加压就在提示词写「先逐步仔细推理,此题难度高于表象」,需要提速就写「优先快速响应,不确定时直接作答」。
D
每换一代默认行为都会变。为旧模型调好的提示词需要重看:响应长度、推理 vs 调工具、默认 subagent 数都可能变。别假设「全面超越」,每代都有取舍。下表列出默认档位与长上下文检索的变化。
E
把 Claude 当工程师委派,而非结对伙伴。每轮交互都增加推理开销,应充分授权:首轮就把意图、约束、验收标准、文件位置讲清,批量化让它持续推进。
模型速查 · 截至 2026 年 10 月

截至 2026 年 10 月,Claude Code 在 Pro、Max、Team、Enterprise 和 Anthropic API 上的默认模型都是 Opus 5.5(2026-09-22 发布,需 v2.1.280 及以上;官方称它在多数工作上达到 Fable 5.1 的水平,价格比 Opus 5 低 40%)。官方文档把 Fable 5.1 与 Fable 5 列为能力最强的模型,但它们不是任何套餐的默认模型,用量可能计入 usage credits;同期还有 Sonnet 5.5(09-28)和 Haiku 5.5(10-07)。

7 月 24 日发布的 Opus 5 此前是 Max 的默认模型。默认型号会继续变化,模型选择和 effort 设置仍需结合任务与评测来调整。

这一代变了什么具体你要做的
默认 effort 变了4.7 时 Claude Code 默认 xhigh,4.8 改回 high,5.5 这代降到 medium换代时按自家评测重新扫一遍档位,别沿用旧值
长上下文检索回退(4.7 那代)多针检索 MRCR:256k 91.9%→59.2%、1M 78.3%→32.2%;连带重度联网研究 BrowseComp 约 −4.4ppRAG / 长文 / 纯联网调研,升级前按场景 A/B,别只看版本号
0.3模型更可靠,验证返工更少

在这组报告核查记录中,4.8 这一代的幻觉问题明显减少,验证返工也随之减少。2026 年 5 到 6 月,同一套 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缓存如何影响成本与配额

按 token 计费,实际支付的是推理所占用的计算时间。模型处理这些 token,需要占用 GPU。一个 token 的价格由三件事决定:使用哪个模型、属于输入还是输出、是否命中缓存。模型选择见 0.2,下面各项价格都以所选模型的单价为基础。

一个 token相对输入价为什么
输入 · prefill基准模型把这次发来的全部内容读一遍:系统提示词、CLAUDE.md、你的消息,加上会话里已经进来的文件与命令输出
输出 · decode约 5x一个 token 一个 token 地生成,200 token 的回复就是接连跑 200 次;按单个 token 算,占住 GPU 的时间长得多
缓存读0.1x服务端把已经算好的状态装回来,不重算
缓存写最高 2x要额外把状态留住;但写只发生一次,之后每一轮都按 0.1x 读

以「修 utils.test.ts 里挂掉的测试」为例。在这个示例中,Claude Code 共发出 5 次请求,每次都带着截至当时的完整对话:

历史内容 · 按缓存价读 0.1x 本轮新增 · 全价 prefill 请求 1 工具定义 + 系统提示词 + CLAUDE.md + 你的消息 全部写入缓存 请求 2 读 utils.test.ts 请求 3 读被测文件 请求 4 给出 Edit 请求 5 跑测试,输出被追加
条长为形状示意,不含实测比例。每轮的账 = 历史按缓存价读 + 本轮新增按全价输入 + 回复按输出价。典型一轮并不对称:进去几万 token,出来几百。测试通过后模型只回一句总结,没有工具调用,所以不会有第 6 次请求。订阅用户看不到这些价格,但扣配额的正是这些请求。

缓存从请求开头逐字节匹配相同的内容,而请求顺序是固定的:工具定义、系统提示词、对话,CLAUDE.md 位于对话最前面。追加到末尾的工具结果不会改变已有前缀。改动请求前部,或改动用于区分缓存的条件,也就是缓存键,则会影响缓存复用。以下几项会改变前缀或缓存键:

·
/model:每个模型有自己的缓存,切换后下一轮整段对话按全价重算。opusplan 也算,它每次进出 plan mode 都换模型。
·
/effort:多数模型上 effort 也在缓存键上,中途切换会要你确认。例外是 Opus 5.5、Sonnet 5.5、Haiku 5.5 和 Fable 5.1:用 API key 或 Claude 订阅时改 effort 不破缓存,也不再弹确认(Bedrock、Google Cloud、Claude apps gateway 和 HIPAA 配置下仍会破)。
·
fast mode(输出更快、单价不同的运行模式):同样在键上,而且重算按 fast mode 的价。要用就在会话开头开启;关闭时不会触发重算。
·
/compact:对话被换成更短的一段,里面的内容都对不上了,前面的系统提示词仍然保留。
·
时间:每一轮都重置计时。订阅在套餐用量内时主对话保留一小时;API key、云厂商,以及订阅超出套餐开始扣 usage credits 之后,主对话都是五分钟;subagent、workflow、compaction 这类主对话之外的请求默认也是五分钟。ENABLE_PROMPT_CACHING_1H=1 把两类都改成一小时,更细的控制是 v2.1.242 起的 promptCacheTtl 与 subagentPromptCacheTtl。隔得更久回来,下一轮重新 prefill 整段对话;resume 旧会话几乎总是如此,缓存那时通常已经没了,系统提示词在启动时本来就会重建。

Anthropic 内部把缓存命中率(cache hit rate)跌破阈值视为生产事故(SEV)。其描述的成本链条是:缓存未命中(cache miss)让每轮请求按全价重新计算,成本翻倍,进而把订阅计划的用量限制(rate limit)砍半。命中率因此直接影响 Pro/Max 的可用配额。

模型和 effort 可以按任务需要调整,切换成本则与时机有关。对于会使缓存失效的切换,会话开头或刚 /clear 之后成本较低,长对话中途成本较高。由此有两条会话管理建议:

·
不在长对话中途切模型。10 万 token 的 Opus 对话切到 Haiku 反而更贵(要为新模型重建缓存)。留在当前模型,或开 subagent(独立前缀链,不污染主缓存)。
·
窗口仍有余量时主动 /compact。compaction 被设计为复用父对话前缀以不破缓存。只要旧对话还在缓存里,写这份摘要就便宜,所以离开键盘之前 compact 比回来之后再 compact 划算。原因见第一层。

缓存另有 5 条面向「从零搭 agent」的设计准则:tools 不中途增删、使用 defer_loading、不跨模型、通过消息传递更新而非修改 system prompt,以及让生成 compaction 摘要的请求延续父对话前缀。这些属于框架实现层面的设计,不在本文范围。

1Sheet 01 · 上下文②配 Claude Code

上下文:输入、保留与清理

1.1一次会话的账:输入量、停留轮数与并发窗口

内容只要仍在对话里,就会随后续每一轮再次发送。这包括 Claude 读过的文件和命令输出。一轮是指你或工具给出输入、模型作出回应的一次完整往返。命中缓存会降低重复发送的成本,但不等于免费;这些内容也持续占用上下文,模型每一轮都要处理。一次会话的成本可以从三个方面来看:

进来多少
多少 token 进了上下文:打字前就有的工具定义、系统提示词、CLAUDE.md,加上之后的每一份文件与命令输出
待多久
它们在里面停留多少轮。第 40 轮仍在重读前面 39 轮留下的内容
开几个
同时开着几个上下文。subagent 把噪音挪出主窗口,代价是它自己那些轮次也要花钱

会话启动时已经加载的内容,可以用 /context 查看。CLAUDE.md 只保留具体指令,特定工作流的指令放进按需加载的 skill;本次不用的 MCP server 则用 /mcp 关闭。会话开始后,新增内容几乎都是工具结果。Claude 需要读取多少材料,很大程度上取决于任务描述留下了多少信息需要它自行查找:

同一件事的三种说法代价
「测试挂了」先 grep 找是哪个测试、翻开几个文件看哪个相关,这些结果在不再有用之后还一直待着
「修 utils.test.ts 里挂掉的那个测试」省掉搜索,只花一次 Read 调用
「修 @utils.test.ts 里挂掉的那个测试」连 Read 也省掉:@ 在发送前就把文件附在消息上,第一个请求里就有它

用 @ 附加文件与让 Claude 读取文件,占用的上下文空间一样大。一个会话里 @ 一次就够,再 @ 一次通常会附上第二份。

另一类持续占用上下文的内容是命令输出。测试、构建和 git log 的输出,会像读入的文件一样追加到对话里,并随后续轮次反复发送。它们如何留在对话中,取决于是否超过输出阈值:

超过 30,000 字符

反倒安全

Claude Code 会把输出写进文件,对话里只留约 2,000 字符的预览和路径。想改留在对话里的上限,用 v2.1.261 起的 bashOutputMaxChars 设置(最高 128,000);BASH_MAX_OUTPUT_LENGTH 现在管的是回读窗口。失败的命令只留约 10,000 字符,取头尾两段。

阈值以内

才是长期负担

一个 runner 逐行打出 400 个通过的测试,刚好在限额以内,那 400 行从此跟着剩下的每一轮走。

Claude 常会自行添加 flag,或用 tail 缩短命令输出。需要固定控制时,官方文档提供了一个 hook,在命令执行前改写命令,只返回要紧的行。也可以把每天反复使用的那两三条命令连同 quiet flag 一起写进 CLAUDE.md,保留平时实际输入的形式。例如,跑单个测试文件用 npx vitest run --reporter=dot,既省一轮交互,也省掉之后每个会话里几百行输出。

内容停留的轮数同样影响成本。同样的工作放在一个长会话里,比拆成几个短会话更贵。因此,开始新任务时用 /clear,避免继续携带上一项任务的上下文;同一任务的前半段完成后,则可以用 /compact 清理已经不再需要的细节。

如果之后还需要回到当前会话,可以在 /clear 前先用 /rename 命名。运行 /compact 时说明需要保留什么;如果每次要求相同,就在 CLAUDE.md 里写一段 Compact instructions。

使用 1M 模型时,如果希望把自动 compact 的触发位置恢复到原来的水平,可以用 /autocompact 200k。这需要 Claude Code v2.1.221 及以上,v2.1.288 起会按模型分别记住该设置。

没有手动输入时,会话也可能继续产生轮次。/loop 每次触发,都会在设置它的会话里运行完整一轮,并携带整段对话;距上一轮超过一小时,还会发生一次 cache miss。因此,可以在另一个终端开启新会话,专门运行这个 loop。/loop 只在本机运行,一次最长 3 天;合上电脑后仍需继续运行的任务,则使用云端的 /schedule。两者的分工见 官方给 loop 下定义。

1.2何时继续,何时清理

Claude Code 提供了现成的 loop,也就是 agent 主循环。上下文是使用过程中需要管理的一项重要资源:输入什么、保留什么、何时清理,都会影响后续工作。Claude 每完成一步,都有 5 个选择,其中 4 个直接用于调整上下文:

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

compaction 会把整段对话总结成摘要,模型随后在全新窗口里基于摘要继续工作,因此它是一种有损压缩。风险之一在于自动触发的时机:窗口接近上限时,上下文已经变长,模型需要在可靠度下降的状态下决定哪些信息应当保留:

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

Claude 已读完 5 个文件,尝试方案 A 失败,接下来准备改用 B。此时可以直接纠正,也可以回退到尝试 A 之前:

直接口头纠正

失败连同纠正都留着

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

/rewind(双击 Esc)

回到岔路口,干净换路

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

配套的 "Summarize from here" 可以让 Claude 把已经学到的内容写成一条交接消息,例如「我试了 A,因……行不通」。将尝试过的方案和失败原因留下,有助于减少后续会话重复同样的尝试。

回退最后几轮时,rewind 的缓存成本也更低。它只从末尾移除这些轮次,前面仍有效的缓存可以继续复用,不会因回退而产生缓存重建费用。/compact 则需要生成摘要,后续请求使用的对话前缀也会改变,因此仍有成本。如果只是最后几轮走偏,适合 rewind 到它们之前,而不是用 /compact 整理整段对话。

分叉与 rewind 处理的是不同需求。rewind 把当前会话退回到此前的位置;/branch(命令行用 claude --resume <session-id> --fork-session)则从当前会话复制出一条新支线,原会话保持不变。需要尝试不确定的方向、同时保留当前进展时,可以使用分叉。

1.5按任务选择会话操作

/compact 把对话压缩成摘要,/clear 清空对话后重新开始。两者的关键区别在于由谁决定保留什么:

维度/compact/clear
工作量低,Claude 自动总结高,你手动提炼
控制精度Claude 决定保留什么你决定携带什么
Context Rot部分缓解清除旧会话上下文
适用任务中途清冗余开始全新任务
场景推荐原因
同任务,上下文仍相关Continue窗口内容都还在起作用
Claude 走错了路Rewind留文件读取、丢失败尝试
会话堆满过时调试信息/compact + 指令省力,你引导方向
开始全新任务/clear旧对话清空,自行携带要点
下一步大量只需结论的输出Subagent中间噪音留子上下文
要离开键盘一阵子/compact趁旧对话还在缓存里,写摘要便宜
Claude 正在干活,你有个小问题/btw只答一轮、不调工具,但看得到完整对话,不打断主任务
想试另一个方向但保留现状/branch原会话不动,新支线继承到此为止的上下文

新任务适合新会话。关联度高的任务可以继续当前会话,省去重读材料的开销;关联度低则适合 /clear。

是否使用 subagent,可以从所需结果来判断:「我要的是工具输出本身,还是只要结论?」只需结论时,可以把工作交给 subagent,让中间输出留在它的独立上下文里。但它没有主会话的对话,有时需要重读主会话已有的材料,这些轮次也消耗用量。小任务交出去可能只增加开销,主会话也只能拿回它选择汇报的部分。

同类、输出较多的任务如果需要反复委派,可以建立专用的 subagent 定义,写上 model: haiku;未指定时,它会沿用主会话当前的模型。

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

知识与工具:各自放在合适的位置

2.1先让代码库可检索

知识如何组织、工具如何配置,是 harness 影响工作结果的重要部分。除了模型能力,harness 本身也值得投入。Claude Code 找代码用的是 agentic search,即调用工具直接探索当前代码库,而不是依靠预建索引的 RAG(检索增强生成):

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

直接探索代码库也需要足够的起始上下文,让 Claude 知道从哪里开始找。导航质量取决于 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指令应该放在哪里

2.2 从能力配置的角度组织七项能力;具体指令放在哪种载体,则是另一个问题。官方把可用载体归为七种,选择时可以比较四个方面:何时加载、压缩后是否还在、上下文成本,以及强制力。

Rules 是其中一种约束载体,放在 .claude/rules/。通过 paths: 字段限定作用域后,规则只在 Claude 读到匹配路径的文件时加载。不限定路径范围的规则,会像 root CLAUDE.md 一样全程常驻并占用 token;paths 的作用就是缩小加载范围。某个目录的约定适合放在嵌套的 CLAUDE.md 中;横跨多个目录的约束,如「所有 handler 先校验输入」,则更适合用 path-scoped rule,也就是按路径限定范围的规则。

---
paths:
  - "src/api/**"
  - "**/*.handler.ts"
---
All API handlers must validate input with Zod before processing.
作用域限定在 src/api/** → 在只改文档的会话里它完全不进入上下文,只有 Claude 读到匹配路径的文件时才加载。这体现了路径范围对规则加载的影响。
载体何时加载压缩后还在?上下文成本适合承载
CLAUDE.md · 根会话开始,全程常驻在,会被重读高,每行都占构建命令、代码库特有的坑、团队约定
CLAUDE.md · 子目录读到该目录文件时目录不再被碰就丢低某目录的局部约定
Rules碰到匹配 paths 时重新注入中(不限范围则常驻)跨多目录的局部硬约束
Skills名字常驻,正文调用时加载按共享预算重注入,最旧先丢低过程性工作流
Subagents名字常驻,正文仅被调用时只有结论回主会话主上下文近乎零该隔离、只取结论的旁支
Hooks生命周期事件触发完全绕过压缩低,配置在上下文外必须确定性发生的动作
Output styles会话开始,注入系统提示永不压缩高,且覆盖默认系统提示角色级改变(慎用)
Append-system-promptCLI flag,仅本次调用永不压缩中,首次后缓存语气、长度、格式偏好

绿色列「压缩后还在?」说明了载体在长会话中的保留方式。指令如果放在会被压缩丢弃的载体里,到会话后半程可能已不在上下文中。子目录 CLAUDE.md 在对应目录不再被访问时也会丢失。

场景 A · 从仓库根启动
cwd = ~/project/
~/.claude/
CLAUDE.md
project/CWD
CLAUDE.md
CLAUDE.local.md
packages/
api/
CLAUDE.md
web/
CLAUDE.md
场景 B · 从子目录启动
cwd = ~/project/packages/api/
~/.claude/
CLAUDE.md
project/
CLAUDE.md
CLAUDE.local.md
packages/
api/CWD
CLAUDE.md
web/
CLAUDE.md
会话开始即加载按需(读到该目录文件时)

哪些 CLAUDE.md 会在启动时加载,取决于会话的启动目录。启动时会加载 ~/.claude/ 中的用户级约定,以及通向启动目录的祖先链上每个 CLAUDE.md / CLAUDE.local.md;只有启动目录以下的子目录文件才按需加载。从子目录启动,会把整条链上的约定一并预载,既能获得所需的局部上下文,也会增加启动时的上下文负担。

系统提示
4.2K
项目 CLAUDE.md
1.8K
auto memory
680
Skill 描述
450
用户 CLAUDE.md
320
环境信息
280
MCP 工具描述
120
用户还没敲第一个字,已加载约 7.8K / 200K(约 4%)。占大头的是系统提示和项目 CLAUDE.md,这正是把 root 控制在 200 行以内有意义的原因;MCP 与 Skill 启动时只载描述(各一两百 token),正文要到调用时才进。数字为官方示意值(illustrative),非固定。

Output styles 和 Append-system-prompt 多数情况下无需使用。Output styles 会覆盖默认系统提示;除非设置 keep-coding-instructions: true,原有的「你是软件工程助手」角色设定及其安全与验证习惯也会被移除。调整风格可以先考虑内置的 Proactive / Concise / Explanatory / Learning。其中,后加入的 Concise 会先给结果,省去开场白和复述。Append-system-prompt 只对本次调用生效,以叠加方式添加指令,不改变角色,但叠加的指令越多,遵从度越容易下降。

指令的内容也能帮助判断该用哪种载体。前面的表格比较各类载体的属性;「症状 → 换载体」速查则从 CLAUDE.md 中的内容出发,判断哪些指令适合移到其他位置。

你正在 CLAUDE.md 里写…它其实该放为什么
「每次 X 都要做 Y」(每次编辑后跑 prettier、完成时发 Slack)settings.json 里的 hook模型「选择」去跑 formatter,和 formatter「自动」跑,是两回事;要它可靠发生就交给 harness,别指望模型每次都记得
一段三十行的操作流程(部署 runbook、发布或审查清单).claude/skills/ 里的 skillCLAUDE.md 放「始终为真」的事实(构建命令、代码库特有的坑、团队约定);流程正文只在被调用时加载,常驻只会白白消耗 token
个人偏好(如「commit 一律用 semantic message」)用户级文件(~/.claude/ 或 CLAUDE.local.md)所有基于文件的载体都有一份用户级副本、跨 repo 全程加载;个人口味放用户级,项目级文件只留「团队共享但只对这个库成立」的约定

「绝不能发生 X」需要 hook 加权限来约束,组织级强制约束则依靠 managed settings。只适用于 src/api/** 的规则,如果没有设置 paths:,仍会像写进根目录 CLAUDE.md 一样常驻上下文。

自动记忆与团队约定

过去,用户通过 # 热键把内容写进 CLAUDE.md 充当记忆;现在,Claude 会自动保存与工作和用户相关的记忆。自动记忆写在 ~/.claude/projects/<project>/memory/,每个 git 仓库根目录一份,与手写的 ~/.claude/CLAUDE.md、./CLAUDE.md 分开存储。/memory 用于配置,/dream 负责整理;后者的名字取自 REM 睡眠将短期记忆巩固为长期记忆的过程。

官方技巧合集也保留了团队的长期做法:纠正错误后,让 Claude「更新 CLAUDE.md,别再犯」;或在 PR 评论里 @claude,把 review 结论写进去。后者需要先运行 /install-github-app,团队称这种做法为 Compounding Engineering。被反复纠正、全团队都应遵守的具体约定,适合进入签入 git 的 CLAUDE.md;个人偏好和零散上下文则交给自动记忆。官方删减的是为防最坏情况而累积的宽泛禁令,不是具体的纠错记录。

2.4让代码库可导航:六个实践
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.5Skills:组织流程与参考资料

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/ 按需加载省上下文。

每个 skill 的名字和描述都放在系统提示里,供 Claude 判断何时使用。选定 skill 后,Claude 通过一次普通的 Bash 调用,用 cat 读取对应的 SKILL.md,正文才进入上下文。文件中引用的 references/api.md 等资料,也等到实际需要时再用 cat 读取。正文和参考资料都由 Claude 通过通用工具按需获取,不由框架预先全部加载。

官方将 Skills 的常见用途归为九类,覆盖文档查询、开发工作流和运维:

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

Anthropic 从内部上百个 Skills 的实践中总结了九条最佳实践:

写法 · 前五条

把 skill 写对

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

让 skill 持久好用

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

小团队可以把 skill 签入 .claude/skills 共享;规模化分发则使用 plugin marketplace,并做好质量筛选。PreToolUse hook 可以记录调用量,帮助了解哪些 skill 更常用。好 skill 往往从几行说明开始,再随着实际遇到的问题逐步完善。

用具体材料表达规格

rich references 关注的则是如何用具体材料表达规格,包括四种形态:artifacts 功能生成的 HTML artifact、一套详细的测试套件、另一个代码库里待移植的函数,以及一份 rubric,也就是评分标准。借助 dynamic workflows(动态工作流),可以启动 verifier agent(核验智能体),按评分标准核对某个领域中什么算做得好;官方举的例子是怎样的 API 设计才算好。作者认为代码通常优于文字描述和图片:“For example, a HTML mockup of a design will generally produce better results than a description of the design or a screenshot.”

2.6Hooks:自动执行与权限边界

Hook 可以挂在不同的事件上。截至 2026 年 10 月,已有三十多个事件,包括 PostToolUseFailure、PermissionDenied、PreModelSwitch / PostModelSwitch、InstructionsLoaded、ConfigChange、FileChanged。v2.1.295 起,还可以设置 onFailure: "block",在 hook 自身出错时阻断操作。官方帮助中心的技巧合集列出了团队最常用的六种组合,其中 PermissionRequest 用于处理权限请求,让审批本身也能自动化。

事件团队拿它做什么
SessionStart每次启动时动态加载上下文
PreToolUse记录模型跑过的每一条 bash 命令
PostToolUseWrite/Edit 之后自动格式化,免得到 CI 才挂
PermissionRequest把权限请求转到 Slack、WhatsApp,或交给 Opus 审
Stop长任务结束时跑确定性检查,或催 Claude 继续
PostCompact压缩后把关键指令重新注入
"PostToolUse": [
  {
    "matcher": "Write|Edit",
    "hooks": [{ "type": "command", "command": "bun run format || true" }]
  }
]
自动格式化,可以直接抄进 settings.json。|| true 让格式化失败也不拦住这次编辑。

写进 CLAUDE.md、Rules、Skills 的都是指令,而指令是请求,不是保证。长会话、模糊情境、或读到一份带 prompt 注入的文件时,模型就可能漏掉。所以「绝不能发生」的事,删库、改生产、碰禁区,靠写一句「不要这样做」不够,只有 hook 和权限能做确定性拦截。

PreToolUse hook 可以在工具调用前执行检查,并以 exit code 2 阻断调用。企业环境还有两项组织级约束:managed settings 是唯一能实施组织级强制护栏的机制,用户本地配置无法覆盖;通过设备管理系统 MDM 下发的中央 CLAUDE.md,也不能被 claudeMdExcludes 排除。提效偏好适合放在 CLAUDE.md / Skills,安全红线则交给 hook + 权限。这与第四层的独立验收相呼应:执行者可以自测,但自测不等于独立验收。
AGENTIC LOOP · 智能体回合 每轮循环 · EACH TURN Setup 可选启用 · opt-in SessionStart UserPromptSubmit PreToolUse 阻断闸门 · exit code 2 拒绝该调用 PermissionRequest [ 工具执行 · tool executes ] PostToolUse ·(+Failure) PostToolBatch SubagentStart / SubagentStop TaskCreated → TaskCompleted Stop / StopFailure 回合收束 · wind-down TeammateIdle PreCompact → PostCompact SessionEnd 恢复会话 · resumed sessions 旁路 / 异步事件 · OFF-SPINE UserPromptExpansion slash 命令展开 Permission Denied auto-mode 拒绝 Elicitation + ElicitationResult MCP 索取输入 Notification 异步通知 ConfigChange 异步配置变更 WorktreeCreate 隔离 · isolation WorktreeRemove 拆除 · teardown CwdChanged / FileChanged 环境响应 InstructionsLoaded 异步加载 图例 · LEGEND 主干流程 · main spine 旁路 / 异步 · off-spine 阻断闸门 · blocking gate 会话边界 工具执行 收束/压缩

Hook 的触发点覆盖 agentic loop,也就是智能体执行任务的循环过程,从 SessionStart 延伸到 SessionEnd。每轮工具调用都会经过 PreToolUse → 工具执行 → PostToolUse。Hook 配置保存在主上下文之外,不随 compaction(上下文压缩)被压缩;其中 PreToolUse 可以在工具执行前确定性地阻断调用,hook 以 exit code 2 退出即可拦下这次调用。图中右侧的虚线簇表示旁路或异步事件,它们独立于主流程触发。

2.7MCP:接入外部工具和数据

MCP 用于把外部数据源和系统接入会话。这里讨论接入侧的使用,不涉及 MCP server 的设计。接入侧有两项降低开销的能力,都由客户端提供:

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

MCP 与 Skills 互补:MCP 提供工具和数据,Skills 提供操作知识,两者可以配合使用。(MCP server 五大设计模式不在本文范围。)

2.8维护:删掉不再需要的约束

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

工具定义(schema)和过长的指令都会挤占推理空间。设计复杂工具链之前,可以先确认通用工具能否完成任务。

2026 年 7 月 24 日,Anthropic 随 Claude Opus 5 发布了 Thariq Shihipar 撰写的官方博客,给出了一份减少过度约束的具体清单。面向 Opus 5 与 Fable 5,Anthropic 删掉了系统提示词中 80% 以上的内容,自家的编码评测没有出现可测量的下滑。作者这样概括原因:“Overall, we found that we were overconstraining Claude Code, both through our system prompt and in our CLAUDE.md files and skills.”

问题不只是提示词太长,也在于旧指令彼此冲突。指令本身会占用上下文;冲突指令还会带来注意力成本,模型必须先消解矛盾,才能开始执行任务。

A · 系统提示词的体量 旧 100% 新 <20% 删掉 80% 以上 · 编码评测无可测量下滑 B · 一个请求里的冲突指令 skill / CLAUDE.md / 用户请求 “leave documentation as appropriate” 系统提示词 “DO NOT add comments” 先消解矛盾 额外花掉的是注意力 才开始动手 多数时候仍能读出意图 容量成本 指令的 schema 与正文挤占 模型用于推理的空间 注意力成本 互相打架的指令要先被读懂、 权衡、取舍,之后才轮到干活 ≠
任务层要求酌情留下文档,系统层却禁止添加注释。两条指令落进同一请求,模型通常仍能读出用户意图,但官方发现,它在动手前必须先消解重叠约束之间的冲突。
旧做法新做法变了什么
给规则让模型判断从禁写注释,改为匹配代码库自身的注释密度与惯例
给示例设计接口示例会锁定探索空间,参数与枚举应直接表达用法
全部前置按需加载内建工具也可延迟加载完整定义
重复提醒简化工具描述用法集中在工具描述,减少重复提醒
手动写入记忆自动记忆不再靠 # 热键写入,改由系统保存相关记忆
简单规格丰富引用代码、测试、现有实现或评分标准都可以承载规格

渐进式揭露不只用于 skill,也用于工具。Claude Code 的部分工具采用 deferred loading(延迟加载),agent 必须先用 ToolSearch 找到完整定义,才能调用。官方列举的例子是自家的 Task tools。这样,系统可以挂载更多工具,而完整定义在实际使用前不会占用上下文。2.7 节讨论的是 MCP 客户端如何降低外部工具的上下文开销,同一机制也用于 Claude Code 的内建工具。

早期模型有时需要重复提醒,也更倾向于遵从上下文末尾的指令,因此系统提示词会重复工具说明。现在这些重复内容可以删去,把用法直接保留在工具描述里。

官方提供了命令 claude doctor 来执行这类检查。在 Claude Code 中可以运行 /doctor,它现在是内置 skill,别名为 /checkup。它会从上下文成本出发,检查用不到的 skill、MCP server 和 plugin,也检查 CLAUDE.md 的重复内容与体量,以及拖慢会话的 hook。v2.1.283 起,还提供了 /doctor prompt-audit。

3Sheet 03 · 编排②配 Claude Code

编排:计划该交给谁

编排要解决的是:任务计划由谁保存和推进,是让 Claude 在对话中逐回合决定下一步,还是交给脚本管理。基本原则是:小任务不拆分,大任务不让模型在上下文中独自记忆整个计划。

3.1Subagent:职责、类型与适用场景
三特性 / 三内置类型

它是什么

  • 三特性:全新起点(不继承历史)、并行、权限隔离(研究只读 / 实现可编辑)
  • 可嵌套:subagent 还能再往下派 subagent,默认到主会话以下三层(CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH 可调),这正是动态编排把一个任务摊到成百上千个 agent 的结构基础
  • General-purpose:全工具,复杂多步
  • Plan Agent:只读,研究加规划
  • Explore Agent:只读,快速搜索
五个适用场景

什么时候派出

  • 研究密集(读几十个文件)
  • 多个独立任务(并行)
  • 需要全新视角(不继承假设/偏见)
  • 提交前验证(独立检查)
  • 流水线工作流(明确阶段/交接)
10+ 文件
经验参考:超过此量可考虑委派
3+ 子任务
经验参考:多个独立子任务可并行
3≈1
理想并行情形:3 个 subagent 耗时约等于单个
3.2调用方式与协作边界

编排可以从自然语言开始,再把反复出现的做法固化下来:先对话,后自动化。

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

自定义 agent 既能接受委派,也能直接作为主会话运行。用 claude --agent <name> 按它的定义启动,或在 settings.json 中通过 "agent" 将它设为默认,就能为主会话指定相应的系统提示词。每个定义还可以单独设置 color、可用与禁用的工具、permission mode 和 model。官方给出的只读 agent 示例只开放 Read 工具:

# .claude/agents/ReadOnly.md
---
name: ReadOnly
description: Read-only agent restricted to the Read tool only
color: blue
tools: Read
---

You are a read-only agent that cannot edit files or run bash.
3.3并行:每个会话一个 worktree

除了在单个会话内编排任务,也可以同时运行多个会话。官方帮助中心的技巧合集于 2026-10-16 更新,汇集了 Claude Code 团队工程师的日常用法。合集将这项做法称为最大的效率提升:同时跑 3 到 5 个会话,每个放在自己的 git worktree 里。每个会话使用独立的工作目录,避免同时修改同一份工作文件。

3–5
团队同时开的会话数,每个一个 worktree
10
官方示例里一次拉起的并行 worktree subagent 数
/batch
迁移规模再大一档:几十、几百个 worktree agent,各自自测、各自开 PR
入口怎么开
命令行claude --worktree(或 claude --worktree my_worktree 指定名字),加 --tmux 开在独立 tmux 会话
DesktopCode 标签页勾选 worktree
非 git 版本库Mercurial / Perforce / SVN:在 settings.json 定义 WorktreeCreate 与 WorktreeRemove 两个 hook
subagentfrontmatter 加 isolation: worktree
# .claude/agents/worktree-worker.md
---
name: worktree-worker
model: haiku
isolation: worktree
---
之后自然语言下令即可:「Migrate all sync IO to async. Batch the changes and launch 10 parallel agents with worktree isolation. Each agent should test its changes end to end, then put up a PR.」规模再大就用 /batch migrate src/ from JavaScript to TypeScript,它会先就迁移问你几个问题再分派。

多个会话并行时,还需要能区分各自的任务和状态。团队会给 worktree 起名,用 za/zb/zc 这类 shell 别名切换目录,并为终端标签配色;/color 可以改变输入框颜色。终端通知则用于提醒哪个 Claude 需要人工处理。不少工程师还会专门保留一个 analysis worktree,只用于看日志、跑查询。

并行的前提仍是子任务彼此独立。worktree 可以隔离两个会话对工作文件的修改,却不能消除任务本身的顺序依赖(见 3.2 反模式)。合集将验证列为首要做法:每个并行 agent 都应能运行检查,为自己的改动提供验证依据。执行者自测与独立验收是不同的环节。

3.4长任务的权限与沙箱

并行和长时间运行需要减少不必要的人工中断。权限清单、自动审批和沙箱各有作用,减少确认仍需以明确的权限边界为前提。

控制 1
/permissions
放行常用安全命令,签入 .claude/settings.json,清单可审计
控制 2
auto mode
分类器逐个动作判断,安全的放行、有风险的仍交给人;Shift+Tab 随时切
控制 3
/sandbox
本机开源沙箱,文件 + 网络隔离,减少弹窗
控制 4
dontAsk
只在已沙箱化的环境里用 --permission-mode=dontAsk

官方推荐预先放行安全操作,作为跳过权限检查的替代方案。这样既能减少弹窗,也保留了可审计的放行清单。规则支持完整通配,例如 "Bash(bun run *)"、"Edit(/docs/**)"。Claude Code 自带一小组预先批准的安全命令,/permissions 中添加的规则叠加在这组基线之上。整套权限机制包含提示注入检测、静态分析、沙箱和人工监督等层次。

/sandbox 提供三种模式:沙箱化 BashTool 并自动放行;沙箱化 BashTool,但保留常规权限检查;不用沙箱。沙箱、远程控制和云端定时任务默认关闭,也可能被组织策略禁用。命令返回 "not available" 时,多半是管理员尚未开放。

长任务 · 首选

Stop hook 跑确定性检查

需要可审计流程时的首选。也可以让 Claude 完成后派一个后台 agent 验证,或用 PermissionRequest hook 把权限请求交给 Opus 扫描攻击迹象、安全的自动批准(见 2.6)。

长任务 · 慎用

社区插件 ralph-wiggum

不经 Anthropic 审核,受管环境里装第三方插件前先问管理员。--dangerously-skip-permissions 同理,只在沙箱里用。

与 2.6 的权限边界一致:需要强制执行的约束应落实到权限和 hook 中,而不能只写在指令里。

第三层续 · Workflow 与脚本调用

编排:从委派到脚本

3.5Workflow:把计划交给脚本

Subagent、Skill 与 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 可以并行派出多个 agent,这些 agent 也可以先加载 skill,再执行各自的任务。

3.6长任务中的三类失败模式

默认 harness 将规划与执行放在同一上下文中。长时间运行、大规模并行或对抗性任务,会暴露出三类失败模式。把计划交给脚本管理,正是为了减少这些风险:

done! 35 / 50
agentic laziness
偷懒

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

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

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

别做X
goal drift
目标漂移

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

Workflow 为这三类问题提供了结构上的约束:脚本保存完整清单,循环未遍历到末尾就不算完成,以此减少遗漏任务却提前结束的情况;验证交给另一个独立 agent,减少执行者对自己产出的偏袒;目标保存在脚本中,减少对 compaction 后对话记忆的依赖,降低目标漂移的风险。

3.7执行机制与运行限制
1
中间结果由脚本保存,减少上下文负担,支持运行几小时甚至几天。协调发生在对话之外,计划不再只靠对话历史保存。
2
质量套路固化成代码强制执行,而非指望模型每次记得,「代码强制每条结论都过 N 个独立 skeptic」。
3
整个编排可保存、可重跑:在 /workflows 选满意的 run,按 s 存成 command。
16
默认并发 agent 上限(核少更少;v2.1.269 起可调到 1–256)
1,000
单次 run agent 总数上限
0
运行中可插入的用户输入
1
resume 仅限同一会话

循环以满足收敛条件为终点,不预设固定轮数。Workflow 可以通过 prompt 直接触发,例如写 ultracode 或说「use a workflow」;也可以用 /effort ultracode 打开 Ultracode 设置,或运行已保存的 command。它还自带 /deep-research。单次 parallel() 或 pipeline() 最多处理 4,096 项。

截至 2026 年 10 月,所有付费套餐,以及 Anthropic API、Bedrock、Google Cloud、Microsoft Foundry 都可使用 Workflow;Pro 需在 /config 中开启。组织可通过 managed settings 中的 "disableWorkflows": true 整体关闭。Workflow 的 token 消耗远高于普通会话,适合先用小任务试验。大 run 开始前,可通过 /model 将不需要最强模型的阶段路由到小模型。

3.8六种可组合的编排方式

成对比较(comparative judgment),即把两个候选放在一起判断,通常比逐个给出绝对分数更可靠,尤其适合排序类任务。

3.9Bun 迁移:结果与前提
⚠ 旗舰案例 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.10代码之外的用例与使用成本

Workflow 的用途不限于编写代码。官方列出的九个用例中,过半与写代码无关:

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

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

并非每个任务都需要 Workflow。它的 token 消耗高得多,是否采用,取决于任务是否确实需要更多算力。多数传统编程任务并不需要一个五人评审团。

使用时,详细的 prompt 最关键。小任务可以采用 quick workflow,也可以配合 /loop、/goal,或写入 use 10k tokens 设置上限。满意的 run 可按 s 保存到 ~/.claude/workflows,或纳入 skill,作为继续探索其他用法的基础。

3.11非交互调用:claude -p 与 --bare

在脚本、CI 或 SDK 中调用 Claude Code,需要明确它会加载哪些配置。claude -p 以及 TypeScript / Python SDK 默认会搜索本地的 CLAUDE.md、settings 和 MCP。非交互场景应通过 --system-prompt、--mcp-config、--settings 显式传入配置,并加上 --bare,启动快约 10 倍:

claude -p "summarize this codebase" \
    --output-format=stream-json \
    --verbose \
    --bare
官方直说这是 SDK 最初设计时的疏忽,未来版本会把默认值翻转为 --bare,眼下需要手动加。

显式配置可以避免脚本中的 Claude 意外继承开发机上的个人设置,也让调用条件更容易复现。跨仓库工作时,用 --add-dir 指定其他目录的访问和权限,会话内则用 /add-dir。团队固定需要访问的目录,可以写入 settings.json 的 "additionalDirectories"。

云端会话和 Desktop 还支持 setup 脚本,用于在每次新建云端会话前安装依赖、修改设置、设置环境变量;resume 时跳过。

4Sheet 04 · 验证②配 Claude Code

验证:自测之后,独立验收

4.1让执行者获得测试反馈

独立验收并不取代执行过程中的自测。官方帮助中心的技巧合集将这项做法列为全文第一条:如果只采纳一个做法,就给 Claude 一个检查自己产出的手段。Claude 可以根据检查结果继续修改,形成反馈回路;这有助于发现和修正错误,但不等于结果必然正确。检查方式因领域而异,可以是 bash 命令、测试套件、模拟器或浏览器测试。

前端有两条现成路径:Claude Code 的 Chrome 扩展支持 Chrome、Edge,团队每次修改 Web 代码都会使用;Desktop 应用则能自动启动 Web 服务器,并在内置浏览器中测试。合集用一个类比说明浏览器的重要性:让人做网站却不给浏览器,结果不会好看。改完后在提示词末尾加 /simplify,会并行派出几个 agent,审查复用、质量、效率及 CLAUDE.md 合规情况(挂载方式见 用 skill 搭验证闭环)。

提示词逼出什么
“Grill me on these changes and don’t make a PR until I pass your test.”Claude 先考你,你通过了才开 PR
“Prove to me this works.”让它对比 main 与功能分支的实际行为
“Knowing everything you know now, scrap this and implement the elegant solution.”第一版做得平庸之后推倒重来
4.2用独立评估完成验收

代码生成成本降低后,验证更容易成为瓶颈。执行者可以自测,但生成与独立验收应当分开。只让干活的 agent 评价自己刚完成的产出,容易得到偏向肯定的判断,如同让开发者独自审查自己的代码。在这套分工中,Generator 负责生成,Evaluator 负责评估。把独立 Evaluator 的标准调严,比让 Generator 学会自我批评更容易。

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

用独立 review subagent,或 Workflow 的对抗式验证 pattern,让不同的 agent 分别承担执行与验收,并使用独立上下文。使用 Claude Code 已有的委派与编排能力,不重建 agent 主循环。

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

把产物改造成 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"。团队要求调查 bug/失败/异常时加载 debugging skill,执行根因分析,杜绝改一行试一下。
工具层
两个自建 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 层,并渐进推进。这不是装上就能用的方案,而是一套随任务持续维护的工作环境。

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

边搭边砍:harness 的半衰期

harness 的半衰期,来自模型能力的变化。每个组件都建立在某种能力假设上,假设过时,组件也可能失去作用。哪些部分可以删减,取决于所选模型的实际能力。

此前的模型迭代中已有这样的案例:Sonnet 4.5 接近上下文上限时,会因「上下文焦虑」提前结束任务,团队因此加入 context reset 逻辑。Opus 4.5 上线后,这一行为消失,相应的补偿代码也就不再需要。类似地,曾有 hook 通过拦截文件写入,强制先执行 Perforce p4 edit;原生支持到位后,这个 hook 也变得多余。审视 harness 时,除了「怎么让 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,先运行 /doctor,检查 skills 和 CLAUDE.md 的体量。Anthropic 在这一轮精简中删掉了 80% 以上的系统提示词。这个幅度可以作为参照,但不是固定指标。

134 天 / 126 版
Claude Code 自身迭代节奏(2026-01-06 至 05-19),周均 6.6 个版本,近七成日子都在出版本
287 天 / 263 版
区间拉到 2026-10-19(2.0.77 到 2.1.304),节奏没有放慢;默认模型、默认 effort 在这期间都换过一轮
$200→$124
同产出,模型升级后成本下降、流程更简
只会挪位置
值得关注的 harness 空间不会随模型进步缩小,只会迁移