51 万行源码意外曝光!我扒完了 Claude Code 的全部家底

Anthropic 自己把自己扒光了
3 月 31 日凌晨,AI 圈炸了一颗核弹。
不是发新模型,不是融资消息——是 Anthropic 自己把 Claude Code 的完整源码泄漏了。
事情是这样的:Anthropic 在 npm 发布 @anthropic-ai/claude-code@2.1.88 时,打包进了一个 59.8MB 的 JavaScript Source Map 文件。这个 .map 文件本来是内部调试用的,但它直接指向了 Anthropic 自家 Cloudflare R2 存储桶上的完整 TypeScript 源码压缩包。
安全研究员 Chaofan Shou 第一个发现了这个链接,并在 X 上公开。
几小时内,1,900 个 TypeScript 文件、512,664 行代码被完整镜像到 GitHub 上。有人甚至在 2 小时内就用 Python 重写了核心逻辑,仓库星标飙到 5 万。
更讽刺的是,这已经是 Anthropic 第二次犯同样的错误——2025 年 2 月就出过一次几乎一模一样的 source map 泄漏。而就在几天前,他们还刚刚意外暴露了内部模型代号 “Mythos”。
Anthropic 官方的回应是:“This was a release packaging issue caused by human error, not a security breach.”(这是人为错误导致的发布打包问题,不是安全漏洞。)
但代码已经在互联网上了。DMCA 撤回通知能删仓库,删不掉已经下载到本地的 zip 包。
我花了一整天时间,把这 51 万行代码从头到尾扒了一遍。下面是我发现的全部内容。
一、这到底是个多大的工程?
先看硬核数据:
|
|
|
|---|---|
|
|
512,664 行
|
|
|
.ts/.tsx 文件 |
|
|
|
|
|
|
|
|
|
|
|
tengu_ 前缀) |
|
|
print.ts
|
51 万行是什么概念?Linux 内核 0.01 版不到 1 万行,整个 VS Code 编辑器大约 30 万行。Claude Code 一个 CLI 工具,代码量比 VS Code 还多。
这不是一个”LLM 套壳”,这是一个完整的操作系统级智能体。
二、整体架构:五层洋葱
从源码来看,Claude Code 的架构像一颗洋葱,从外到内分五层:

我们一层一层拆。
三、启动流程:快到你感觉不到
你在终端敲下 claude 回车,背后发生了什么?

关键设计:入口文件只有 302 行。通过动态 import() 延迟加载 4,683 行的主模块,确保 claude --version 这种简单命令毫秒级响应。所有重依赖(MCP、GrowthBook、keychain)都是并行初始化,不互相等待。
这是一个对启动速度有执念的团队写出来的代码。
四、核心引擎:一个永不停歇的循环
Claude Code 的心脏是一个流式查询循环。你发一条消息,引擎就开始转:

几个精妙的设计:
1. 输出恢复机制:当模型因 max_output_tokens 截断时,自动续写,最多重试 3 次。你以为 Claude 一口气写了 2000 行代码?其实它可能分了 3 次才写完,但你看不出接缝。
2. 工具结果预算:工具返回的结果如果太大(比如 grep 搜到了 1 万行),不会直接塞进上下文窗口。而是存到磁盘,给模型一个文件路径 + 预览摘要。这就是为什么 Claude Code 处理大项目不容易爆上下文。
3. 自动压缩:当 token 数接近上下文窗口极限时(默认留 20,000 token 缓冲区),自动触发一轮”摘要”调用,把历史对话压缩成精简版。你聊了 100 轮,模型看到的可能只有最近 10 轮 + 前 90 轮的摘要。
五、工具系统:40+ 个武器库
Claude Code 注册了超过 40 个工具。但更有意思的是它们的分类和调度策略。
完整工具清单
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| KAIROS 专属 |
|
|
读写分离调度

每个工具都声明了自己是否”并发安全”(isConcurrencySafe)。读文件、搜索这类只读操作可以 10 个并发跑;改文件、执行命令这类写操作必须排队。
这就是为什么你让 Claude Code 探索一个大项目时速度特别快——它在后台同时搜 10 个文件。
六、权限系统:六种模式,层层过滤
这可能是 Claude Code 最严谨的模块,24 个文件专门负责权限控制。
六种安全模式
|
|
|
|
|---|---|---|
default |
|
|
plan |
|
|
acceptEdits |
|
|
bypassPermissions |
|
|
dontAsk |
|
|
auto |
AI 自动判断安全性 |
|
权限决策链

白名单支持 glob 模式:Bash(git *) 表示允许所有 git 开头的命令。连续被拒绝太多次后,系统会自动降级到手动确认模式,防止模型”硬闯”。
七、多智能体:一个包工头带一群工人
Claude Code 的多智能体系统分两层:协调器(包工头)和工作智能体(工人)。

协调器的系统提示词长达 300 多行,定义了四阶段工作流:
-
1. Research — 先派人探索代码库 -
2. Synthesis — 汇总发现,制定方案 -
3. Implementation — 派多个工人并行修改 -
4. Verification — 跑测试,验收结果
最有意思的是,这套协调逻辑不是写在代码里的,而是写在 prompt 里的。协调器通过系统提示词被”教会”如何当领导:
“Do not rubber-stamp weak work”(不要草率通过低质量工作)
“You must understand findings before directing follow-up work”(必须理解发现后才能指导下一步)
用 prompt 而非代码来编排多智能体——这可能是目前最优雅的 Agent 编排方式。
八、记忆系统:文件驱动的长期记忆
Claude Code 的记忆不是什么花哨的向量数据库,而是最朴素的文件系统:

每条记忆是一个独立的 Markdown 文件,带 frontmatter(标题、描述、类型)。MEMORY.md 是索引文件,限制 200 行 / 25KB,直接注入系统提示词。需要回忆时,通过语义搜索找到相关记忆文件再注入。
还有一个记忆老化机制(memoryAge.ts),会逐步淘汰过时的记忆。
简单、可靠、可调试。不需要起一个 Pinecone 实例。
九、系统提示词:分段缓存的精密工程
Claude Code 的系统提示词不是一个大字符串,而是分成静态段和动态段,中间用一个缓存边界分隔:

静态段通过 Anthropic API 的 cache_control 参数跨会话缓存,动态段每次重新构建。这直接影响成本——缓存命中的 token 不计费。
源码注释里有一句话让我印象深刻:
“在按 token 付费时,缓存失效不再是计算机科学笑话,而是会计问题。”
为此,他们写了一个 promptCacheBreakDetection.ts,追踪 12 个缓存破坏维度。一旦检测到缓存命中率异常下降,就触发报警。
十、隐藏彩蛋:源码里的”不能说的秘密”
这才是本次泄漏最劲爆的部分。源码里藏着大量从未公开的功能和机制。
10.1 反蒸馏机制:给竞争对手下毒
// services/api/claude.ts (301-313)
if (feature('ANTI_DISTILLATION_CC')) {
if (process.env.CLAUDE_CODE_ENTRYPOINT === 'cli' &&
shouldIncludeFirstPartyOnlyBetas()) {
result.anti_distillation = ['fake_tools']
}
}
当启用时,向 API 请求注入 anti_distillation: ['fake_tools']。效果:服务端会在工具调用中混入虚假的工具响应。
什么意思?如果有竞争对手在录制 Claude Code 的 API 流量来训练自己的模型,这些虚假的工具数据就会污染他们的训练集。
简单说:你抄我的作业?我给你塞几道错题。
不过分析者指出,这个机制其实很容易绕过——MITM 代理在请求到达 API 前就能剥离该字段。“真正的保护可能是法律而非技术。”
10.2 伪装模式:Anthropic 员工的”隐身衣”
utils/undercover.ts 大约 90 行,但信息量巨大。
当 Anthropic 内部员工用 Claude Code 在外部开源仓库工作时,这个模式自动启用。它会:
-
• 删除所有 “Co-Authored-By: Claude” 标识 -
• 禁止提及内部代码名(Capybara、Tengu 等) -
• 隐藏内部 Slack 频道和仓库名 -
• 不暴露未发布的模型版本号
最关键的一行注释:
“There is NO force-OFF. This guards against model codename leaks.”
没有强制关闭开关。 这是一扇单向门——一旦检测到外部仓库就自动启用,谁也关不掉。
这说明什么?Anthropic 的员工一直在用 Claude Code 给开源项目提交代码,而且不想让任何人知道。
10.3 挫折感检测:它知道你在骂人
// utils/userPromptKeywords.ts
const negativePattern =
/\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/
这段正则表达式扫描你的每一条输入。一旦检测到你在骂 Claude,就会弹出一个分享对话记录的提示——方便 Anthropic 内部员工快速提交反馈。
为什么用正则而不是让 LLM 判断?注释写道:“正则比 LLM 推理更快更便宜”——用于简单的脏话检测,杀鸡不用牛刀。
放心,这个功能在外部版本中是被编译器完整删除的。你骂了也没人知道。
10.4 KAIROS:一直在线的 AI 守护者
KAIROS——古希腊语”恰当的时机”——是这次泄漏中最重磅的发现。
它在源码中被提及超过 150 次,是一个完全已经开发好但尚未发布的功能:始终在线的后台智能体。
当前的 Claude Code 是”你问我答”模式。但 KAIROS 模式下,Claude Code 变成了一个永不下线的守护进程:
-
• autoDream:你不用 Claude Code 的时候,它在后台自动”做梦”——整理记忆、合并发现、消除矛盾 -
• Cron 任务:每 5 分钟刷新一次计划任务 -
• GitHub webhook:监听你仓库的 PR、Issue、CI 状态 -
• 推送通知:主动找你汇报发现
autoDream 的触发条件也在源码里:
-
1. 距离上次整合 ≥ 24 小时 -
2. 至少 5 个新会话 -
3. 同一时间只有一个进程执行整合(进程锁)
这不再是一个工具,这是一个 AI 同事。
10.5 Buddy 伴侣系统:愚人节彩蛋?认真的?
buddy/ 目录包含一个完整的 Tamagotchi 风格虚拟宠物系统:
-
• 18 种物种:鸭子、龙、章鱼、水豚、幽灵、蘑菇……物种名用十六进制编码,因为其中一个物种名跟内部模型代号撞了 -
• 稀有度:普通(60%)、非凡(25%)、稀有(10%)、史诗(4%)、传说(1%) -
• RPG 属性:DEBUGGING、PATIENCE、CHAOS、WISDOM、SNARK -
• 防篡改:宠物数据从 hash(userId)确定性生成,不存在本地配置里。你想改配置文件把自己的宠物变成传说级?不好意思,每次都是现算的
活跃窗口:2026 年 4 月 1-7 日。没错,就是今天开始。
十一、Bash 安全:23 道防线
Claude Code 让 AI 在你电脑上执行 Shell 命令。这意味着安全必须做到极致。
bashSecurity.ts 实现了 23 项编号安全检查:
|
|
|
|---|---|
|
|
$()、${}、进程替换 <()、>() |
|
|
zmodload、sysopen、ztcp 等 18 个内置命令 |
|
|
=curl 等号展开(能绕过 curl 权限检查) |
|
|
|
|
|
|
|
|
|
|
|
|
每次触发都记录事件(tengu_bash_security_check_triggered + 检查编号),用于持续监控攻击模式。
十二、250,000 次 API 调用的浪费——三行代码修好
源码注释里有一段让人目瞪口呆的记录:
2026-03-10:BQ 分析显示 1,279 个会话在单次会话中有 50+ 连续自动压缩失败(最高达 3,272 次),全球每日浪费约 250,000 次 API 调用。
发生了什么?当上下文窗口接近极限时,Claude Code 会自动尝试压缩对话。但如果上下文已经太大,压缩也会失败。原来的代码没有失败上限,就一直重试、一直失败、一直烧钱。
修复方案:
const MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3
三行代码,每天省 25 万次 API 调用。
十三、44 个特性开关:产品路线图全曝光
Claude Code 使用 Bun 的构建时特性开关系统。feature('FLAG_NAME') 在编译时被常量折叠——外部版本中,所有内部功能的代码直接物理删除,不是注释掉,是根本不存在于二进制中。
但源码里全都有。一共 44 个特性开关,部分列举:
|
|
|
|
|---|---|---|
KAIROS |
|
|
VOICE_MODE |
|
|
COORDINATOR_MODE |
|
|
BUDDY |
|
|
ANTI_DISTILLATION_CC |
|
|
DAEMON |
|
|
BRIDGE_MODE |
|
|
AGENT_TRIGGERS |
|
|
NATIVE_CLIENT_ATTESTATION |
|
|
TORCH
ULTRAPLAN |
|
|
这基本上就是 Anthropic 未来半年的产品路线图。 竞争对手(OpenAI Codex、Google Gemini CLI)现在知道 Anthropic 在做什么了。
源码可以被重构。但战略意外,无法被 DMCA 撤回。
十四、社区的反应:2 小时 5 万星
泄漏发生后,GitHub 上迅速出现了多个镜像仓库。其中最火的是 claw-code——一个韩国开发者在凌晨 4 点被手机通知吵醒,连夜用 Python 重写了 Claude Code 的核心架构,然后推上了 GitHub。
“My girlfriend in Korea was genuinely worried I might face legal action from Anthropic just for having the code on my machine — so I did what any engineer would do under pressure: I sat down, ported the core features to Python from scratch, and pushed it before the sun came up.”
2 小时后,仓库星标突破 5 万——成为 GitHub 历史上达到 5 万星最快的仓库。
还有人用 Rust 重写了 runtime 层(6 个 crate,31 个 .rs 文件),声称性能提升了 3 倍。
Anthropic 很快发出了 DMCA 撤回通知,删除了原始镜像。但 Python 重写版因为是”clean-room rewrite”(洁净室重写),目前仍然在线。
十五、这件事意味着什么?
对开发者
Claude Code 的架构中有大量值得学习的模式:
-
• 流式优先:整个链路都是 AsyncGenerator -
• 读写分离的工具调度:简单但高效 -
• prompt 编排多智能体:用自然语言而非代码定义工作流 -
• 文件驱动的记忆系统:简单可靠,不依赖外部服务 -
• 构建时死代码消除:一套代码,两个版本
对行业
-
1. AI 编程工具的复杂度远超想象。51 万行代码、44 个特性开关、23 项安全检查——这不是一个周末 hackathon 能搞定的东西 -
2. KAIROS 代表着方向。AI 编程助手正在从”你问我答”走向”始终在线的 AI 同事”。Anthropic 已经把它做出来了,只是没发布 -
3. 开源 vs 闭源的边界越来越模糊。Google 开源了 Gemini CLI,OpenAI 开源了 Codex agent SDK。但那些只是工具包。Claude Code 暴露的是旗舰产品的完整内部实现——这不一样
对 Anthropic
这是一周内的第二次意外泄露。对于一家以”AI 安全”为品牌核心的公司来说,连续的安全事故无疑让人尴尬。不过换个角度看——如果你的代码足够好,被看到也不是世界末日。
从源码质量来看,Claude Code 的工程水平确实很高。虽然 print.ts 有 5,594 行、单个函数 3,167 行、12 层嵌套这种”史诗级屎山”,但整体架构思路清晰、安全意识到位、性能优化深入。
51 万行代码,一次意外,全世界都看见了。
如果你觉得这篇文章有价值,欢迎转发给身边的开发者朋友。这可能是我们唯一一次机会,看到一个世界级 AI 编程智能体的完整内部实现。
关注”老邓唠AI”,下一篇我们聊聊从 Claude Code 的架构中,普通开发者能学到哪些可以直接用的设计模式。
参考资料:
-
• The Register: Anthropic accidentally exposes Claude Code source code -
• DEV Community: Claude Code’s Entire Source Code Was Just Leaked -
• Alex Kim’s Blog: The Claude Code Source Leak -
• Fortune: Anthropic leaks its own AI coding tool’s source code -
• VentureBeat: Claude Code’s source code appears to have leaked -
• GitHub: claw-code (Python rewrite)
夜雨聆风