# 51 万行源码意外曝光!我扒完了 Claude Code 的全部家底 > 发布日期:2026-04-01 > 分类:技术解读 / 深度分析 > 作者:老邓唠AI ![封面](https://cdn.union.jxyunge.com/self-media/008/cover.png) ## 引子: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 的架构像一颗洋葱,从外到内分五层: ![五层洋葱架构](https://cdn.union.jxyunge.com/self-media/008/01-architecture.png) 我们一层一层拆。 --- ## 三、启动流程:快到你感觉不到 你在终端敲下 `claude` 回车,背后发生了什么? ![启动流程](https://cdn.union.jxyunge.com/self-media/008/02-startup.png) 关键设计:**入口文件只有 302 行**。通过动态 `import()` 延迟加载 4,683 行的主模块,确保 `claude --version` 这种简单命令毫秒级响应。所有重依赖(MCP、GrowthBook、keychain)都是**并行初始化**,不互相等待。 这是一个对启动速度有执念的团队写出来的代码。 --- ## 四、核心引擎:一个永不停歇的循环 Claude Code 的心脏是一个**流式查询循环**。你发一条消息,引擎就开始转: ![核心查询循环](https://cdn.union.jxyunge.com/self-media/008/03-query-loop.png) 几个精妙的设计: **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 | 自主守护模式 | ### 读写分离调度 ![读写分离调度](https://cdn.union.jxyunge.com/self-media/008/04-rw-dispatch.png) 每个工具都声明了自己是否"并发安全"(`isConcurrencySafe`)。读文件、搜索这类只读操作可以 10 个并发跑;改文件、执行命令这类写操作必须排队。 这就是为什么你让 Claude Code 探索一个大项目时速度特别快——它在后台同时搜 10 个文件。 --- ## 六、权限系统:六种模式,层层过滤 这可能是 Claude Code 最严谨的模块,**24 个文件**专门负责权限控制。 ### 六种安全模式 | 模式 | 行为 | 典型场景 | |------|------|---------| | `default` | 每次新操作都问你 | 日常使用 | | `plan` | 只能读,不能写 | 审查代码 | | `acceptEdits` | 自动接受文件编辑 | 信任的项目 | | `bypassPermissions` | 跳过所有检查 | YOLO 模式 | | `dontAsk` | 不问就拒绝 | 最严格 | | `auto` | **AI 自动判断安全性** | Anthropic 内部专用 | ### 权限决策链 ![权限决策链](https://cdn.union.jxyunge.com/self-media/008/05-permission.png) 白名单支持 glob 模式:`Bash(git *)` 表示允许所有 `git` 开头的命令。连续被拒绝太多次后,系统会自动降级到手动确认模式,防止模型"硬闯"。 --- ## 七、多智能体:一个包工头带一群工人 Claude Code 的多智能体系统分两层:**协调器**(包工头)和**工作智能体**(工人)。 ![多智能体协调](https://cdn.union.jxyunge.com/self-media/008/06-multi-agent.png) 协调器的系统提示词长达 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 的记忆不是什么花哨的向量数据库,而是**最朴素的文件系统**: ![记忆系统](https://cdn.union.jxyunge.com/self-media/008/07-memory.png) 每条记忆是一个独立的 Markdown 文件,带 frontmatter(标题、描述、类型)。`MEMORY.md` 是索引文件,限制 200 行 / 25KB,直接注入系统提示词。需要回忆时,通过语义搜索找到相关记忆文件再注入。 还有一个**记忆老化**机制(`memoryAge.ts`),会逐步淘汰过时的记忆。 简单、可靠、可调试。不需要起一个 Pinecone 实例。 --- ## 九、系统提示词:分段缓存的精密工程 Claude Code 的系统提示词不是一个大字符串,而是分成**静态段**和**动态段**,中间用一个缓存边界分隔: ![系统提示词缓存](https://cdn.union.jxyunge.com/self-media/008/08-prompt-cache.png) 静态段通过 Anthropic API 的 `cache_control` 参数跨会话缓存,动态段每次重新构建。这直接影响成本——缓存命中的 token **不计费**。 源码注释里有一句话让我印象深刻: > *"在按 token 付费时,缓存失效不再是计算机科学笑话,而是会计问题。"* 为此,他们写了一个 `promptCacheBreakDetection.ts`,追踪 **12 个缓存破坏维度**。一旦检测到缓存命中率异常下降,就触发报警。 --- ## 十、隐藏彩蛋:源码里的"不能说的秘密" 这才是本次泄漏最劲爆的部分。源码里藏着大量**从未公开的功能和机制**。 ### 10.1 反蒸馏机制:给竞争对手下毒 ```typescript // 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 挫折感检测:它知道你在骂人 ```typescript // 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 项编号安全检查**: | 防御类别 | 具体内容 | |---------|---------| | 命令注入 | 拦截 `$()`、`${}`、进程替换 `<()`、`>()` | | 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 会自动尝试压缩对话。但如果上下文已经太大,压缩也会失败。原来的代码没有失败上限,就**一直重试、一直失败、一直烧钱**。 修复方案: ```typescript 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 编排多智能体**:用自然语言而非代码定义工作流 - **文件驱动的记忆系统**:简单可靠,不依赖外部服务 - **构建时死代码消除**:一套代码,两个版本 ### 对行业 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](https://www.theregister.com/2026/03/31/anthropic_claude_code_source_code/) - [DEV Community: Claude Code's Entire Source Code Was Just Leaked](https://dev.to/gabrielanhaia/claude-codes-entire-source-code-was-just-leaked-via-npm-source-maps-heres-whats-inside-cjo) - [Alex Kim's Blog: The Claude Code Source Leak](https://alex000kim.com/posts/2026-03-31-claude-code-source-leak/) - [Fortune: Anthropic leaks its own AI coding tool's source code](https://fortune.com/2026/03/31/anthropic-source-code-claude-code-data-leak-second-security-lapse-days-after-accidentally-revealing-mythos/) - [VentureBeat: Claude Code's source code appears to have leaked](https://venturebeat.com/technology/claude-codes-source-code-appears-to-have-leaked-heres-what-we-know) - [GitHub: claw-code (Python rewrite)](https://github.com/instructkr/claw-code)