- 新增 008 号文章《51 万行源码意外曝光!我扒完了 Claude Code 的全部家底》 - 添加 8 个 Mermaid 架构图文件,涵盖整体架构、启动流程、查询循环等 - 新增项目配置文件 CLAUDE.md,定义自媒体写作规范 - 创建详细的架构分析文档 claude-arch-by-claude.md - 包含权限系统、工具调度、多智能体等核心技术解析 - 记录反蒸馏机制、KAIROS 守护进程等隐藏功能发现 - 提供完整的工具清单及安全防护措施说明
19 KiB
51 万行源码意外曝光!我扒完了 Claude Code 的全部家底
发布日期:2026-04-01 分类:技术解读 / 深度分析 作者:老邓唠AI
引子: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 行 TypeScript |
| 文件数 | 1,884 个 .ts/.tsx 文件 |
| 运行时 | Bun(不是 Node.js) |
| 终端 UI | 自研 Ink 分支 + React + Yoga Layout |
| Schema 校验 | Zod v4(所有工具输入、API 响应、配置文件) |
| 实验平台 | GrowthBook(所有开关都用 tengu_ 前缀) |
| 最大单文件 | print.ts — 5,594 行,单个函数 3,167 行,12 层嵌套 |
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 个工具。但更有意思的是它们的分类和调度策略。
完整工具清单
| 分类 | 工具 | 说明 |
|---|---|---|
| 文件操作 | FileRead, FileWrite, FileEdit, Glob, Grep, NotebookEdit | 读写搜索编辑 |
| 系统执行 | Bash, PowerShell | Shell 命令 |
| 网络 | WebFetch, WebSearch | 抓网页、搜索 |
| 智能体 | Agent, SendMessage, TeamCreate, TeamDelete | 生成/管理子智能体 |
| 任务 | TaskCreate/Get/Update/List/Stop/Output | 后台任务管理 |
| 规划 | EnterPlanMode, ExitPlanMode | 只读规划模式 |
| Git | EnterWorktree, ExitWorktree | Worktree 隔离 |
| MCP | MCPTool, ListMcpResources, ReadMcpResource | MCP 协议 |
| 辅助 | ToolSearch, Skill, AskUserQuestion, Config, Brief, LSP, TodoWrite | 杂项 |
| KAIROS 专属 | Sleep, CronCreate/Delete/List, Monitor, PushNotification | 自主守护模式 |
读写分离调度
每个工具都声明了自己是否"并发安全"(isConcurrencySafe)。读文件、搜索这类只读操作可以 10 个并发跑;改文件、执行命令这类写操作必须排队。
这就是为什么你让 Claude Code 探索一个大项目时速度特别快——它在后台同时搜 10 个文件。
六、权限系统:六种模式,层层过滤
这可能是 Claude Code 最严谨的模块,24 个文件专门负责权限控制。
六种安全模式
| 模式 | 行为 | 典型场景 |
|---|---|---|
default |
每次新操作都问你 | 日常使用 |
plan |
只能读,不能写 | 审查代码 |
acceptEdits |
自动接受文件编辑 | 信任的项目 |
bypassPermissions |
跳过所有检查 | YOLO 模式 |
dontAsk |
不问就拒绝 | 最严格 |
auto |
AI 自动判断安全性 | Anthropic 内部专用 |
权限决策链
白名单支持 glob 模式:Bash(git *) 表示允许所有 git 开头的命令。连续被拒绝太多次后,系统会自动降级到手动确认模式,防止模型"硬闯"。
七、多智能体:一个包工头带一群工人
Claude Code 的多智能体系统分两层:协调器(包工头)和工作智能体(工人)。
协调器的系统提示词长达 300 多行,定义了四阶段工作流:
- Research — 先派人探索代码库
- Synthesis — 汇总发现,制定方案
- Implementation — 派多个工人并行修改
- 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 的触发条件也在源码里:
- 距离上次整合 ≥ 24 小时
- 至少 5 个新会话
- 同一时间只有一个进程执行整合(进程锁)
这不再是一个工具,这是一个 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 项编号安全检查:
| 防御类别 | 具体内容 |
|---|---|
| 命令注入 | 拦截 $()、${}、进程替换 <()、>() |
| Zsh 危险命令 | 封禁 zmodload、sysopen、ztcp 等 18 个内置命令 |
| 绕过攻击 | 防御 Zsh 的 =curl 等号展开(能绕过 curl 权限检查) |
| Unicode 攻击 | 检测零宽空格注入、不可见 Unicode 字符 |
| 环境变量 | 防御 IFS 空字节注入 |
| 混淆手法 | 花括号展开、注释/引号边界错位 |
| 审计发现 | HackerOne 报告的格式错误 token 绕过 |
每次触发都记录事件(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 |
语音输入(Deepgram STT) | 开发完成,未发布 |
COORDINATOR_MODE |
多智能体协调 | 已发布 |
BUDDY |
虚拟宠物 | 愚人节限定 |
ANTI_DISTILLATION_CC |
反蒸馏投毒 | 内部启用 |
DAEMON |
后台守护进程 | 开发中 |
BRIDGE_MODE |
IDE 桥接 | 已发布 |
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 编排多智能体:用自然语言而非代码定义工作流
- 文件驱动的记忆系统:简单可靠,不依赖外部服务
- 构建时死代码消除:一套代码,两个版本
对行业
- AI 编程工具的复杂度远超想象。51 万行代码、44 个特性开关、23 项安全检查——这不是一个周末 hackathon 能搞定的东西
- KAIROS 代表着方向。AI 编程助手正在从"你问我答"走向"始终在线的 AI 同事"。Anthropic 已经把它做出来了,只是没发布
- 开源 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)








