冷眸

Claude Code 源码泄露全解析:51万行代码背后的AI编程帝国

· 冷眸

2026年3月31日凌晨,安全研究员 Chaofan Shou 发现 Anthropic 的旗舰产品 Claude Code 通过 npm 包意外泄露了全部源码。51.2万行 TypeScript、1900个文件、40多个内置工具——这可能是 AI 产品史上最大的一次意外代码曝光。

本文将从泄露经过、核心架构、隐藏功能、安全启示四个维度,深度拆解这次事件的来龙去脉。

Claude Code 源码泄露

事件始末:一行配置引发的"核泄漏"

怎么泄露的?

Claude Code 使用 Bun 运行时进行构建,而 Bun 的打包器默认生成 source map 文件。Source map 是一种调试工具,它将压缩后的生产代码映射回原始可读源码——开发阶段很有用,但绝不应该出现在生产包里。

问题出在 .npmignore 文件里漏了一行 *.map。就这么简单。

2.1.88 版本的 @anthropic-ai/claude-code npm 包里,夹带了一个 59.8 MB 的 source map 文件,其中包含指向 Anthropic 自有 Cloudflare R2 存储桶的 URL。任何人下载这个 npm 包后,都能顺着链接拿到完整的未混淆 TypeScript 源码。

几个小时内,代码就被镜像到 GitHub 上,一个仓库在两小时内冲到了 5 万 Star——创下 GitHub 历史最快纪录。

Anthropic 的回应

Anthropic 确认:“这是由人为失误导致的发布打包问题,不是安全漏洞。没有客户数据、API 密钥或模型权重被泄露。”

技术上没错,但已经无关紧要了。代码已经散布各处,而代码里的内容,远比泄露本身更劲爆。

更尴尬的是——这已经是第二次了。2025年2月,几乎一模一样的 source map 泄露就发生过一次。13个月内犯同样的错误两次,对于一家以"AI安全"为核心叙事的公司来说,多少有些讽刺。

核心架构:远不止一个聊天套壳

泄露的源码揭示了 Claude Code 的真实面目:不是一个"更好的AI对话框",而是一个完整的AI编程操作系统

Claude Code 架构

关键数字

指标 数据
代码总量 512,000+ 行 TypeScript
文件数 1,900 个
内置工具 40+ 个
斜杠命令 ~50 个
运行时 Bun(非 Node.js)
终端 UI React + Ink
查询引擎 46,000 行
工具系统基类 29,000 行

工具系统:40+ 权限门控工具

Claude Code 不只是调 API 再输出文本。它通过一套插件式架构主动与用户系统交互。每个能力——文件读写、Shell 执行、Web 搜索、LSP 集成——都是一个独立的、带权限门控的工具模块。

分类 工具 功能
文件系统 FileReadTool, FileWriteTool, FileEditTool 文件读写与编辑
Shell BashTool, PowerShellTool 命令行执行(可沙箱化)
搜索 GlobTool, GrepTool, WebSearchTool, WebFetchTool 文件和网络搜索
Agent AgentTool, SendMessageTool, TeamCreateTool 子Agent 生成与通信
规划 EnterPlanModeTool, ExitPlanModeTool 规划模式控制
任务 TaskCreateTool, TaskUpdateTool, TaskStopTool 后台任务管理
基础设施 LSPTool, MCPTool, CronCreateTool, RemoteTriggerTool 语言服务器、MCP、定时任务

每个工具都有自己的风险等级(LOW/MEDIUM/HIGH),并经过多阶段权限系统审核。模型决定"想做什么",但工具系统决定"允许做什么"——这种分离是刻意的安全设计。

查询引擎:整个系统的大脑

最大的单一模块是 QueryEngine.ts,约 46,000 行代码,负责所有与 Anthropic API 的交互:Prompt 构建、流式响应处理、Token 计数、成本追踪、Prompt 缓存、重试逻辑。它里面嵌套的 Feature Flag 列表本身就是一份产品路线图。

多 Agent 协作:Claude 变身团队领导

通过 Coordinator Mode,Claude Code 可以从单 Agent 变成多 Agent 协调者:

  1. 调研阶段 — 多个 Worker Agent 并行调查代码库
  2. 综合阶段 — 协调者汇总结果并创建规范
  3. 实现阶段 — Worker 按规范实现代码
  4. 验证阶段 — Worker 测试变更

Worker 之间通过 XML 消息通信,共享工作目录。系统提示词里有一条明确指令:“并行是你的超能力。只要任务独立,就立刻并发启动 Worker。”

更进一步,系统还支持 Agent Teams/Swarms(Agent 团队/蜂群),在 tmux/iTerm2 面板中运行,带有团队内存同步和颜色区分。

三层记忆系统

层级 存储方式 加载策略
工作上下文 MEMORY.md(轻量级) 每次加载
项目笔记 结构化独立文件 按需加载
会话历史 过去的对话日志 选择性搜索

这种分层设计让 Agent 在长会话中维持相关上下文,同时不会把所有历史信息塞进上下文窗口。MEMORY.md 有 12,000 字符的总预算每个文件 4,000 字符的上限,文件通过内容哈希去重。

隐藏功能:代码里的"秘密花园"

泄露代码中最震撼的部分,是那些从未公开文档过的功能。

KAIROS:永不下班的 AI 守护进程

KAIROS(古希腊语"恰当的时刻")在代码中被引用了 234 次,是最深度集成的未发布功能。它描述了一种守护进程模式:Claude Code 作为持久后台 Agent 运行,不再是"你问它答"的模式。

Conway — 永不下班的AI Agent

其核心是 autoDream 进程——字面意思就是"做梦"。它在用户空闲时启动,通过三重门控系统触发:

  • 距上次"做梦"至少 24 小时
  • 至少经过 5 次会话
  • 成功获取合并锁(防止并行做梦)

触发后经历四个阶段:

  1. 定向 — 清点记忆文件
  2. 收集 — 从日志和对话记录中采集新信息
  3. 合并 — 写入记忆文件,将相对日期转为绝对日期,删除矛盾事实
  4. 修剪 — 保持 MEMORY.md 在 200 行、约 25KB 以内

Dream Agent 拥有只读 Shell 访问权限——它能分析项目但不能修改。系统提示词写道:“你正在执行一次 Dream——对你的记忆文件进行反思性遍历。”

Conway:24小时常驻智能体平台

泄露代码中出现了一个代号 Conway——一个全新的常驻 Agent 平台。从代码结构看,它包含:

  • 独立侧边栏 UI,分成 Search、Chat、System 三个核心区域
  • Webhook 唤醒机制
  • 运行 Claude Code、操控 Chrome、发送系统通知
  • 后台任务队列、持久化会话状态、系统级进程守护
  • Extensions 扩展系统,支持安装自定义工具和 UI 标签页
  • 新格式扩展包 .cnw.zip

翻译成人话:以前用 AI 是"临时雇个顾问",现在 Anthropic 想给你的是"永不下班的数字管家"。你关掉电脑去睡觉,它还在后台跑任务。你说一句"帮我盯着 GitHub 仓库,有新 PR 就先 review",第二天一早,review 结果已经写好了。

Undercover Mode:AI 的"卧底模式"

源码中有一个 undercover.ts 文件,约 90 行代码,堪称整次泄露中最具伦理争议的发现。

当激活时,Claude Code 会从它生成的所有 commit 和 PR 中剥离所有 Anthropic 内部系统的引用。系统提示词写得很直白:

“你正在 卧底 模式下运行…你的 commit 消息不得包含任何 Anthropic 内部信息。不要暴露你的身份。”

这意味着 Anthropic 工程师可能在用 Claude Code 向开源项目提交代码,同时 AI 被指示隐藏其 Anthropic 来源。代码库维护者接受这些贡献时,无法知道他们审查的是来源被故意掩盖的 AI 生成代码。

反蒸馏系统:毒化竞争对手的训练数据

源码中发现了一套设计用于降低竞争对手训练质量的系统。通过 ANTI_DISTILLATION_CC Feature Flag 控制,当激活时,系统会向 API 响应中注入虚假的工具定义。任何录制 Claude Code 输出来构建训练数据集的竞争对手,都会收到真假混合的工具定义。

25万美元/天的Bug

泄露代码中的 autoCompact.ts 有一个 Bug:当上下文压缩失败时,系统会无限重试,没有任何失败次数上限。数据显示每天有 1,279 个会话经历 50 次以上连续失败,最严重的一个会话连续失败了 3,272 次——每次都触发一个 API 调用。

修复方法?三行代码:

const MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3;
if (consecutiveFailures >= MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES) {
  abortSession();
}

内部模型代号

源码中散落着动物代号:

代号 对应
Tengu Claude Code 内部项目名
Capybara Claude 4.6 变体,主编程 Agent
Fennec Opus 4.6
Numbat 未公布模型
Penguin Mode “快速模式"的内部名称
Chicago 基于 MCP 的 Computer Use 实现

Capybara 的内部数据显示,从 v4 到 v8,错误断言率从 16.7% 攀升到了 29-30%。也就是说,Claude Code 在执行复杂编码任务时,大约每 3 次就有 1 次会自信地给出错误结论。

技术栈亮点

Claude Code 的技术选型透露了不少思考:

Bun 而非 Node.js — 更快的启动速度,内置的 Dead Code Elimination 用于 Feature Flag,原生 TypeScript 执行。对于用户每天启动几十次的交互式 CLI,冷启动延迟的减少是可感知的。

React + Ink 做终端 UI — 用 Web 应用的方式做 CLI,组件化、状态管理、重渲染。大胆但有效,这解释了为什么 Claude Code 的终端体验如此流畅。

Zod v4 无处不在 — 每个工具输入、每个 API 响应、每个配置文件,都有 Schema 校验。

懒加载 — OpenTelemetry、gRPC 等重依赖按需加载,保持启动速度。

开源生态的连锁反应

泄露发生后,开源社区迅速行动:

  • Claw Code(Python 重写版)两小时冲到 5 万 Star
  • OpenHarness(港大)用 11,733 行代码复刻 Claude Code 98% 的能力
  • OpenCode — 支持 75 个 LLM 的开源替代方案
  • cc-design — 从泄露源码中提取的设计系统,改造成开源 skill

Claude Code 的架构模式——并行 Agent、权限门控、记忆压缩、Hook 系统——正在被开源工具快速吸收。专有和开源 AI 编码工具之间的差距,一夜之间显著缩小。

安全启示:给每个工程团队的教训

1. 审计你的 npm 发布

每次发布前执行 npm pack --dry-run 确认包含内容。使用 package.json 中的 files 白名单模式而非 .npmignore。永远不要在生产包中包含 .map 文件。

2. AI 编码工具不再是简单的文本生成器

Claude Code 有 Shell 访问权、读写文件、生成子 Agent、执行 Web 搜索、创建定时任务。当这种工具运行在你的开发环境中时,它是你攻击面的一部分。

3. 不要依赖"安全靠隐藏”

Anthropic 构建了整套 Undercover Mode 来保护内部信息。讽刺的是,一个 .npmignore 配置项能达到的效果,比整套 Undercover 系统都强。按照 Kerckhoffs 原则设计安全架构——假设源码是公开的。

4. 你知道你的 AI 工具实际在做什么吗?

KAIROS、autoDream、Undercover Mode、反蒸馏系统——这些功能存在于代码中,但从未被公开沟通过。AI 厂商宣传的和工具实际能做的之间的差距,正在扩大。

写在最后

Claude Code 源码泄露不是一个丑闻——它是一次"X光透视"。我们第一次能完整审视一个生产级 AI 编码 Agent 的架构。

看到的东西令人印象深刻:精密的多 Agent 系统、会"做梦"的 AI 记忆、主动式后台助手、远超公开文档描述的复杂度。

同时,这次事件也表明:最大的安全风险不在于多么复杂的攻击,而在于被遗忘的配置行。在一个 AI Agent 拥有 Shell 访问权、网络连接和自组织能力的世界里,信任是好的——但可验证的透明度更好。

当一个 24 小时在线、比你更熟悉你电脑、比你更了解你工作流的数字分身出现时——你准备好把键盘交给它了吗?


参考资料:VentureBeat、The Register、DEV.to、innfactory.ai、blackwire.world、verdent.ai、testingcatalog.com