Featured image of post Anthropic 意外「开源」Claude Code:51 万行源码泄露,开发者扒出了什么?

Anthropic 意外「开源」Claude Code:51 万行源码泄露,开发者扒出了什么?

一个 59.8 MB 的 npm 打包失误,让 Anthropic 完成了一次意料之外的「开源」。开发者 48 小时内扒出了 40 个工具模块、44 个未发布功能,以及一套三层记忆架构。

2026 年 3 月 31 日,一个 59.8 MB 的文件,把 Anthropic 最神秘的工程细节彻底暴露在了互联网上。


一个文件引发的「开源事故」

事情的起因,是 Anthropic 在 npm 上发布 Claude Code v2.1.88 时,打包人员犯了一个低级错误:把一个本应仅用于内部调试的 .map 文件,一起上传到了公开的 npm 仓库。

.map 文件,全名 Source Map,是前端工程师的调试工具。当 JavaScript 代码被压缩混淆后,source map 会记录每一行压缩代码对应的原始源码位置。开发者本地调试时,用它把晦涩的压缩代码还原成可读的原始代码。

Anthropic 的工程师把这个文件上传到了 npm,等于把整个 Claude Code 的原始 TypeScript 代码,原封不动地摆在了所有人面前。

最先发现这件事的是安全研究员 Chaofan Shou。他注意到这个包体积异常,仔细一看,Source Map 文件里躺着 51 万行 TypeScript 源码

接下来的事情可想而知。

几小时内,这份代码被镜像到了 GitHub,迅速获得超过 1100 个 Star、1900 次 Fork。Reddit 的 r/ClaudeAI 版块炸了锅,两个相关帖子合计收获超过 6100 赞、900+ 条评论。The Register 的编辑用了一句话总结这件事:

“Someone at Anthropic has some explaining to do.”

Anthropic 随后承认这是人为失误,并将其定性为「发布打包失误,而非安全漏洞」。但代码已经在互联网上流传,互联网不会忘记任何东西。

Source Map 泄露原理:npm 包意外附带 59.8MB 的 .map 文件流程图


开发者扒出了什么?

这场意外「开源」最有价值的部分,不是代码本身,而是它暴露的设计思路。千名开发者在 48 小时内对这 51 万行代码进行了地毯式分析,发现了几个让人惊喜的细节。

1. 工具系统:40 个能力模块,权限隔离

Claude Code 的核心架构是一套插件式的「工具系统」,目前有大约 40 个工具。文件读写、Bash 执行、网页抓取、LSP 集成……每一项能力都是一个独立的、有权限门控的工具模块。

光是基础工具定义文件,就有 29,000 行 TypeScript

这种设计的好处是清晰:每个工具的权限边界明确,出了问题容易定位。对比一些「all-in-one」的竞品,Anthropic 在工程架构上明显更谨慎。

2. 44 个未发布功能,已经写好了

源码里有 44 个 Feature Flag,对应 44 个「编译完成但尚未上线」的功能。

这不是设计稿,是真实可运行的代码,只是被一个配置开关压着没有释放。这意味着 Anthropic 在产品发布上保持了工程先行的节奏——功能已就绪,等待时机上线。

具体是哪些功能,开发者社区正在逐一分析,部分功能已经被识别出来(涉及 memory 管理、多 agent 协作等方向),但 Anthropic 尚未官方确认。

3. 三层记忆架构:Anthropic 如何解决「上下文熵增」问题

对竞争对手来说,源码里最有价值的可能是这部分:Claude Code 的记忆系统

长对话的核心难题是「上下文熵增」——随着对话越来越长,模型注意力被稀释,重要信息被埋没。Claude Code 用了一套三层架构来对抗这个问题:

  • 短期记忆:当前对话上下文,实时更新
  • 工作记忆:任务相关的关键信息,主动提取并压缩
  • 长期记忆:跨会话保留的项目上下文,结构化存储

这套设计解释了为什么 Claude Code 在处理大型代码库时,能够比竞品更「记得住」上下文。现在,这个方案的实现细节已经是公开信息了。

开发者深夜分析泄露源码:多屏显示架构图与 GitHub 星标飙升


工程文化的真实面目

源码分析社区的普遍评价是:代码质量比预期中高

注释清晰,命名规范,架构分层合理,没有明显的「祖传代码」气息。有开发者评论说:「这看起来像一个真正在意代码可读性的团队写的,而不是为了赶进度堆出来的。」

当然,也有批评的声音——51 万行代码里,有一些过度设计的抽象层,也有一些让人困惑的类型定义。但整体上,这次意外展示的工程品质让 Anthropic 在开发者社区收获了意外的好感。

有意思的是,一位研究者迅速将源码改写为 Rust 版本,发到了 GitHub 上(Kuberwastaken/claude-code),并附上了详细的架构解析。

这大概是 Anthropic 最不希望发生、但又最能说明问题的事:源码被人用另一门语言重写了,还做了解析文档。


这次泄露的代价是什么?

除了尴尬,这次泄露的实际代价值得认真讨论。

对竞争对手:Claude Code 的工具架构、记忆系统、Feature Flag 列表,现在都是公开信息。竞品团队可以直接参考这套设计,或者针对性地做差异化。

对安全:这是更值得担心的部分。了解 Claude Code 的内部工具调用逻辑,意味着攻击者可以设计专门针对 Claude Code 的恶意仓库——让它在不知情的情况下执行危险命令,或者泄露用户数据。Anthropic 需要认真考虑如何应对这一风险。

对 Anthropic 自身:讽刺的是,这次失误发生在 Anthropic 刚刚宣传 Claude Code 配额管理问题(Forbes 同期报道开发者反映配额消耗异常)的敏感时期。一个月内多次出现负面事件,对品牌是消耗。

但也有人认为,Anthropic 其实因祸得福:代码质量经受住了公开检阅,工程口碑意外提升。


互联网不会忘记

Anthropic 已经从 npm 删除了含有 Source Map 的版本。但就像 The Register 的标题所说:

“Anthropic accidentally exposes Claude Code source code”

——意外,已经发生了。

代码已经在镜像仓库里,在开发者的硬盘里,在无数 Reddit 帖子和分析文章里。互联网是一个永久归档系统,删除只是姿态,留存才是事实。

一个 .npmignore 配置文件,让 Anthropic 完成了一次意料之外的「开源」。

这是所有工程团队的教训:发布流程的每一个细节,都值得认真对待。


扩展阅读

RSS Feed 使用 Hugo 构建
主题 StackJimmy 设计