← 套装首页 从 0.2.8 到今天:Claude Code 的演进

从 0.2.8 到今天:Claude Code 的演进

claude-code-agent-kernel 白皮书 · 卷三(演进史卷)

卷首声明:本卷的材料性质

先说清楚这一卷和前两卷不一样的地方。

卷一、卷二的材料是本仓库:一棵从公开安装包携带的 sourcemap 还原出来的 Claude Code 0.2.8 源码树,src/ 下 211 个 TypeScript/TSX 文件,共 25979 行。那两卷的每一句论断都能对回文件和行号。本卷反过来:本卷的主体材料在仓库之外。0.2.8 之后发生的一切——自动压缩、Hooks、沙箱、Skills、插件系统、auto mode——在这棵还原树里没有对应文件,连一行 import 都没有。所以本卷给自己立三条规矩。

第一,凡涉及 0.2.8 之后产品的论断,句内标注来源类型:【官方 CHANGELOG】【官方文档】【官方博客】【npm 发布记录】【公开报道】【公开分析】。其中 CHANGELOG 原文与 npm 各版本发布时间是作者直接拉取核对的一手材料,官方博客正文已逐篇读取;【公开报道】与【公开分析】是二手材料,只用于「发生了这件事」级别的事实和「据称内部长这样」级别的转述,不与源码证据做任何拼接推理。

第二,0.2.8 的行号引用只出现在谈论 0.2.8 的段落,与外部来源标注不混排。读到行号,它指向的一定是这棵还原树;读到来源标注,它指向的一定是仓库外材料。

第三,凡「2.x 的内部结构如何」的句子,一律按公开分析转述处理。本仓库证明不了 2.x 的任何一行代码。这条口径继承自前两卷的审稿意见(R1-M2 / R2-M2),本卷全文沿用。

还原缺口声明。 本文分析的源码树还原自公开安装包中携带的 sourcemap(对应 Claude Code Research Preview 0.2.8),并非官方发布的完整源码。经逐文件核对,以下被引用的文件在还原树中缺失:src/Tool.ts(工具接口定义,全仓 43 个文件以 /Tool.js 结尾的路径引用它)、src/tools/MemoryReadTool/prompt.ts 与 src/tools/MemoryWriteTool/prompt.ts(两个记忆工具的 prompt 与描述文案)、src/utils/conversationRecovery.ts(会话恢复模块,被入口 cli.tsx 和 ResumeConversation.tsx 引用)。因此,本文中关于 Tool 接口形状的描述,是依据 15 处 satisfies Tool 实现与全部调用点反推的重建,而非对原始定义的直读;关于两个记忆工具向模型呈现的具体文案,本文不作转述。这也意味着该还原树不能原样通过 TypeScript 编译,本文所有关于 0.2.8 的结论均为静态走读所得,未在本机运行 0.2.8。

两次泄露不是一件事,必须先分开。 本仓库对应的是第一次:0.2.8 时代的公开安装包自身携带了 sourcemap,本仓库即由此还原。它算不算「事故」,公开材料没有定论,本文只陈述「安装包带有 sourcemap、社区据此还原了源码」这一事实。第二次发生在 2026 年 3 月 31 日:npm 上的 @anthropic-ai/claude-code 2.1.88 打进了一个 59.8MB 的 cli.js.map,约 1900 个文件、约 51.2 万行未混淆 TypeScript 随之公开【公开报道】。两次泄露相隔一年多,对应产品的两个时代。本卷引用的所有「今天的 Claude Code」,材料来自官方文档与对 2.1.88 的公开分析;本卷引用的所有「0.2.8 的 Claude Code」,材料来自本仓库。两者的证据等级不同,读者请随时看标注。

本卷的读法:第二节领回卷一的内核结论,不重复论证;第三节按时间线逐个能力过一遍,每个能力固定回答三个问题——是什么、为什么加、住在内核还是外层;第四节把这条时间线提成可复用的判断框架;第五节把框架落成一份给「自己造 Agent 的人」的路线图;最后是引用清单与查证失败记录。

回望:0.2.8 的内核长什么样

卷一已经论证过的事,这里只领回结论。

0.2.8 的 Agent 是一个薄的递归生成器:query() 从 src/query.ts:124 开始,整个文件 516 行。模型每回一段 content,循环把里面的 tool_use 块抽出来,按名字找到工具,跑完把结果写成 tool_result 拼回消息列表,再发给模型;content 里不再有 tool_use,循环就 return——query.ts:170 的注释明说 stop_reason === 'tool_use' 不可靠,所以结束条件看的是内容,不是状态字段。

围着循环的契约同样薄。一张工具表:src/tools.ts:23 的 getAllTools() 注册 12 个默认工具,MCP 工具从 tools.ts:41 起并入同一张表——外部工具协议从第一天就住在这张表里,没有单独的侧门。一个运行时权限函数,在工具调用点问人:checkPermissionsAndCallTool 从 query.ts:365 开始,query.ts:424 可见跳过权限检查的条件分支。工具失败被写成 is_error 的 tool_result 回灌给模型,取消、拒绝、打断则是写死文案的消息(src/utils/messages.tsx:36–43)——失败和打断都是消息,不是异常。一个 Ink REPL 把消息流画在终端上:src/screens/REPL.tsx 725 行,加上 src/components/ 下约 7961 行——界面比循环厚一个数量级,因为他们在研究「人怎么跟 Agent 协作」,不只是「循环怎么转」。

安全没有操作系统地板:白名单只有八条整句(src/permissions.ts:18–27),省弹窗靠前缀记忆——getPermissionKey 把批准过的命令记成 Bash(git commit:*) 这样的 key(src/permissions.ts:253–266),同前缀不再问。这意味着社会层安全(问人、看 diff)的爆炸半径是整台机器。上下文续命靠人手动敲 /compact:它独立调一次 querySonnet 拿摘要(src/commands/compact.ts:30–45),然后清屏、清空消息、把摘要塞回新会话(compact.ts:76–83)。TokenWarning 在 190k token 时变黄变红(src/components/TokenWarning.tsx:9),注释写明余量就是留给 /compact 的。

还有一层容易被忽略的:研究仪器。主请求温度写死 MAIN_QUERY_TEMPERATURE = 1,注释说明是给 binary feedback 留变化(src/services/claude.ts:58);thinking 预算只在 USER_TYPE === 'ant' 时才发给 API(claude.ts:529)。0.2.8 不只是产品,也是一台跑在自己用户身上的实验仪器——Anthropic 先拿自己人当受试者。记住这一点,后面路线图第六阶段还会用到。

一句话:0.2.8 的内核 = 模型每说一句话都要经过的最短路径。循环、工具契约、权限、界面四件事焊在一起;模型可以换,这四件换了产品就不再是它自己。当时的它没有自动压缩、没有 Hooks、没有沙箱、没有 Skills。下面按时间顺序看这四样是什么时候、以什么姿态长出来的,以及它们各自住在了内核的里面、外面,还是下面。

演进时间线

时间以 npm 发布记录与官方 CHANGELOG 为准;两者都是作者直接拉取核对的一手材料。版本号后的日期均为 npm time 字段的发布时间【npm 发布记录】。

演进时间线

图 1 演进时间线(手绘版):2025-02 的 0.2.8 到 2026-03 的 2.1.88 泄露事件;颜色标注每个能力住在哪一层——内核、外层、地板、材料学事件。

2025 年 2 月:起点

@anthropic-ai/claude-code 在 npm 上的创建时间是 2025-02-24,0.2.8 同日发布。这就是本仓库还原的那份 Research Preview。从 0.2.8 到 1.0.0 用了约三个月:1.0.0 发布于 2025-05-22。

2025 年 3 月:自动压缩(0.2.47)

是什么。 CHANGELOG 0.2.47 只有一行:Automatic conversation compaction for infinite conversation length (toggle with /config)【官方 CHANGELOG】。0.2.47 发布于 2025-03-18——离 0.2.8 只有二十二天。也就是说,至少从 0.2.8 算起,「人到阈值手动敲 /compact」这个形态只单独存在了不到一个月。后续版本继续打磨它:0.2.98 修过「auto-compact 跑了两次」的 bug,2.0.64 让 auto-compact 变成即时完成【官方 CHANGELOG】。

为什么加。 0.2.8 的压缩是人的动作:模型不会自己喊停,TokenWarning 黄了红了,得人看见、人敲命令。长任务——一次重构跑半小时——人会离开终端,循环不会。没有人按按钮的时候,唯一的兜底是撞上下文上限然后报错。自动压缩把触发者从人换成阈值,动作本身没变:还是另调一次模型拿摘要,还是把摘要接回消息列表。它在 0.2.8 里的对应物,就是那盏 token 警告灯加那条手动命令:灯提醒人,人敲命令;自动压缩只是把这两样接了起来。

住在哪一层。 这是四个能力里唯一往内核里长的一个。0.2.8 里 /compact 不动 query.ts 的任何一行,它是对消息列表的一次外科手术;而自动压缩的触发判断必须贴着「每次模型调用之前」检查 token 数,这个位置在循环里面,挂在外面够不着。据公开分析转述,2.x 的主循环从递归改成了 while 加多处 continue,压缩逻辑分多层插在循环体内——主动摘要、捕获 prompt_too_long 后压缩重试、截断冗长输出、整体折叠【公开分析】。本仓库证明不了这些结构,能下的结论只有一句:自动压缩是被每回合经过的,它有资格进内核;但这也让「内核不许膨胀」的纪律第一次真正受到考验。0.2 时代的 src/utils/state.ts 只有 25 行,文件头注释写着 DO NOT ADD MORE STATE HERE OR BORIS WILL CURSE YOU(第 4 行)——这句诅咒管得住全局状态,管不住循环体内的分支。

2025 年 6 月:Hooks(1.0.38)

是什么。 CHANGELOG 1.0.38:Released hooks. Special thanks to community input in https://github.com/anthropics/claude-code/issues/712. Docs: https://code.claude.com/docs/en/hooks【官方 CHANGELOG】。1.0.38 发布于 2025-06-30。Hooks 让用户在工具调用的生命周期事件上挂自己的脚本:PreToolUse 在工具执行前跑,可以放行、拦截或要求询问;PostToolUse 在执行后跑。一个 hook 的最低形态只有三样:matcher 写上工具名,command 写上脚本路径,脚本从 stdin 读进 JSON、用退出码或 stdout 的 JSON 表达决定【官方文档】。注意 CHANGELOG 的措辞——这个功能从社区 issue #712 里长出来,官方在发布条目里公开致谢。之后它持续加码:SessionStart、UserPromptSubmit、PreCompact、SessionEnd、SubagentStart 等事件陆续加入,1.0.41 给每条命令加了可选超时、给输入加了 hook_event_name【官方 CHANGELOG】。

为什么加。 0.2.8 的扩展点只有两个:写 MCP server(进工具表),或者改 CLAUDE.md(进系统提示)。想在「每次跑 Bash 之前过一遍公司合规脚本」「每次 Edit 之后跑一遍 lint」这种事,没有位置放。Hooks 给的恰恰是这个位置:不改循环、不改工具,在消息流的事件点上插外部进程。进程边界就是最硬的隔离——hook 脚本崩了,最坏结果是这一次调用被拦或放行,循环本身不会被拖进别人的代码里。

住在哪一层。 外层,教科书级的外层。hook 的判定结果汇入权限决策,但循环的签名、工具的契约一行不用动。看 CHANGELOG 后续条目就知道它长得多快而内核多稳:每一个新 hook 事件都是「在事件表上加一行」,不是「在循环里加一个分支」。这是「不改循环签名能加上吗——能,就是外层」的标准样本。代价也有公开记录:官方仓库的 issue 区里,hooks 不执行、决策字段文档缺失一类的报告持续可见(如 issue #9185、#19213)【公开报道】——判定逻辑从「权限函数」一处分散到「权限函数加 N 个本地脚本」,可调试性是真金白银换出去的。

2025 年 9–10 月:2.0、插件系统与 Skills

2.0.0 发布于 2025-09-29。本仓库没有 2.x 的任何文件,2.0 的内部结构本文不作断言;公开可见的是随后三周内三个密集的发布条目:

插件系统值得单独说三句。它是什么:把斜杠命令、子代理、hooks、MCP 服务器打成可从 marketplace 分发的包,安装、启用、卸载都是产品内动作【官方 CHANGELOG】。为什么加:hooks 和 skills 解决的是「一台机器上怎么扩展」,插件解决的是「一个团队、一个社区怎么分发扩展」——前者是机制,后者是物流。住在哪一层:外层套外层,它本身不生产新能力,只打包已有的几类外层能力。从 0.2.8 的视角看,这一步是「外层生态」正式成立的标志。Skills 和沙箱各值一节,下面分开说。

Skills(2.0.20)

是什么。 官方工程博客给的定义(博客发布日期 2025-10-16 为公开报道口径,与 2.0.20 的 npm 发布同日):Skill 是一个文件夹,里面必须有一个带 YAML frontmatter 的 SKILL.md(至少 name 和 description 两个字段),可以附带脚本、参考文档、模板。agent 启动时只把所有已装 skill 的 name 和 description 预载进系统提示;判断相关时才把 SKILL.md 全文读进 context;更深的材料按需再读。官方称之为 progressive disclosure(渐进式披露),并把它比作「给新员工的 onboarding 手册」【官方博客】。

为什么加。 0.2.8 的领域知识只有一条管道:CLAUDE.md 祖先链,全文常驻系统提示。它有两个天花板。一是常驻成本:十份流程文档全塞进去,每轮对话都在为它们付 token。二是一刀切:帮人写 PPT 的规矩,在修 bug 时也在场。Skills 把「常驻全文」改成「常驻一行描述、按需加载全文」,两个天花板同时抬高。机制取向很明确:skill 是 context 的新来源,不是循环的新零件。

住在哪一层。 外层。skill 的发现结果进系统提示——0.2.8 的系统提示本来就是分段的,由 formatSystemPromptWithContext 逐段拼接;skill 的激活是一次 Read,读文件这件事 0.2.8 的循环已经会做。不需要新循环,不需要改工具契约(接口为反推,限定如前),只需要系统提示多一段「可用技能目录」。这也解释了它为什么能那么快变成跨厂商格式(见下一节):不绑循环的扩展,谁都能实现。

2025 年 12 月:Agent Skills 成为开放标准,MCP 捐入基金会

2025-12-09,Anthropic 宣布把 Model Context Protocol 捐给 Linux 基金会下新成立的 Agentic AI Foundation,同批进入的还有 Block 的 goose 和 OpenAI 的 AGENTS.md【官方博客】。2025-12-18,Anthropic 再把 Agent Skills 作为开放标准发布在 agentskills.io,官方工程博客同页加了 update 注记【官方博客】;规范文本收在 anthropics/skills 仓库的 spec/ 目录【官方文档】。agentskills.io 首页写明:该格式由 Anthropic 原创、作为开放标准发布,目标是「build a skill once and use it across any skills-compatible agent」【官方文档】。公开报道显示,Skills 标准发布之前已有竞品 CLI 实验性支持该格式,发布之后跟进的 agent 产品更多【公开分析】。

把这两步放在一起看:2025 年底,「工具怎么进来」(MCP)和「知识怎么进来」(Skills)这两件外层的事,先后被交成了行业公共格式。一个「context 来源」层的格式,做成开放标准的成本几乎为零——它本来就不碰任何一家的循环;收益是让「写一份 skill 到处用」成为生态默认值。对照本卷后面的框架:越外层的东西,越容易标准化。

0.2.8 一侧的对照只需一行:getTools 把 MCP 工具并入同一张工具表(src/tools.ts:41 起),外部工具协议从第一天就没有侧门。内核从来不开放,外层逐一标准化——这条线本身就是本卷框架的一次公开展示。

操作系统沙箱(2.0.24)

是什么。 CHANGELOG 2.0.24 的条目上文已引,发布于 2025-10-20。实现层面,macOS 用 Seatbelt、Linux 用 bubblewrap,把 Bash 工具跑出来的命令关进操作系统级隔离:文件系统写权限收进工作区,网络出站按域名白名单收敛【官方文档】【公开分析】。配置面收在一个 sandbox 设置块里——allowWrite、denyRead、allowManagedDomainsOnly 之类,此后 CHANGELOG 里有大量对这些配置的修补与加固:sandbox.failIfUnavailable(沙箱起不来就报错退出,而不是裸跑)、沙箱模式下禁止写 .claude/skills 目录、修各类边界绕过【官方 CHANGELOG】。加固条目的密度本身说明:这是一条被真实攻击面反复打磨的防线。

为什么加。 这一节的动机可以用 0.2.8 自己的代码讲清楚。0.2.8 的安全全押在社会层:权限对话框问人,人看 diff 决定。省弹窗的机制是前缀记忆,批准一个前缀后同前缀命令不再问(src/permissions.ts:253–266);白名单只有八条整句(src/permissions.ts:18–27),因为下面没有地板,名单长一点都不诚实。后果卷一已经推过:拼接出来的命令可以落在已批准前缀上不再问人,而 0.2.8 没有任何操作系统层的东西接住它,爆炸半径是整台机器。

官方后来在 auto mode 博客里承认了同一件事的产品侧表现:实践中用户会批准 93% 的权限弹窗,approval fatigue 是真实行为【官方博客】。问人这道防线,防得住偶发,防不住疲劳。沙箱就是在下面垫地板:即使权限层全部失守——人点错了、前缀记忆放行了、模型被 prompt injection 带偏了——进程写不出工作区、连不上未批准的域名,操作系统仍然兜底。

住在哪一层。 内核下面,不是里面。注意 CHANGELOG 的措辞:sandbox 是「a sandbox mode for the BashTool」——它包在 Bash 工具的执行之外,没有长进循环。这正好还上 0.2.8 留下的那笔债:社会层安全是正确的产品,但不该是唯一的防线。地板就位之后,上面的社会层才敢放宽——只读名单可以从八条整句长成更宽的规则,因为兜底的换成了操作系统。反过来说,把后来产品的宽名单抄回 0.2.8 是错的:名单的长度是地板的函数。

2026 年 3 月:auto mode——权限层自己也在演进

官方工程博客(2026 年 3 月)披露了 auto mode:把「批准/拒绝」从人手里委托给一个 transcript 分类器。分类器只看用户消息和工具调用,刻意不看 assistant 自己的文本和工具输出——防 agent 说服分类器,也防 prompt injection 从工具结果渗透;两阶段设计,先单 token 快筛,被标记的才上链式推理。官方数字:10,000 条真实内部流量上误拦率 0.4%,52 条真实「过度主动」动作上漏放率 17%【官方博客】。官方把这 17% 称为「the honest number」,并明说 auto mode 不是高风险场景下人工仔细审查的替代品。

值得记录的不是分类器指标,而是它在本卷框架里的位置:权限决策点没有动,动的是坐在决策点上的角色。0.2.8 里那个位置坐的是人(canUseTool 弹对话框);auto mode 让模型坐在那里,人退到配置层。「模型每说一句话都经过权限调用点」这条内核属性没变——这反而再次印证了什么才是内核。

2026 年 3 月:2.1.88 泄露——一次材料学事件

2026-03-30 22:36(UTC),@anthropic-ai/claude-code 2.1.88 发布【npm 发布记录】。公开报道的时间口径是 3 月 31 日:这个版本的包里带出了 59.8MB 的 cli.js.map,映射出约 1900 个文件、超过 51.2 万行未混淆 TypeScript,几乎是完整的客户端 harness 源码【公开报道】。研究者 Chaofan Shou 在 X 上发帖指出此事,数小时内代码被镜像到多个 GitHub 仓库;sourcemap 一旦散开就无法收回,这也是它和普通「线上事故」的区别【公开报道】。

对本卷而言,这件事的性质是材料学的:它让「今天的 Claude Code 内部长什么样」第一次有了源码级公开材料,催生了一批 2.x 源码解读【公开分析】。本卷对这批材料的态度是固定的——凡出自它们的结构性论断(例如主循环改为 while、压缩分四层、对外构建期 DCE 裁掉内部路径),一律标【公开分析】并按转述处理。本仓库是 0.2.8 的还原树,证明不了 2.1.88 的任何一行;两次泄露之间隔着一年多的产品演进,把两棵树的细节混在一张表里,是这类文章最常犯的错误,本卷不犯。

判断框架:什么该进内核

阿舟图解:内核边界——能挂在外层的,就不进内核

回看这条时间线,四个能力里只有一个(自动压缩)长进了循环体,其余全部住在循环外面或下面。这不是巧合,可以提成三问。以后看到任何 agent 新功能,按顺序问。

内核分层图

图 2 分层归位(手绘版):内核、外层与地板各住了谁;右侧是「进内核之前的三问」速记。

一问:模型每说一句话都要经过它吗? 是,才有资格进内核。tool_use 的抽取、tool_result 的拼回、权限调用点、取消——这些写在循环的签名和主干里,动它们就是动产品本身。自动压缩的触发判断贴着每次模型调用,所以它是四个能力里唯一拿到内核门票的;代价是循环体因此明显变厚(公开分析转述的 while 加多处 continue)。

二问:不改循环签名能加上吗? 能,就是外层,而且应该永远是外层。Hooks 是事件表上的一行,Skills 是系统提示里的一段目录,插件是打包格式——CHANGELOG 上它们各自的条目都是「加」,没有一条以「循环重写」为前提。外层的好处不优雅但硬:可以后装、可以拆掉、可以被另一家公司独立实现。Skills 能成为开放标准,靠的正是这个性质。

三问:它失效时谁兜底? 答案决定它在内核里面还是下面。权限问人失效时,0.2.8 没有任何东西兜底——所以白名单只能有八条。沙箱失效时有权限层,权限层失效时有沙箱。需要操作系统兜底的防线,正确位置是垫在内核下面:包在执行之外,而不是长进 query.ts。

拿 0.2.8 里已有的两个零件过一遍这三问,可以看到框架不是事后贴的。子代理在 0.2.8 就是工具表里的一个工具:AgentTool 的 isReadOnly() 写死返回 true,旁边注释 // for now...(src/tools/AgentTool/AgentTool.tsx:186–187)——调度器把它当只读工具,于是它能进并发批次;它内部会再开一层自己的循环,但外层循环的签名不知道、也不需要知道。按三问归位:不是每回合经过(只在模型选择调用时经过),不改签名能加,所以它是工具,不住内核。反例是 ArchitectTool:isEnabled() 写死 return false(src/tools/ArchitectTool/ArchitectTool.tsx:51–52)——一个已经写好但被关掉的规划工具。0.2.8 的作者选择把「规划」留在模型侧,而不是在循环里加一个 planner 层。这两个零件合起来,就是 0.2.8 对三问的原始回答:能当工具的一律当工具,循环里只留非留不可的。

三问也有管不着的地方:它回答「住哪一层」,不回答「该不该做」。auto mode 就是例子——按三问,它属于「决策点上的角色替换」,位置完全合法;但 17% 的漏放率意味着它适不适合你的场景是威胁模型问题,不是架构问题【官方博客】。框架负责把东西放对位置;放对位置之后要不要用,还得自己算爆炸半径。

三问合成一句:换模型不换的是内核;能后装、能拆掉、失效时有别人兜底的,是外层;给内核兜底的东西,住在内核下面。 0.2.8 自己就执行过这条纪律:src/utils/state.ts 25 行,第 4 行 Boris 的诅咒,内核不许长新状态。此后一年的演进史证明,真正难的不是写出内核,是在压缩、hooks、skills、沙箱全都进来之后,内核还认得出来。

给自己造 Agent 的人:一份演进路线图

如果你要自己造一个 coding agent,0.2.8 到今天这条线给出的建议不是「照抄现在的 Claude Code」,而是按这个顺序长。

第一阶段:先把内核做小到能给人用。 一个循环(递归或 while 都行,0.2.8 证明 516 行够)、一张统一工具表(读写文件、bash、搜索,五六个工具起步)、一个在调用点问人的权限函数、一个能把消息流画出来的界面。失败写成 tool_result 而不是抛异常;取消就是生成器 return。这两条不是风格偏好:失败写成消息,模型才有机会在下一轮自己修,抛异常等于替模型认输;取消即 return,循环里就不必再多一种控制流。0.2.8 在这个规模上已经能给人用——Trust Dialog、八条白名单、token 警告、手动压缩,就是「刚能用」的最低产品壳。

第二阶段:加记忆,不加循环。 CLAUDE.md 当记忆是这个阶段唯一需要的扩展。它教你的事会贯穿后面所有阶段:给模型的 context 是分段拼的,每段有自己的生命周期,稳定的前缀才有 cache 命中。

第三阶段:先垫地板,再放宽名单。 这是 0.2.8 到 2.0.24 之间最重要的一条教训,顺序不能反。工作区可写、其余只读、网络默认受限——用操作系统原语(Seatbelt、bubblewrap、容器)实现,不要用 prompt 实现。地板就位之后,白名单、只读规则、「always allow」才敢放宽。没有地板时名单短是诚实;有了地板还只有八条,是懒惰。

第四阶段:压缩自动化。 手动 /compact 先行,阈值触发跟上。接受这是你唯一需要往循环体里插的逻辑,并把它写成循环里一个显眼的、有名字的步骤,而不是散落各处的 if。token 计数用「从最近一条带 usage 的 assistant 消息累加」这种土办法就够——0.2.8 就是这么干的。

第五阶段:开外层扩展点。 先 hooks(事件表加外部进程,进程边界即隔离),再 skills(系统提示目录加按需加载),两者都够不着循环签名。如果你的 hooks 系统需要改循环才能加新事件,那是设计错了,回去改事件表。分发需求出现后,再考虑把扩展打成包——那是物流问题,不要提前解决。

第六阶段:仪器与迭代。 0.2.8 里的 Statsig 事件、binary feedback、USER_TYPE=ant 内部开关说明 Anthropic 从第一天就在拿自己当受试者。你不需要 Statsig,但你需要在权限弹窗、重试、压缩这些点上留计数。没有这些数,「模型变好了」和「harness 变好了」永远分不清,每一次升级模型你都要重新猜一遍自己的代码还有没有价值。

什么时候才该动循环本身?这份演进史里只见过一种充分理由:每回合都要做、且挂在外面够不着的判断——自动压缩的触发就是这种。其余所有「让 agent 更聪明」的冲动——加 planner、加反思层、加图编排——都应该先在工具和外层里试一遍。0.2.8 里那个被写死关闭的 ArchitectTool 说明,连作者自己都把「往循环里加规划」的冲动摁住过。

还有一条贯穿所有阶段的纪律:每个阶段结束,重新量一次内核的厚度。0.2.8 的内核是一个 516 行的文件加一个权限函数。你的内核每长一次,都应该能回答「这次长进来的东西,模型每说一句话都经过它吗」。答不上来的,挪出去。

最后回答一个读到这里自然会有的问题:既然今天的 Claude Code 已经有了这一切,为什么不直接照它的现状开工?因为现状是演进的结果,不是设计的起点。0.2.8 证明一个 516 行的循环加三样契约就能成立;后面的每一样能力,都是在「已有产品必须继续工作」的约束下长出来的,它长着的地方,未必是你在白纸上该放的地方。先有小内核,再有外层,再垫地板——这个顺序,2025 年有一个真实的产品替你付过一遍学费,你不必再付。

首尾再对一次。这套白皮书的起点是一份 sourcemap,本卷写到的终点事件也是一份 sourcemap:0.2.8 那份带出了产品的童年,2.1.88 那份带出了产品的后来。中间隔着的,就是这条时间线——循环没有换,循环的周围和下面长出了一整个生态。下次再有新的 agent 能力发布,你可以先不问「它强不强」,先问那三个问题:每回合经过吗?不改签名能加吗?失效了谁兜底?三个问题答完,它住在哪一层、会不会长久,基本就有数了。

引用清单

官方一手材料(作者已直接拉取或阅读核对,核对日期 2026-08-19):

  1. anthropics/claude-code CHANGELOG — https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md —— 0.2.47 自动压缩、1.0.38 hooks 发布、2.0.12 插件系统、2.0.20 Skills、2.0.24 沙箱等条目原文,及 0.2.98 / 1.0.41 / 2.0.64 等后续条目。
  2. npm 发布记录 — https://registry.npmjs.org/@anthropic-ai/claude-code —— 各版本发布时间(0.2.8:2025-02-24;0.2.47:2025-03-18;1.0.0:2025-05-22;1.0.38:2025-06-30;2.0.0:2025-09-29;2.0.12:2025-10-09;2.0.20:2025-10-16;2.0.24:2025-10-20;2.1.88:2026-03-30T22:36Z)。
  3. Anthropic 工程博客:Equipping agents for the real world with Agent Skills — https://www.anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills —— Skills 定义、progressive disclosure 三段;页面顶部注记开放标准发布于 2025-12-18。
  4. Agent Skills 开放标准 — https://agentskills.io —— 格式定义与「跨产品复用」口径。
  5. anthropics/skills 仓库 — https://github.com/anthropics/skills —— 示例技能与 spec/ 规范目录。
  6. Anthropic 工程博客:Claude Code Auto Mode — https://www.anthropic.com/engineering/claude-code-auto-mode —— 93% 批准率、分类器架构、0.4% FPR / 17% FNR。
  7. Anthropic 新闻:Donating the Model Context Protocol and establishing the Agentic AI Foundation — https://www.anthropic.com/news/donating-the-model-context-protocol-and-establishing-of-the-agentic-ai-foundation —— 2025-12-09,MCP 捐入 Linux 基金会旗下 AAIF。
  8. MCP 官方博客:MCP joins the Agentic AI Foundation — https://blog.modelcontextprotocol.io/posts/2025-12-09-mcp-joins-agentic-ai-foundation/ 。
  9. Claude Code Hooks 官方文档 — https://code.claude.com/docs/en/hooks —— 链接文本出自 CHANGELOG 1.0.38 条目;该域名在本写作环境无法直接打开,以 CHANGELOG 内文为准。
  10. 社区 issue #712(hooks 功能的来源,CHANGELOG 致谢)— https://github.com/anthropics/claude-code/issues/712 。

公开报道 / 公开分析(二手材料,仅用于事件事实与 2.x 结构转述):

  1. Everything you need to know about Sourcemaps — https://neciudan.dev/everything-you-need-to-know-about-sourcemaps —— 2.1.88 事件:59.8MB cli.js.map、约 1900 文件、51.2 万行。
  2. Claude Code Leak 2026: What 512K Leaked Lines Revealed — https://aithinkerlab.com/claude-code-leak-2026/ 。
  3. The Claude Code Leak and IP Considerations — https://www.cfnlaw.com.hk/the-claude-code-leak-and-ip-considerations/ 。
  4. What we can learn from Claude Code source leak(Swift Discovery Issue #1027,2026-04-05)— https://onmyway133.com/posts/what-we-can-learn-from-claude-code-source-leak/ —— 2.x 结构转述:四层压缩、USER_TYPE=ant 路径对外 DCE、__SYSTEM_PROMPT_DYNAMIC_BOUNDARY__ 缓存边界等。
  5. Inside Claude Code: An Architecture Deep Dive — https://zainhas.github.io/blog/2026/inside-claude-code-architecture/ —— 2.x 架构公开走读。
  6. Sandboxing Coding Agents: The 9-Second Argument for Isolation — https://dikrana.dev/blog/sandboxing-coding-agents/ —— Seatbelt / bubblewrap 实现细节的公开分析。
  7. Agent Skills as an Open Standard(Paperclipped,2026-03-23)— https://www.paperclipped.de/en/blog/agent-skills-open-standard-interoperability/ —— 开放标准前后的采用链。
  8. The Agent Skills Ecosystem in 2026(agentman.ai)— https://agentman.ai/blog/agent-skills-ecosystem-report-2026 —— agentskills.io 于 2025-12-18 发布的口径。
  9. Claude Code 官方仓库 issues(hooks 使用中的问题样本)— https://github.com/anthropics/claude-code/issues/9185 、 https://github.com/anthropics/claude-code/issues/19213 。
  10. Anthropic 工程师忘了加一行 .npmignore(稀土掘金转载,2026-05-06)— https://juejin.cn/post/7636280185700728842 —— 事件发现过程的中文报道。

查证失败或未能定位的条目(如实记录):前两卷草稿点名的 Siddhant Khare 2.x 源码分析一文,本次写作未能定位到可核对的 URL,故正文不依赖其具体论断,相关转述改用上面第 14、15 条替代;Chaofan Shou 的 X 原帖未直接读取,事件发现过程以第 20 条中文公开报道的转述为准;code.claude.com 文档域名在本环境不可达,沙箱与 hooks 的官方文档细节以 CHANGELOG 条目文本和公开分析交叉印证;Skills 官方工程博客的发布日期(2025-10-16)来自公开报道口径,博客页面本身未直接展示日期。