Claude Code 源码泄露事件深度剖析

Claude Code 源码泄露事件深度剖析

作者:吴佳浩

撰稿时间:2026-3-31

最后更新:2026-4-1


一行 .map 文件,让价值数百亿美元的 AI 编程工具"裸奔"了。


📌 事件速览

2026年3月31日,安全研究员 Chaofan Shou 在 X 上发了一条简短的帖子:

"Claude code source code has been leaked via a map file in their npm registry!"

翻译成人话:Claude Code 的源代码,因为一个 .map 文件,彻底泄露了。

没有黑客攻击,没有内鬼,没有高级漏洞利用------

就因为发 npm 包的时候,忘了把 source map 文件删掉


1️⃣ 发生了什么

Source Map 是什么?(前端同学一带而过,后端和AI同学可以看看)

先科普一下,Source Map(.map 文件)是现代前端工程里的标配工具。

正常发布流程是这样的:

flowchart LR A[TS/ES6 源码] --> B[编译压缩] B --> C[混淆后的 JS] B --> D[.map 映射文件] C --> F[生产环境] D -.-> G[调试时还原源码]

Source Map 的核心就是一个 JSON 文件,里面有两个关键数组:

字段 作用
sources 原始文件路径列表
sourcesContent 对应的完整源代码

只要有这个文件,任何人不需要反编译、不需要逆向,直接打开就是原始 TypeScript 代码

Source Map 只能在开发调试环境使用,绝对不应该出现在生产发布包里

Anthropic 这次不仅带了这个文件,还带了 sourcesContent------等于把源码和钥匙一起塞进了快递包裹。

具体有多严重?

数据项 数值
npm 包版本 v2.1.88
包体积暴涨 17MB → 31MB(多了14MB)
.map 文件大小 57MB
泄露源文件数 1906 个
代码总量 512,000 行 TypeScript
工具数量 ~40 个内置工具
Slash 命令 ~50 个
暴露内容 工具逻辑 + 权限系统 + 未发布功能

Anthropic 事后立刻删除了这个文件,但 npm 包一旦发布就收不回来了------源码已经在社区疯狂流传

更讽刺的是:这不是第一次。

早在2025年2月,Claude Code 刚上线 npm 时就因为同样的原因泄露过一回,后来修掉了。一年后,最新版 v2.1.88 又把 source map 打进去了。


2️⃣ 泄露了什么------Claude Code 内部架构全览

整体架构:四层体系

Claude Code 不是一个简单的"聊天包装器",它是一个完整的工程级 AI Agent 系统

flowchart TB subgraph UL["用户层"] CLI[终端 CLI] VSCODE[VS Code 插件] JETBRAINS[JetBrains 插件] WEB[浏览器 UI] end subgraph ML["编排层"] QE[Query Engine
46,000 行] COORD[Coordinator
多Agent协调] end subgraph TL["工具层"] FT[File/终端工具] WEBTOOLS[Web工具] AGENT[Agent编排] IDE[LSP/Jupyter] MCP[MCP集成] end subgraph MEM["记忆层"] DREAM[autoDream
记忆整理] MEMMD[MEMORY.md
持久化] COMPACT[上下文压缩] end subgraph SEC["安全层"] PERM[权限分级] SANDBOX[沙箱] GUARD[路径防护] end UL --> ML ML --> TL TL --> SEC MEM --> ML

从外到内,一层层来看:

第一层:用户层------三种入口

flowchart LR A[Claude Code] --> B[终端 CLI] A --> C[IDE 插件
VS Code / JetBrains] A --> D[浏览器 UI
给 ULTRAPLAN 用] B <--> E[JWT 双向认证] C <--> E D <--> E E[Bridge 通信层]
  • 终端 CLI:核心入口,用 React + Ink 渲染(是的,命令行界面用 React 写的)
  • IDE 插件:通过 Bridge 层和 CLI 双向通信
  • 浏览器 UI:为 ULTRAPLAN 预留的远程规划界面

第二层:编排层------46,000 行的大心脏

Query Engine 是整个 Claude Code 最大最核心的模块,占了约 46,000 行代码。

flowchart LR A[用户消息] --> B[Query Engine] B --> C[LLM API 调用] C --> D{返回类型判断} D -->|text| E[流式输出] D -->|tool_use| F[工具执行] D -->|stop| G[任务完成] F --> H[tool_result 回传] H --> B

它负责所有 LLM API 调用、流式响应、缓存和上下文编排。

开启 Coordinator Mode 后,还能变成多 Agent 调度中心,同时管理多个并行的 worker agent。

第三层:工具层------40+ 工具有权限门控

Claude Code 的工具系统不是随手拼的,每个工具都通过 getAllBaseTools() 注册,按 feature gate、用户类型、环境变量过滤后才暴露给模型

mindmap root((工具注册表)) 文件操作 FileRead / FileWrite FileEdit / Glob / Grep Grep底层用ugrep加速 终端执行 BashTool PowerShellTool 可选沙箱隔离 Web交互 WebFetch / WebSearch WebBrowser Agent编排 AgentTool / SendMessage TeamCreate / TeamDelete 任务管理 TaskCreate / TaskGet TaskList / TaskStop TaskOutput IDE集成 LSPTool NotebookEdit 外部服务 MCPTool / McpAuth ListMcpResources 特殊工具 SleepTool / SnipTool ToolSearchTool CronCreate 内部专属 ConfigTool TungstenTool SuggestBackgroundPR

有个值得注意的细节:工具有 schema 缓存机制toolSchemaCache),避免每次都重新序列化 JSON schema 给模型------这是不错的小优化。

第四层:记忆系统------AI 真的在"做梦"

Claude Code 源码里有一个叫 autoDream 的后台记忆整理引擎。Anthropic 的工程师给它起了个浪漫的名字------Dream

系统 prompt 原文:

"You are performing a dream - a reflective pass over your memory files. Synthesize what you've learned recently into durable, well-organized memories so that future sessions can orient quickly."

翻译:AI 在做梦,把最近学到的东西整理成持久化的记忆。

Dream 的触发条件极其严格,有三重门控:

flowchart TD A[检查时间门] --> B{距上次 Dream >= 24小时?} B -->|否| STOP[不触发] B -->|是| C{检查会话门} C -->|否| STOP C -->|是| D{检查锁定门} D -->|否| STOP D -->|是| E[获取互斥锁] E --> F1[Phase 1: Orient - 扫描memory目录] F1 --> F2[Phase 2: Gather - 采集新信号] F2 --> F3[Phase 3: Consolidate - 写入或更新记忆] F3 --> F4[Phase 4: Prune - 修剪 MEMORY.md] F4 --> DONE[完成]
  • Phase 1 Orient:扫描 memory 目录,读取 MEMORY.md,浏览现有主题文件
  • Phase 2 Gather:采集新信号,优先级:每日日志 → 漂移的记忆 → 对话记录搜索
  • Phase 3 Consolidate:写入或更新记忆文件,把相对日期转成绝对日期
  • Phase 4 PruneMEMORY.md 必须控制在 200 行以内,不超过 25KB

Dream 子 agent 只有只读 bash 权限,它能看项目但不能改任何东西------纯粹的记忆整理。


3️⃣ System Prompt:110+ 碎片动态拼装

大多数 AI 应用的 system prompt 是一个写死的字符串。Claude Code 不是。

flowchart TB A[Dynamic System Prompt] --> B[静态段
可跨组织缓存] A --> C[动态段
每次请求重建] B --> B1[核心人格指令] B --> B2[24个工具描述] B --> B3[安全边界
CYBER_RISK_INSTRUCTION] B --> B4[输出格式规范] C --> C1[CLAUDE.md
项目指令] C --> C2[Output Style
会话风格] C --> C3[用户偏好] C --> C4[环境变量] C --> C5[Feature Flags]

五种内容注入机制:

机制 注入位置 触发方式 作用域
CLAUDE.md 用户消息(system-reminder) 自动 项目级
Output Style system 数组 手动 会话级
Slash Command 用户消息(command-message) 用户显式调用 单轮
Skill 用户消息(tool_result) 模型自主决定 单轮
Sub-Agent 独立对话 模型自主决定 隔离

拼装完的 system prompt 大约 24,000 tokens。加上 40 多个工具描述,每次 API 调用之前就要消耗大量上下文窗口。

还有一个命名很有意思的函数:DANGEROUS_uncachedSystemPromptSection()

一看这名字就知道------某个工程师曾经因为把不该缓存的内容放进了缓存段,被坑过一次,然后干脆起了这个名字提醒后人。


4️⃣ 多 Agent 协调器:并行是超能力

Claude Code 可以从单 agent 变成指挥官,同时调度多个 worker agent 并行干活。

flowchart TD START[启动 Coordinator Mode] --> R[Research
多 worker 并行调研] R --> S[Synthesis
coordinator 读取所有发现
制定实施规范] S --> I[Implementation
多 worker 按规范
各自实现模块] I --> V[Verification
运行测试验证改动] V --> END[任务完成] R --> |并行| W1[Worker 1] R --> |并行| W2[Worker 2] R --> |并行| W3[Worker N] style R fill:#b3e5fc style S fill:#c8e6c9 style I fill:#ffe0b2 style V fill:#d1c4e9

Workers 之间用 <task-notification> XML 消息通信。有共享的 Scratchpad 目录,跨 worker 持久化共享知识。

System prompt 里有一句话很能代表设计理念:

"Parallelism is your superpower. Workers are async. Launch independent workers concurrently whenever possible --- don't serialize work that can run simultaneously."

翻译:并行是你的超能力。只要能同时跑的任务,就不要串行。

还有一个反偷懒规则

"Do NOT say 'based on your findings' --- read the actual findings and specify exactly what to do."

Coordinator 不能甩锅,必须自己读完发现再下精确的指令。


5️⃣ 藏在代码里的彩蛋------未发布功能全曝光

这是最让开发者兴奋的部分。Claude Code 源码里藏了不少从未公开的功能,全部通过编译时 feature flag 门控,外部版本看不到------但 source map 不管这套,编译前的源码全在里面。

BUDDY:终端里养电子宠物

Claude Code 内置了一个完整的 Tamagotchi 式宠物系统。18种生物,用 Mulberry32 PRNG 确定性抽卡------同一个用户永远抽到同一只。

pie title BUDDY 稀有度概率分布 "Common (60%)" : 60 "Uncommon (25%)" : 25 "Rare (10%)" : 10 "Epic (4%)" : 4 "Legendary (1%)" : 1
稀有度 概率 物种
Common 60% Pebblecrab, Dustbunny, Mossfrog, Twigling, Dewdrop, Puddlefish
Uncommon 25% Cloudferret, Gustowl, Bramblebear, Thornfox
Rare 10% Crystaldrake, Deepstag, Lavapup
Epic 4% Stormwyrm, Voidcat, Aetherling
Legendary 1% Cosmoshale, Nebulynx

每只宠物有 5 个属性(DEBUGGING/PATIENCE/CHAOS/WISDOM/SNARK),6 种眼睛样式,8 种帽子。5 行高、12 字宽的 ASCII Art 渲染,有待机动画和反应动画。

代码里标注的预告窗口:2026年4月1-7日(今天是4月1日!),正式上线计划在5月。

物种名在代码里用 String.fromCharCode() 数组做了混淆------Anthropic 明确不想让这些名字被字符串搜索找到。结果 source map 完全不吃这套

KAIROS:永不睡觉的 Claude

一个常驻运行模式,Claude 不等你打字,它自己主动观察和行动。

flowchart LR A[KAIROS Mode] --> B[每日日志维护] A --> C[定期收到 tick 提示] A --> D[判断是否主动行动] A --> E[夜间 Dream 整理记忆] B --> F[专属工具] D --> F E --> F F --> G1[SendUserFile
直接推文件] F --> G2[PushNotification
推送通知] F --> G3[SubscribePR
订阅 PR 活动] style A fill:#ffcdd2 style F fill:#c8e6c9

维护每日日志,定期收到 <tick> 提示来决定要不要主动做什么。有个 15 秒阻塞预算------任何主动操作如果会阻塞用户超过 15 秒,就延后执行。

说得直白点:KAIROS 就是7×24小时在线的全能助手。OpenClaw 管得了的它要管,OpenClaw 管不了的它更要管。

ULTRAPLAN:让 Opus 4.6 替你想 30 分钟

复杂规划任务可以扔到远程的 Cloud Container Runtime,跑 Opus 4.6 模型,给它最多 30 分钟的思考时间

sequenceDiagram participant User participant CLI as Claude Code CLI participant Cloud as Cloud Container Runtime participant Browser as 浏览器 UI User->>CLI: 提交复杂规划任务 CLI->>Cloud: 转发任务,分配 Opus 4.6 Cloud-->>Browser: 每3秒轮询一次结果 Browser->>User: 实时显示规划过程 User->>Browser: 审批结果 Browser->>CLI: 发送 sentinel 值 CLI->>CLI: __ULTRAPLAN_TELEPORT_LOCAL__
结果"传送"回本地 CLI-->>User: 终端显示最终规划

Penguin Mode

快速模式的内部代号。API 端点是 /api/claude_code_penguin_mode,配置 key 是 penguinModeOrgEnabled,熔断开关是 tengu_penguins_off

全是企鹅。 Anthropic 的工程师给快速模式起名企鹅,原因不明,但很可爱。


6️⃣ 权限安全体系:比想象中复杂得多

Claude Code 的权限系统不是简单的 allow/deny,而是多层级精密设计。

flowchart LR A[工具调用请求] --> B{风险等级判断} B -->|LOW| C[直接放行] B -->|MEDIUM| D[YOLO 分类器] B -->|HIGH| E[用户手动授权] D -->|安全| C D -->|不确定| E C --> F[执行工具] E --> F F --> G{受保护文件?} G -->|是| H[拦截] G -->|否| F subgraph PROTECTED["受保护文件列表"] P1[.gitconfig] P2[.bashrc] P3[.zshrc] P4[.mcp.json] P5[.claude.json] end G -.-> PROTECTED

三级风险分类:

等级 处理方式
LOW 直接放行
MEDIUM YOLO 分类器(基于上下文的 ML 模型)自动判断
HIGH 必须用户手动授权

还有个细节:当 Claude 需要你授权一个操作时,它解释风险的那段话本身也是 LLM 生成的。

你看到的"此命令将修改你的 git 配置"------这句话是 Claude 用另一次 LLM 调用写出来的。

Undercover Mode:最讽刺的彩蛋

Claude Code 里有一套叫 Undercover Mode 的系统,专门防止 AI 在提交代码时泄露 Anthropic 的内部信息。

flowchart TD A[Anthropic 员工
给开源项目贡献代码] --> B{是否内部仓库?} B -->|不确定| C[自动激活卧底模式] B -->|确认是内部| D[正常使用] C --> E[注入特殊 System Prompt] subgraph RULES["禁止事项"] R1[禁止动物代号
Capybara, Tengu等] R2[禁止未发布版本号
opus-4-7, sonnet-4-8] R3[禁止内部仓库名] R4[禁止内部 Slack 频道名] R5[禁止提及 Claude Code
或暗示自己是 AI] end E --> RULES

Anthropic 的工程师花了心思做了这个防泄露子系统,然后用一个 .map 文件把整个源码(包括 Undercover Mode 的代码)一次性泄了个干净。

最讽刺的是:这没有强制关闭选项------"如果我们不确定这是内部仓库,就保持卧底状态。"

这意味着:你在 GitHub 上看到的很多"人类"贡献者,搞不好背后是 Claude Code 在干活。


7️⃣ 技术栈全景图

flowchart TB subgraph TECH["Claude Code 技术栈"] RUNTIME["运行时:Bun
(非 Node.js)"] UI["终端 UI:React + Ink
(用 React 写命令行)"] CLI["CLI 框架:Commander.js"] TYPE["类型校验:Zod v4"] SEARCH["搜索:内置 ripgrep"] PROTOCOL["协议:MCP SDK / OpenTelemetry"] FEATURE["功能开关:GrowthBook"] end TECH --> REASON["选择 Bun 的原因:
① 启动更快
② 死代码消除更彻底
③ Feature flag 走编译时消除"] style UI fill:#fff9c4 style RUNTIME fill:#e3f2fd

用 React 写命令行界面这个选择挺有意思。Ink 这个库让 React 组件能跑在终端里,Anthropic 在生产级产品里用上了------那些看起来很简陋的终端交互效果,原来都是 React 组件渲染出来的。


8️⃣ 整个行业怎么看

社区反应:有人欢喜有人愁

GitHub 上的泄露仓库几个小时就涨了 6600+ Star、10000+ Fork。Issue 区变成了大型合影留念现场,绝大部分是中文用户在打卡:

  • "终于可以一睹源码了"
  • "笑死了全是国人"
  • "国产 agent 你崛起罢"
  • "不久后国内:XXagent 震撼首发"

开发者社区的共识:广泛获取 Claude Code 的架构最终是有益的。代码现在已经永久可用,互联网不会遗忘。

对 Anthropic 的冲击

影响维度 具体表现
技术泄露 上下文压缩策略、工具调用设计、权限模型全被研究
安全风险 安全漏洞面的扩大,攻击门槛降低
品牌形象 "做 AI 安全的公司,栽在 npm 配置上"
资本信任 Anthropic 可能2026年 IPO,这种失误影响管理成熟度评估
竞争格局 Claude Code 年化收入占 Anthropic 总收入 18%,且3个月内翻倍------现在是关键期

更糟的是:这不是孤立事件。

就在5天前(3月26日),一次 CMS 配置错误就暴露了未发布的 Claude Mythos 模型细节。三天后,又来了一次 npm 配置失误。

两次事故,五天之内。一个是内容管理系统,一个是 npm 包管理。

这不是随机意外,这是组织内部工程流程和发布安全管控存在系统性问题的信号

开发者从中学到什么

一位正在构建 AI 应用的开发者 @devmelv 总结了四点观察:

① 上下文处理不是后期功能 Claude Code 的 CLAUDE.md每一轮对话中都会被加载,不只是会话开始时。持久化、结构化的上下文是从第一天起就要承载一切的基础架构。

② 围绕定价模型设计产品 Claude Code 派生子 agent 时,创建与父上下文完全相同的字节副本。API 会对缓存。5 个智能体的成本≈1个,因为都命中了同一个提示缓存。这是产品层面的设计决策,不是性能优化。

③ 摩擦点 = 配置问题 Claude Code 的每一次权限弹窗都被视为配置的失败。他们用 AI 来决定 AI 能做什么。AI 产品中的每个摩擦点,本质上都是一个配置问题。

④ 为连续性而设计 每个会话都保存到 JSONL 文件。用户可以恢复、分支、继续。大多数人每次都重新开始------这丢弃了模型已经了解到的所有信息。


9️⃣ 启示:这件事告诉我们什么

总结

一家做 AI 安全的公司,因为构建配置没管好把自家源码全泄了,这个剧情是真的讽刺

但换个角度看,这 51 万行代码展示了一个事实:现在最好用的 AI 编程工具,技术栈并不神秘。

React + Ink + Bun + 一套精心设计的工具注册系统。

真正的壁垒还是在模型能力上。

源码已经泄了,但 Claude Code 不会因此变得更弱。该好用还是好用。

有些东西,藏不住也没必要藏。


参考来源**


相关推荐
ggabb2 小时前
以色列的科技实力与全球格局分析
大数据·人工智能
智算菩萨2 小时前
【论文精读】AI-assisted rational decision-making:AI 如何辅助理性决策?
论文阅读·人工智能·论文笔记
Flying pigs~~2 小时前
基于Deepseek大模型API完成文本分类预测功能
java·前端·人工智能·python·langchain·deepseek
饼干哥哥2 小时前
怎么写好一个AI提示词?10个场景与50个技巧+官方100个教程合集
人工智能
. . . . .2 小时前
git-ai 项目详解
人工智能·git
白狐_7982 小时前
深度解析:大语言模型(LLM)联网搜索与实时数据获取的底层原理
人工智能·语言模型·自然语言处理
AI科技2 小时前
原创音乐人用哼唱歌曲旋律,通过AI编曲软件快速打造出完整歌曲的编曲伴奏
人工智能
饼干哥哥2 小时前
2026AI跨境电商卖货:亚马逊「AI图片」工作流要怎么玩?
人工智能
范桂飓2 小时前
Harness Engineering 驾驭工程技术原理解析
人工智能