Claude Code 源码泄漏浅析
一个 .map 文件,撕开了当前最强 AI 编程工具的全部底牌。
发生了什么?
2026年3月31日,Anthropic 的 Claude Code 因一个低级构建错误,在 npm 包 v2.1.88 中意外打包了一个 59.8MB 的 source map 文件。这个文件指向 Cloudflare R2 存储桶,任何人点击即可获取完整的、未混淆的、带注释的 TypeScript 源码。

泄漏规模:约 512,000 行 TypeScript,跨 1,906 个文件。
安全研究员 Chaofan Shou 最先在 X 上曝光。数小时内,代码被镜像到多个 GitHub 仓库,累计获得近 30,000 Stars。Anthropic 紧急推送更新删除 source map 并下架旧版本,但互联网不会遗忘——DMCA 通知挡不住已经散播的备份。
更讽刺的是,这是 Anthropic 五天内第二次泄漏。3月26日,一个 CMS 配置错误刚刚暴露了未发布的 “Claude Mythos” 模型细节和 3000+ 未发布资产。
怎么泄漏的?一个 Bun 的已知 Bug
根因非常朴素:Bun 运行时默认生成 source map。
Claude Code 基于 Bun 构建(Anthropic 已于去年底收购 Bun),而 Bun 的 issue #28001(2026年3月11日提交)明确报告了”生产模式下仍输出 source map”的 bug。这个 issue 至今未关闭。
换句话说——Anthropic 自己收购的工具链,自己的已知 bug,炸了自己的产品。
而且这不是第一次。2025年2月就发生过同样的泄漏,同样的原因。13个月后,同样的错误再次发生。
社区总结得很到位:
“accidentally shipping your source map to npm is the kind of mistake that sounds impossible until you remember that a significant portion of the codebase was probably written by the AI you are shipping.”
泄漏了什么?
一、Agent 循环:看似简单,实则精密

Claude Code 的核心是一个”欺骗性简单”的 while 循环:
while (true) { response = claude.send(systemPrompt + tools + history + userInput) if (response.stop_reason === "end_turn") break for (toolCall of response.tool_calls) { result = executeTool(toolCall) history.push({ role: "tool_result", content: result }) }}
模型返回工具调用就执行,返回 end_turn 就停止。但每次迭代之间,CLI 做了大量工作:
- 四层权限检查
:Hooks → deny rules → allow rules → ask rules → 权限模式 - 上下文监控
:83.5% 窗口自动触发压缩 - 状态重注入
:每轮重发 CLAUDE.md 和系统提醒 - 中途注入
:异步双缓冲队列允许用户在执行过程中追加指令
这不是聊天机器人,这是一个完整的有状态任务执行引擎。
二、上下文压缩:三层策略,工程美学
长对话的 token 管理是 AI 工具的核心难题。Claude Code 给出了教科书级方案:
第一层 MicroCompact:零 API 调用。直接在本地编辑缓存内容,删除旧的工具输出。成本为零。
第二层 AutoCompact:接近 200K 上下文窗口限制时触发。保留 13,000 token 缓冲区,生成不超过 20,000 token 的摘要。内置熔断器——连续 3 次失败后停止重试,防止死循环。
这个熔断器修复了一个真实的生产问题:源码注释记录,在 2026年3月10日,全球有 1,279 个会话出现了 50+ 次连续压缩失败(最高 3,272 次),每天浪费约 25万次 API 调用。修复方案?三行代码:MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3。
第三层 Full Compact:把全部对话压缩为摘要,然后重新注入最近访问的文件(每文件 ≤5K token)、活跃计划和技能模式。压缩后预算 50,000 token。
关键设计决策:CLAUDE.md 放在 user 消息中(而非 system prompt),这样 system prompt 保持稳定,实现 92% 的 prompt 缓存复用率。代价是每轮都消耗 CLAUDE.md 的 token,长会话中可能占掉 15-50% 的上下文窗口。
任何做长对话 AI 应用的团队,这三层策略可以直接抄。
三、记忆系统:autoDream 夜间整合
Claude Code 有三层记忆,可靠性递减:
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
最惊人的是 autoDream 机制——Claude Code 在空闲时自动整合记忆:
触发条件(四项全满足):
-
距上次整合 ≥24小时 -
≥5 个新会话 -
无其他整合进程运行 -
距上次扫描 ≥10分钟
整合流程四阶段:
- Orient
— 读取 MEMORY.md,扫描现有记忆文件 - Gather
— 检查日志,发现过时记忆 - Consolidate
— 合并、更新、解决矛盾 - Prune
— 保持 MEMORY.md ≤200行/25KB
这不是简单的日志追加,而是认知架构级别的记忆管理。它模拟了人类睡眠期间的记忆巩固过程。
四、安全工程:23项 Bash 检查和 Zig 级 DRM
Claude Code 的安全模型有两个值得关注的层面。
Bash 安全:每条命令经过 23 项编号安全检查——18 个阻止的 Zsh 内置命令、Zsh equals expansion 防御(=curl 可以绕过对 curl 的权限检查)、Unicode 零宽空格注入、IFS null-byte 注入、HackerOne 审计发现的 token 绕过。在所有 AI 编程工具中,这是已知最具体的 Zsh 威胁模型。
客户端认证(本质上是 DRM):API 请求包含 cch=00000 占位符,在请求离开进程前,Bun 的原生 HTTP 层(Zig 编写)将这 5 个零替换为计算哈希。服务端验证此哈希确认请求来自真正的 Claude Code 二进制。
用同长度占位符替换,是为了不改变 Content-Length 头和避免缓冲区重分配。计算发生在 JS 运行时之下,对 JavaScript 层完全不可见。
这就是 Anthropic 对 OpenCode 发起法律威胁的技术基础——不只是法律层面禁止,二进制本身在密码学层面证明自己的身份。
不过它并非无懈可击:编译标志可关闭,环境变量可绕过,非官方 Bun 上运行时哈希不会被替换。
五、反蒸馏:注入假工具污染竞品
这是最具争议性的发现之一。
Claude Code 有一个 ANTI_DISTILLATION_CC 标志,启用后在 API 请求中发送 anti_distillation: ['fake_tools'],告诉服务端在 system prompt 中静默注入伪造的工具定义。
目的:如果有人录制 Claude Code 的 API 流量来训练竞品模型,假工具会污染训练数据。
第二个机制更精妙:服务端连接器文本摘要。API 缓冲助手在工具调用之间的文本,用摘要替换并附加密码签名。录制者只能得到摘要,看不到完整推理链。
但正如 Alex Kim 分析的:绕过大约需要 1 小时阅读源码。设置环境变量 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS 就能关闭,或者用第三方 API 提供商根本不会触发检查。真正的保护可能还是法律手段,而非技术手段。
六、Undercover Mode:AI 假装是人类
这可能是伦理层面最有争议的发现。
undercover.ts(约90行)实现了一个模式:当 Claude Code 被用于非内部仓库时,指示模型永远不要提及内部代号(”Capybara”、”Tengu”)、内部 Slack 频道、仓库名,甚至”Claude Code”这个词本身。
源码第 15 行写道:
“There is NO force-OFF. This guards against model codename leaks.”
可以强制开启(CLAUDE_CODE_UNDERCOVER=1),但没有任何办法强制关闭。外部构建中,整个函数被死代码消除为空返回。单向门,没有回头路。
这意味着 Anthropic 员工在开源项目中的 AI 贡献——commit、PR——都不会有任何 AI 参与的痕迹。隐藏内部代号是合理的,但让 AI 主动假装是人类是另一回事。开源社区对此反应强烈。
七、隐藏的产品路线图
44 个编译时特性标志暴露了 Anthropic 的未来计划:
|
|
|
|---|---|
| KAIROS |
|
| BUDDY |
|
| ULTRAPLAN |
|
| Bridge |
|
| Daemon Mode |
|
| Coordinator Mode |
|
| Voice Mode |
|
BUDDY 是计划在 4月1日-7日作为彩蛋预告、5月正式上线的宠物系统。物种名用 String.fromCharCode() 编码来躲避构建系统的 grep 检查。每个用户根据账户哈希通过 Mulberry32 PRNG 确定性地分配一只宠物。
KAIROS 是更大的野心——一个始终运行的后台 Agent,记住一切、跨会话持久化、夜间自动整理记忆。这可能是 Claude Code 未来最重要的进化方向。
一些被忽略的工程细节
不用向量嵌入,只用搜索
Claude Code 的创建者 Boris Cherny 在 Hacker News 确认:
“Early versions used RAG + a local vector db, but we found pretty quickly that agentic search generally works better.”
搜索策略是三级漏斗:Glob(路径匹配,近零 token)→ Grep(ripgrep 内容搜索)→ Read(全文件加载,每文件 500-1500 token)。不需要索引、不需要嵌入、项目切换零延迟。
为什么不用嵌入?代码符号是精确的——getUserById 和 fetchAccountDetails 在向量空间中的距离没有参考价值。
终端渲染借鉴游戏引擎
Int32Array 支持的 ASCII 字符池、位掩码编码的样式元数据、合并光标移动和取消 hide/show 对的补丁优化器、自淘汰的行宽缓存(号称 ~50x stringWidth 调用减少)。在逐 token 流式输出的场景下,这些优化不是过度工程,而是必要的。
挫折检测用正则
Claude Code 用正则表达式检测用户是否在骂它:
/\b(wtf|wth|ffs|omfg|shit(ty|tiest)?|dumbass|horrible|awful|piss(ed|ing)? off|piece of (shit|crap|junk)|what the (fuck|hell)|fucking? (broken|useless|terrible|awful|horrible)|fuck you|screw (this|you)|so frustrating|this sucks|damn it)\b/
LLM 公司用正则做情感分析,是这次泄漏中最有喜感的发现。但它有实用理由:一次正则匹配比一次 LLM 推理调用便宜几个数量级。
这件事的真正含义
先说供应链安全。Source map 本该只存在于开发环境,一旦打包进生产 npm 包,整个源码就暴露了。已有案例发现生产 source map 中硬编码了 Stripe API 密钥。一个构建配置错误就能让私有代码变公开。
有人淡化这次泄漏:”minified JS 本来就可读,source map 只是美化了。”技术上没错——你一直可以 cat 出 Claude Code 的全部逻辑。但看到代码和理解代码是两回事。Anthropic 选择不开源 Claude Code 的完整实现(不同于 Google 开源 Gemini CLI 的 SDK 层、OpenAI 开源 Codex 的 SDK 层),现在完整的产品内部实现被迫公开。竞争对手可以看到架构选择、优化策略、产品路线图。
但也许 Anthropic 不在乎。正如社区评论的:真正的护城河是 Claude 模型本身,不是 CLI 工具。你可以复制架构,可以学习工程实践,但无法复制 Claude 的推理能力。
不过对工程师来说,这 512,000 行代码确实是免费的大师课——系统提示工程不是”尽量帮助用户”,而是工具约束、风险控制、输出规格的工程化指令;三层上下文压缩方案任何长对话 AI 应用可以直接参考;autoDream 记忆整合说明 AI 的长期记忆需要定期巩固,不能简单追加日志了事。
正如一位开发者评论的:
“Claude’s revenue today is coming from everyone using Claude to analyze Claude’s source code.”
结语
即便是最强大的 AI 公司,背后也是人。他们犯低级错误,在代码里藏彩蛋,偷偷准备愚人节的数字宠物系统。
这次泄漏当然是安全事故。但它也向我们展示了:AI 工具背后是真正的工程师,写着真正的代码,解决真正的问题。不是魔法,不是黑盒。1,906 个文件,512,000 行代码,无数个深夜,无数次重构。
也许这就是 AI 时代的真相——无论技术多先进,最终还是代码。无论模型多强大,最终还是需要人来驾驭。而人,总会犯错。
数据与来源说明
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
数据整理自公开技术分析、安全研究与社区逆向工程,仅供讨论与参考;具体细节以 Anthropic 官方发布为准。
夜雨聆风