从泄露代码看Claude Code架构

五十万行泄露的源代码揭示,AI 编码工具的护城河不是模型,而是工具链。以下是泄露源代码中提取的三个架构模式。

从泄露代码看Claude Code架构
微信 ezpoda免费咨询:AI编程 | AI模型微调| AI私有化部署
AI工具导航 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo

2026 年 3 月 31 日,全球数千名开发者做了同一件事:他们将 Claude Code 自己的源代码喂给 Claude,让它解释自己。

Anthropic 的旗舰 CLI 工具刚刚泄露了其完整的 512,000 行 TypeScript 代码库,原因是 npm 包中意外打包了 source map 文件。几小时内,互联网就编目了 44 个功能标志、一个包含 18 个物种和扭蛋机制的电子宠物系统,以及 "Tengu"、 "Fennec" 和 "Penguin Mode" 等内部代号。

但功能清单不是重点。那篇文章已经有人写过了。这次泄露的真正价值不是 Claude Code 能做什么,而是 Claude Code 如何思考。而开发者付费给 Anthropic,按 token 计费,来理解 Anthropic 自己的产品?这不是讽刺,而是论点。

1、工具链即产品

大多数人以为 Claude Code 只是 Claude API 的一个轻量级 CLI 封装。一个终端界面,发送提示词,流式传输响应,处理一些文件操作。

泄露的源代码讲述了一个不同的故事。Anthropic 实际发布的是 512,000 行 TypeScript:一个带有双缓冲屏幕输出和 Yoga 弹性布局的自定义 React 终端渲染器、60 多个权限门控工具及延迟发现机制、一个生成并协调并行工作智能体的多智能体编排系统、一个在你睡觉时运行的后台内存整合引擎,以及一个拒绝崩溃的自愈查询循环。

这不是封装。这是一个 AI 智能体的操作系统。

Hacker News 社区分成两个阵营。一个阵营用赌场比喻驳斥了这次泄露:"老虎机的源代码对赌场经理来说无关紧要。"模型是钱。CLI 是可丢弃的。另一个阵营看到了相反的情况:模型是发牌员。工具链是赌场。而赌场很难建造。

数据支持第二个阵营。Opus 4.6 通过 API 向所有人开放,价格为每百万 token 5/25 美元。然而 VentureBeat 报告称,仅 Claude Code 一项就产生了 25 亿美元的年化经常性收入,其中 80% 来自企业采用。开发者不是在为模型付费。他们是在为使模型有用的工具链付费:工具编排、权限系统、上下文管理、错误恢复。剥离这些,你得到的只是一个昂贵的自动补全。

3 月 31 日的自指收入循环使这一点具体化。一位开发者专门构建了一个 MCP 服务器,让人们可以用 Claude Code 交互式地探索泄露的 Claude Code。另一位开发者在凌晨 4 点使用 Claude Code,在日出前将 Claude Code 的核心架构移植到 Python。中国的一个团队从泄露的源代码构建了一个 12 课时的逆向工程课程。开发者 Jingle Bell 用一句话概括了这一刻:"Claude 今天的收入来自每个人用 Claude 分析 Claude 的源代码。"

工具链为模型创造需求。模型为工具链创造收入。这个飞轮就是产品。

以下是泄露源代码中提取的三个架构模式。不是功能。不是代号。而是使飞轮旋转的工程原语。

2、模式 1:自愈查询循环

Claude Code 中最昂贵的工程不是 AI。而是错误处理。

Claude Code 的核心是一个查询循环。不是一个简单的请求-响应周期。而是一个 while(true) 状态机,管理跨迭代的可变状态对象,设计目标只有一个:永远不向用户暴露原始错误。

每次迭代遵循相同的序列。首先,它并行预取内存和技能(不是顺序执行,那会加倍延迟)。然后,如果上下文增长过大,它会应用消息压缩。接着,它调用带流式传输的 API。然后,它执行模型请求的任何工具。最后,它检查是应该继续循环还是返回。在每一步,循环都会跟踪它为什么没有终止,将转换原因存储在状态中,以便下一次迭代可以适应。

错误恢复级联才是真正工程所在。当某事失败时,循环不会崩溃。它会按顺序执行一系列越来越激进的恢复策略:

  1. 微压缩。 从上下文中修剪低价值消息以释放 token。
  2. 上下文折叠。 如果压缩不够,将整个对话段落折叠成摘要。
  3. Token 升级。 如果模型的输出预算在任务中途耗尽,注入一个不可见的元消息("直接继续,不要道歉,不要回顾")并继续。最多连续尝试三次,然后才暴露停止原因。
  4. 模型回退。 如果主模型不可用,回退到替代模型。
  5. 暴露错误。 只有在所有恢复路径都耗尽后,用户才会看到失败。
None
查询循环状态机

一位从压缩的 JavaScript 逆向工程了 12 个版本的 Claude Code 的开发者发现,5.4% 的工具调用被静默孤立:模型请求了一个工具,工具运行了,但结果从未返回。自愈循环正是为了吸收这类失败而设计的,而用户不会察觉。

None
工具并发批处理

工具执行增加了另一层。循环不会一次运行一个工具。它根据并发安全分类将工具调用分区成批。每个工具通过 isConcurrencySafe() 方法声明是否可以并行运行。只读工具(grep、glob、文件读取)并发运行,最多同时 10 个。写入工具(文件编辑、具有副作用的 bash 命令)串行运行。批次交替:读批次、写批次、读批次。流式工具执行器可以在模型仍在生成输出时就开始执行工具,重叠计算和 I/O 以减少延迟。

工具系统本身围绕着不浪费资源的原则设计。在 Claude Code 的 60 多个工具中,只有约 40 个在每个请求时加载。其余 18 个被标记为延迟加载。在模型通过专用的 ToolSearchTool 搜索之前,它们对模型是不可见的。当模型需要某种能力(LSP 集成、后台任务创建、cron 调度)时,它搜索、接收模式,并在同一回合中调用该工具。用户看不到任何异常。但上下文窗口轻了 20 万 token,因为模型不需要的工具模式从未进入工作内存。

甚至工具列表的顺序也很重要。工具在发送给 API 之前按字母顺序排序。这不是为了美观。这是缓存优化。字母顺序保持工具列表在请求间一致,最大化提示词缓存命中率。工具列表的缓存未命中意味着重新处理数千 token 的模式定义。按名称排序将其变成稳定的前缀。

对任何构建智能体系统的人来说,反直觉的教训是:可靠性不是核心循环工作后添加的功能。核心循环就是可靠性系统。Claude Code 的查询引擎有 46,000 行代码,不是因为主路径复杂,而是因为恢复路径复杂。

3、模式 2:睡眠时计算

Claude Code 做的最重要的事情是它在你不使用它时做的事情。

每个 AI 编码工具都有相同的问题。你和它一起工作数小时,构建上下文:架构决策、调试模式、构建命令、个人偏好。然后你关闭终端。下一次会话从零开始。模型没有昨天的记忆。你重复自己。它犯同样的错误。你构建的上下文消失了。

Claude Code 的答案是一个叫做 autoDream 的系统。名字是刻意的。它是 Claude,在做梦。

在会话之间,Claude Code 生成一个分叉子智能体,其唯一工作是内存整合。子智能体读取项目的内存目录,审查最近的会话日志,识别值得持久化的新信息,并重写内存文件,使其更清洁、更准确、对下一次会话更有用。这个子智能体的系统提示词说得很清楚:"你正在执行一次梦境,对内存文件进行反思性审视。将你最近学到的东西综合成持久的、组织良好的记忆,以便未来的会话可以快速定位。"

梦境不会随心所欲地运行。它有三道门触发器,三道门都必须通过才能开始整合。

None
三门触发系统

第一道门:时间。 距离上次梦境至少 24 小时。这可以防止当你在多个短会话中积极工作时过度整合。

第二道门:会话。 距离上次梦境至少 5 个会话。这确保有足够的新信号积累,使整合变得有价值。

第三道门:锁。 子智能体必须获取整合锁。这可以防止多个 Claude Code 实例活跃时出现并发梦境。

当三道门都通过时,梦境执行四个阶段。

第一阶段:定位。 列出内存目录。读取索引文件(MEMORY.md)。浏览现有的主题文件以了解当前状态。

第二阶段:收集信号。 搜索最近的来源,寻找值得持久化的新信息。优先级顺序:每日日志优先,然后是漂移的记忆(已更改的事实),然后是工作期间模型注意到的模式的转录搜索。

第三阶段:整合。 写入或更新内存文件。将相对日期("昨天")转换为绝对日期("2026 年 3 月 30 日")。删除与较新信息矛盾的事实。合并冗余条目。

第四阶段:修剪和索引。 保持 MEMORY.md 在 200 行以内,约 25KB。删除过时的指针。解决矛盾。索引必须保持足够小,以便在没有显著 token 成本的情况下加载到每个未来会话的上下文中。

梦境子智能体获得只读 bash 访问权限。它可以观察你的项目(读取文件、列出目录、检查 git 状态),但不能修改任何内容。这是一个安全边界:整合过程永远不应该对你的代码库产生副作用。

这个架构映射到加州大学伯克利分校的睡眠时计算研究中的一个概念:使用空闲计算周期来提高未来的推理效率。该论文建议从积累的上下文中预先推断可能的未来查询。autoDream 向后看而不是向前看。它组织过去的记忆,而不是未来的预测。但设计理念是相同的:在用户不等待时投入计算,以便下一次会话启动更快、上下文更好。

结果是一个四层内存架构,这是其他 AI 编码工具都没有发布的。

None
四层内存架构

第一层:CLAUDE.md。 你写的指令。静态的、人工编写的、始终加载的。

第二层:自动内存。 Claude 在每次会话期间写的笔记。构建命令、调试洞察、架构决策、你的偏好。自动积累。

第三层:会话内存。 单个会话内的对话连续性。标准上下文窗口管理。

第四层:自动梦境。 定期整合从第 1 层到第 3 层积累的一切。垃圾收集器。碎片整理器。快速眼动睡眠。

一本操作手册、一个记录员、短期记忆和快速眼动睡眠。这不是功能列表。这是认知架构。

4、模式 3:编译时功能消除

Source map 之所以泄露,正是因为安全系统起作用了。代码从构建中消除了。它只是没有从 map 中消除。

Anthropic 向两个受众发布一个代码库。内部员工获得 KAIROS(始终在线的持久助手)、BUDDY(电子宠物伴侣)、协调器模式(多智能体编排)、语音模式、桥接模式和十几个其他实验性子系统。外部用户一个都没有。外部构建不包含 if 语句后的死代码。代码在可执行文件中物理上不存在。

机制是 Bun 的 feature() 函数,它在构建时而不是运行时评估。当 Anthropic 构建外部包时,每个 feature('KAIROS') 调用都作为编译时常量解析为 false。Bun 的打包工具然后死代码消除整个分支。生成的 JavaScript 文件不包含 KAIROS、BUDDY 或任何其他门控子系统的任何痕迹。没有字符串引用。没有函数体。没有导入路径。消失了。

这是两层功能系统的第一层。

None
编译时 vs 运行时功能门控

第二层是通过 GrowthBook 的运行时门控,这是一个功能标志平台。运行时标志(在代码库中以 tengu_ 为前缀)控制渐进式发布、A/B 测试和已经通过编译时门控的功能的终止开关。检查这些标志的函数名为 getFeatureValue_CACHED_MAY_BE_STALE()。这个名字是代码中编码的设计决策:陈旧的数据对于功能门控是可以接受的。速度比新鲜度更重要。智能体永远不应该在标志检查上阻塞。

两层服务于不同目的。编译时消除是安全边界:内部功能必须完全不存在于外部产物中,即使是无法访问的代码也不行。运行时门控是发布机制:已经清除用于外部发布的功能可以逐步开启、监控,并在出现问题时立即终止。

第三层在两者之上:USER_TYPE === 'ant' 门控 Anthropic 员工独占的功能。这包括 staging API 访问、调试提示词转储、Undercover Mode(防止 Claude 在公开开源贡献中泄露它是 AI),以及仅限内部使用的工具如 ConfigTool 和 TungstenTool。

使这次泄露成为可能的讽刺是结构性的。Source map 存在是为了弥合编译输出和原始源代码之间的差距。它们在 sourcesContent 数组中包含原始源代码,不管编译器删除了什么。死代码消除保护可执行文件。它不保护 map。Bun 默认生成 source map。没有人配置它停止。没有人将 *.map 添加到 .npmignore。于是整个内部代码库以 59.8MB 的 JSON 文件发布到了 npm。

这不是第一次。同样的 source map 问题在 2025 年 2 月 Claude Code 首次发布时就出现了。Anthropic 静静地移除了它。13 个月后,它在版本 2.1.88 中又回来了。打包流水线从未修复。Bun 的默认值从未被覆盖。一家拥有世界上最好的语言模型的 AI 公司,一家专门构建 Undercover Mode 以防止内部信息泄露的公司,被 .npmignore 中缺失的一行击倒了。

对构建者的教训是结构性的,不是轶事性的。如果你要发布一个智能体产品,你需要一个两层功能系统。编译时消除用于安全边界(必须在外部产物中永远不存在的东西)。运行时标志用于发布控制(存在但被关闭的东西)。以及一个构建流水线,验证实际发布到你的包中的内容。每次发布前都运行 npm pack --dry-run。每次。

5、这对工具链 vs 模型辩论意味着什么

互联网花了一天时间编目功能。一个电子宠物系统。动物代号。一个检测你对 AI 说脏话的正则表达式。这些很有趣。它们不重要。

None

重要的是三个模式。

一个将可靠性视为核心产品而非附加功能的自愈查询循环。循环有 46,000 行代码,因为恢复路径(压缩、折叠、token 升级、模型回退)比主路径更复杂。工具执行按并发安全批处理。延迟发现保持 18 个工具不在工作内存中,直到需要时才加载。字母排序稳定提示词缓存。每个细节都服务于同一个目标:用户永远不应该看到失败。

一个将空闲周期投入内存整合的睡眠时计算系统。四层内存层(指令、笔记、会话回忆、梦境整合)构成了首个在生产编码工具中发布的认知架构。三门触发器防止过度做梦和不足做梦。梦境子智能体以只读方式运行。索引上限是 200 行。设计是克制的、深思熟虑的、经过生产锤炼的。

一个在产物级别强制执行安全边界的编译时功能消除系统。两层(编译时用于安全,运行时用于发布)服务于不同目的。结构性的讽刺是,正是为保持内部功能隐藏而设计的系统,使得 source map 泄露时如此有价值:编译器删除的一切仍在 map 中。

这些不是功能。它们是原语。任何生产级智能体系统最终都需要的构建块,无论它是建立在 Claude、GPT、Gemini 还是开源模型之上。泄露的源代码没有揭示 Claude Code 的竞争优势。它揭示了整个类别的工程需求。

竞争对手现在有了参考架构。一位开发者在日出前将核心模式移植到 Python。一个团队构建了 12 课时的逆向工程课程。Rust 移植版已经在进行中。模式会转移。它们总是如此。

但知道架构与执行它不同。Claude Code 在这些模式背后有 13 个月的生产锤炼。恢复路径在 12 个发布版本中不断精炼。针对真实企业工作负载调优的权限规则。一个具有五种公共模式、用于自动批准的 ML 分类器以及可以在执行前静默修改工具参数的预执行钩子(模型不知道它的输入被修改了)的权限系统。源代码是快照。运营知识不在仓库中。

3 月 31 日的自指循环结束了争论。开发者为模型付费以理解工具链。工具链是使模型有用的东西。模型是使工具链有利可图的东西。这个飞轮不是你可以从 source map 复制的东西。它是产品。


原文链接: Everyone Analyzed Claude Code's Features. Nobody Analyzed Its Architecture.

汇智网翻译整理,转载请标明出处