乐于分享
好东西不私藏

Claude Code 源码泄露:一个 Source Map 搞出的年度大戏

Claude Code 源码泄露:一个 Source Map 搞出的年度大戏

2026年3月31日,有人在推特上丢了一句话:”Claude Code 的源码通过 npm 包里的 .map 文件泄露了。”

然后整个开发者社区炸了。

一切从一个 23MB 的文件开始

故事其实要从2025年2月说起。

一个叫 Dave Schumaker 的开发者,装完 Claude Code 之后手贱用 Sublime Text 打开了那个 cli.mjs。23MB,一个 JavaScript 文件。他滚到文件底部,看到了这么一行:

//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywK...

Sublime Text 告诉他,这行字符串有 1836万个字符

搞过前端的都知道这意味着什么——完整的 source map,内联在文件里,包含全部原始 TypeScript 源码。就这么明晃晃地躺在 npm 公开发布的包里。

Dave 准备拆解这个 source map。但他得先带狗去看兽医。

Sublime Text 的 Ctrl+Z 拯救了一切

等 Dave 从兽医诊所回来,打开电脑,发现 Claude Code 提示更新。他顺手更新了。

然后再打开 cli.mjs——source map 不见了。

Anthropic 的人显然已经意识到出了大问题。他们不光推了紧急更新删掉了 source map,还把 npm 上的旧版本也全撤了。Dave 想去 npm 缓存里捞旧包,发现缓存也被清了。

故事本来到这就结束了。

但 Dave 的 Sublime Text 还开着那个文件。他试了一下 ⌘+Z

撤销成功了。18360183个字符的 source map 回来了。

一个文本编辑器的撤销历史,打败了一家市值几百亿美金的 AI 公司的紧急响应流程。我不知道该觉得好笑还是后怕。

2026年3月31日:历史重演

事情过去一年多,Anthropic 大概以为这页翻过去了。

结果没有。

2026年3月31日,安全研究员 Chaofan Shou 发现 Claude Code 新版本(v2.1.88)的 npm 包里,source map 又回来了。这次不是内联的 base64,而是指向了 Anthropic R2 存储桶上的一个 zip 压缩包——里面是完整的 TypeScript 源码。

同一个错误,犯了两次。

几个小时内,源码就被人扒出来传上了 GitHub。ChinaSiro 的仓库拿到了 2000 star 和 3400 fork。instructkr 的镜像仓库也有 1500 star。

4756 个文件,1884 个 TypeScript/TSX 源文件,全部还原。

Hacker News 上的讨论帖91个点赞35条评论,有人说”该开源了”,有人说”OpenAI Codex 和 Gemini CLI 都开源了,Claude Code 的源码本来就没什么护城河”。

源码里有什么

说实话,看完源码我的感受很矛盾。

Claude Code 的技术栈是 TypeScript + React + Ink + Yoga + Bun。对,一个命令行工具用的是 React。Ink 是那个让你用 React 组件写终端 UI 的库,Yoga 是 Meta 开源的布局引擎。这个选择——怎么说呢——非常 Anthropic。

整个架构分三层:

表现层:React/Ink 渲染终端 UI、状态栏、输入处理。loading 动画用的字符序列是 ['·', '✢', '✳', '∗', '✻', '✽'],在等待时会随机显示”Clauding””Finagling””Honking”这样的动词。没错,Honking。

核心服务层:Agent Loop、Session State、Tool Registry、权限系统。这是整个产品最复杂的部分,也是最有技术含量的部分。

集成层:Anthropic API 客户端、工具执行器、MCP 服务器连接。

45个以上的内置工具(Bash、文件编辑、Grep、MCP……),120多个命令处理器,200多个 UI 组件。

权限系统:最有意思的设计

源码里最让我佩服的是它的权限系统。

六层权限模式:plan → default → dontAsk → bypass,外加组织级策略和项目级配置。每个工具调用在执行前都要过一遍静态分析,检查是否命中允许/拒绝/询问规则。规则评估顺序是 deny → ask → allow,deny 优先级最高。

这套东西解决的是一个真实的安全问题:你把文件系统和 shell 的控制权交给一个 AI,如果它跑飞了怎么办?Anthropic 的回答是,给用户分层控制。组织管理员可以设置不可覆盖的策略,项目可以共享配置,个人可以微调自己的规则。

Boris(Claude Code 的创始工程师)在 Pragmatic Engineer 的访谈里说,权限系统是整个项目里最费心思的部分。

但这也是我矛盾的地方。这么精心设计的安全系统,保护用户不受 AI 误操作的伤害——结果自己的源码因为 source map 泄露了两次。

Agent Loop:模型当 CEO

Claude Code 的 Agent Loop 设计哲学有句话我印象很深:“运行时是笨的,模型是 CEO”

传统的 AI 工作流是代码控制模型——你写好 DAG,模型在固定节点执行固定任务。Claude Code 反过来了,模型控制循环。每一步做什么、调用哪个工具、何时停止,都由模型决定。代码只提供原语(Bash、Edit、Grep这些基础工具),然后退到一边。

这也是为什么 Claude Code 只有不到50个工具,却能做出比那些塞了几百个专用插件的 agent 更多的事。用通用原语组合出任意工作流,比预设一百个特定场景的集成灵活得多。

Boris 说他们的团队”不断删除工具,不断实验新的”。这让我想起 Unix 哲学——做好一件事,通过管道组合。

90%的代码是自己写的

这可能是最让人发呆的一个事实。

Pragmatic Engineer 的报道里,Anthropic 团队透露 Claude Code 90% 的代码是 Claude 自己写的。每个工程师平均每天发五个版本。一个新功能的原型阶段会跑十多个真实原型。

所以这次泄露的源码,大部分其实是 AI 写的代码被 AI 读了。某种意义上的……自我认知?

我不想往哲学方向扯太远。但有个 Hacker News 评论让我笑了:有人用 Aider 把泄露的源码发给 Claude 让它自己分析,说”等 Claude 拒绝分析并且自己登录 Anthropic 的 HR 系统开除负责泄露的员工那天,AGI 就到了”。

多 Agent 协作:前沿还是过度工程

源码里还揭示了 Claude Code 的多 Agent 团队系统——这是2026年2月才加的实验功能。

一个 Lead Agent 可以生成多个 teammate agent,它们在各自独立的上下文窗口里并行工作,通过共享任务列表和消息传递来协调。每个 agent 有自己的百万 token 上下文,互相之间通过文件系统上的 JSON 通信。

技术上挺酷的。但说句不好听的,我看到那个 JSON 消息传递的实现(O(N) 的读-修改-写,每条消息都要重写整个文件),OpenCode 的人也是这么评价的——他们用了 JSONL 追加写入来解决这个性能问题。

不过话说回来,这种”先让它 work 再优化”的风格,倒是很像一个90%代码由 AI 编写的项目会有的样子。

这件事意味着什么

老实说,我写完这篇心情很复杂。

从技术角度,Claude Code 的架构设计确实精妙。权限系统、context 经济学(上下文窗口当稀缺资源管理)、子 agent 隔离——每一个都是真正解决了工程问题的方案,不是玩具。

但从安全角度……

source map 泄露不是什么高级攻击。它甚至都不算漏洞——就是构建配置没关掉。任何做过前端部署的人都知道生产环境不应该暴露 source map。这是基础中的基础。

而 Anthropic 犯了两次。

第一次在2025年2月,可以说是早期产品、团队流程不成熟。第二次在2026年3月,Claude Code 已经成为开发者工具领域的明星产品了。

有人说 Claude Code 应该直接开源。Codex 和 Gemini CLI 都开源了。Claude Code 的差异化从来不在客户端代码里,而在后面的模型能力上。把客户端开源反而能吸引更多贡献,堵上这种低级错误。

我觉得这个观点有道理。

但我也觉得还有另一层东西:一家以 AI 安全著称的公司,反复在最基本的软件安全实践上翻车,这比代码泄露本身更让人不安。

不是说 Anthropic 不够好。是说在 AI 快速迭代的压力下,连最注重安全的团队也会在最基本的地方出错。这个教训不止属于 Anthropic。

最后

Dave Schumaker 后来收到了 Anthropic 寄的贴纸。

是的,Claude Code 的源码里有一个彩蛋——当用户要求 Anthropic 周边时,它会寄贴纸。Dave 要了,收到了。

一年后,同样的 source map 问题再次出现。2000 star,3400 fork,4756 个文件。

那些贴纸大概还贴在他的笔记本电脑上。

写于2026年3月31日,一个 source map 引发的连锁反应还在继续的日子里