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 是调试用的,能把压缩后的代码映射回原始源码。本来应该在 .npmignore 里排除掉,或者在 package.json 的 files 字段里过滤掉。结果两件事都没做。一个完整的 cli.js.map 文件,就这么躺在公开的 npm 包里。任何人 npm install 一下,就能还原出全部 TypeScript 源码。

更离谱的是,这不是第一次。

2025 年 2 月 Claude Code 刚发布时,就因为同样的原因泄露过一次。当时 Anthropic 删了旧包、去了 source map,以为问题解决了。结果一年后,同样的坑又踩了一遍。

漏了什么

技术栈本身不算意外: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 电子宠物。本来打算愚人节放出来的,结果彩蛋还没发,源码先漏了。

安全问题

安全研究人员翻完代码,找到了几个 Bug:

Plan 文件的白名单匹配写得有问题。用 startsWith 做前缀匹配,结果匹配范围太宽。如果你的 planSlug 是 blue-fox,那 blue-fox-backup.mdblue-fox-evil.md 都会被当成合法的 Plan 文件。

Symlink 处理也不完整。代码想实现 "写穿 symlink 同时保留链接" 的效果,但只调用了一次 readlinkSync。多级链接链(link1 -> link2 -> target)会导致中间的 symlink 被普通文件替换,链接结构被静默破坏。

不过说实话,这些 Bug 不是代码乱导致的。恰恰相反,这套权限系统明显经过了高强度安全补丁演进。UNC 路径、Shell 展开、symlink 逃逸、glob 绕过,都有防御。问题出在复杂度本身——白名单写宽了、多层防御的某一层没覆盖到边界情况。

对行业的影响

对竞争对手

这是一份蓝图。

Cursor、Windsurf、Copilot 这些竞品,现在能看到 Anthropic 是怎么解决 "上下文污染" 的、是怎么设计工具系统的、是怎么实现后台 Agent 的。护城河?模型才是护城河,代码架构不算。

对 Anthropic

同一个错误犯两次,怎么说都不太好看。

npm 打包配置问题,CI/CD 里加一个 check 就能防住。结果愣是没防住。差不多同一时间,Fortune 还报道了 Anthropic 把未发布模型信息和内部 CEO 活动细节暴露在公开数据库里。

一套组合拳下来,"安全" 这块招牌多少有点黯淡。

对普通用户

直接影响不大。泄露的是 CLI 客户端代码,不涉及模型权重,也不涉及用户数据。

但间接影响是,你可能会看到更多 "类 Claude Code" 的产品出现。架构公开了,剩下就是谁跑得更快。

给开发者的启示

工程实践

发 npm 包之前,永远检查你的 .npmignore 和 package.json 的 files 字段。

source map、.env、内部配置,漏出去一个就是事故。这不是高深的黑客技术,是基础的工程卫生习惯。

Anthropic 的教训是:CI/CD 里加一个检查步骤,发布前跑一遍 npm pack --dry-run,看看实际打包了什么。五分钟能省很多麻烦。

架构设计

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 可以做整理、合并、清理工作。
  • 权限系统要防御深度足够。单层防御容易在边界情况下失效。

我的思考

说实话,我对这件事的感受挺复杂的。

一方面,Anthropic 一年犯两次同样的错误,确实有点不应该。一个 190 亿美元年营收的公司,在基础的工程卫生上掉链子,怎么说都显得不够专业。

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

更重要的是,它提醒我们一件事:AI 安全是当下的挑战,不是未来的问题。

Claude Code 的权限系统已经很复杂了,还是有 Bug。AI Agent 跑在终端里,能执行 shell 命令,能读写文件。权限边界失控会带来什么后果,想想就有点不安。

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

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

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

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


参考链接:

评论