200字
Claude Code 源码泄露:51万行代码给我们上了什么课
2026-04-01
2026-04-01

Claude Code 源码泄露:51万行代码给我们上了什么课

2026 年 3 月 31 日凌晨,一个叫 Chaofan Shou 的实习生在 X 上发了一条帖子。他说 Claude Code 的源码漏了。

几个小时后,1906 个 TypeScript 文件,512000 多行代码,被镜像到 GitHub 上,被数千名开发者下载、分析、讨论。Anthropic 的明星产品,年度营收 25 亿美元,就这么被扒了个精光。

怎么漏的

说出来你可能不信——他们在 npm 包里留了一个 60MB 的 source map 文件。

Source map 是调试用的,能把压缩后的代码映射回原始源码。结果两件事都没做。一个完整的 cli.js.map 文件,就这么躺在公开的 npm 包里。任何人 npm install 一下,就能还原出全部 TypeScript 源码。

漏了什么

技术栈本身不算意外:Bun 做运行时,TypeScript 写代码,React + Ink 画终端界面,Commander.js 解命令行参数。都是很正常的选择。

真正有价值的是架构设计。

三层记忆系统

Claude Code 解决了一个困扰 AI Agent 很久的问题:上下文污染。长对话跑着跑着,模型就开始胡说八道。

他们的方案是一个三层记忆架构:

  • MEMORY.md:一个轻量索引,每行大概 150 字符,存的是"指针"而不是数据
  • Topic files:按主题分散的知识文件,按需加载
  • Transcripts:原始对话记录,从来不完整加载,只 grep 需要的部分

核心思想是 "怀疑式记忆"——模型被要求把自己的记忆当成 "提示",每次操作前都要去实际代码里验证。写文件成功了才能更新索引,失败了就当没发生过。

这套东西对我们来说,基本上是一份现成的设计文档。

KAIROS:后台运行的 Agent

代码里还有一个叫 KAIROS 的 feature flag,出现了 150 多次。它是一个后台守护进程模式。

现在的 AI 工具大多是被动响应的。你问它才答。KAIROS 不一样——它在你离开的时候自动跑。有个叫 autoDream 的逻辑,会把零散的观察合并、把逻辑矛盾清理掉、把模糊的判断变成确定的事实。

等你回来,Agent 已经把该整理的东西都整理好了。

内外有别

代码里用 process.env.USER_TYPE === 'ant' 来区分 Anthropic 内部员工和外部用户。内部员工能用 ConfigTool、TungstenTool、REPLTool 这些额外的工具和命令。

还藏了一个彩蛋:BUDDY,一个 ASCII 电子宠物。本来打算愚人节放出来的,结果彩蛋还没发,源码先漏了。

给开发者的启示

架构设计

Claude Code 的架构有几个值得借鉴的点:

启动性能优化:main.tsx 的前 20 行,在 import 任何模块之前,就用副作用触发了 MDM 配置读取和 macOS 钥匙串预取。利用后续模块加载的 135 毫秒窗口做并行预热,实测能省 65 毫秒。

模块懒加载:重型模块全部动态 import,只在真正需要时才拉进来。OpenTelemetry 大概 400KB,gRPC 大概 700KB,能不加载就不加载。做 CLI 工具时,每一毫秒都值得计较。

Feature Flag:大量使用 Feature Flag 控制功能开关,通过 Bun 的编译时常量折叠实现。代码里到处是 feature('KAIROS') ? ... : null 这种写法。

AI Agent 设计

如果你在开发 AI Agent,Claude Code 的源码泄露提供了一份参考答案:

  • 不要把所有东西都塞进上下文。用索引 + 按需加载的方式管理记忆。
  • 让模型"怀疑"自己的记忆。每次操作前验证,失败不更新索引。
  • 后台维护很重要。用户不在的时候,Agent 可以做整理、合并、清理工作。

我的思考

这次泄露对开发者社区来说是件好事。AI Agent 的设计一直是个黑盒,各家都在摸索。现在有一份 51 万行的参考代码摆在那,能省很多弯路。

我翻那些泄露代码的时候,看到了 BUDDY 那个彩蛋——一个 ASCII 电子宠物,本来要在愚人节放出来的。

代码写得很可爱。注释里还有程序员留下的玩笑。

那一刻我突然意识到,这 51 万行代码不只是 "知识产权" 或 "商业机密"。它是一群人一年多的工作成果,有认真的架构设计,有深夜写的 Bug 修复,也有藏在角落里的小幽默。

泄露是事故。但代码本身,是人写的。


参考链接:

评论