乐于分享
好东西不私藏

Claude Code 源码泄露揭秘

Claude Code 源码泄露揭秘

512,000 行代码背后的架构真相

2026年3月31日,一个 .map 文件意外暴露了 Anthropic 最神秘的 AI 编程工具的全部源码。这是迄今最详尽的架构分析。

一、事件始末:一个 .map 文件引发的”血案”

1.1 泄露经过

2026年3月31日,安全研究员 Chaofan Shou (@shoucccc) 在 X 上发布了一条震惊 AI 圈的消息:

Claude Code 的完整源码,就躺在 npm 包里,任何人都能看到。

原因极其简单又极其荒谬:构建时忘记排除 .map 文件

1.2 什么是 Source Map?

{  “version”: 3,  “sources”: [“../src/main.tsx”, “../src/tools/BashTool.ts”, “…”],  “sourcesContent”: [“// 完整的原始源代码…”, “…”],  “mappings”: “AAAA,SAAS,OAAO…”}

sourcesContent 数组包含每一个文件的完整源代码。本应用于调试的文件,成了泄露的元凶。

1.3 泄露规模

📊 泄露数据统计

TypeScript 文件:~1,900 个

代码行数:512,000+ 行

文件大小:~59.8MB

内置工具:40+ 个

二、官方”开源” vs 真实代码:差距有多大?

2.1 令人震惊的对比

官方仓库 vs 泄露代码

文件数量:官方 ~279 个 → 泄露 4,600+ 个

核心引擎:官方 ❌ 不包含 → 泄露 ✅ 完整包含

工具实现:官方 ❌ 不包含 → 泄露 ✅ 40+ 工具

Agent 循环:官方 ❌ 不包含 → 泄露 ✅ 1,729 行

MCP 客户端:官方 ❌ 不包含 → 泄露 ✅ 119K

2.2 “开源”的真相

如果用餐厅比喻:

官方仓库发布的是菜单和桌布,声称”我们的厨房开放了”。泄露代码才是真正的厨房——4,600+ 个源文件,全部使用 TypeScript/React 编写。

三、技术栈:比想象中复杂得多

3.1 核心技术选型

🛠️ 技术栈

运行时:Bun — 比 Node.js 启动更快,原生支持 TypeScript

语言:TypeScript (strict) — 4,600+ 文件的代码库,类型安全是必须的

UI:React 18 + Ink — 在终端渲染 React 组件!

特性开关:GrowthBook — 服务端特性控制、A/B 测试、安全 kill switch

打包器:Bun bundler — 基于 feature() 的死代码消除

3.2 为什么用 React 写终端应用?

看起来过度设计,但看代码就明白了:

• PermissionDialog.tsx — 权限确认对话框

• WorkerBadge — 工作进程徽章

• 多面板实时流式 UI

• 复杂交互和状态管理

这不是简单的文本输出,而是一个功能丰富的终端应用

四、核心引擎:Agentic Loop 揭秘

4.1 query.ts — 1,729 行的 while(true) 循环

这是 Claude Code 的心脏:

export async function* query(  params: QueryParams,): AsyncGenerator<  | StreamEvent  | Message  | ToolUseSummaryMessage,  Terminal // 返回值:终止原因>

async function* — 异步生成器!这是一个精妙的设计:

• 通过 yield 流式返回事件

• 最终通过 return 返回终止原因

• 错误自然传播到消费者的 try-catch

4.2 每轮 6 阶段管道

⚡ 阶段 1:预请求压缩(5 种压缩机制按顺序执行)

1. applyToolResultBudget() — 工具结果预算

2. snipCompactIfNeeded() — 最廉价的裁剪

3. microcompact() — 缓存感知的工具结果清理

4. contextCollapse.applyCollapsesIfNeeded() — 分阶段缩减

5. autocompact() — 超阈值时的完整摘要

🔄 阶段 2:API 调用与流式处理

关键创新:StreamingToolExecutor — Claude 生成响应的同时,工具已经开始执行!

🛡️ 阶段 3:错误恢复级联(架构最精妙的部分!)

Prompt-too-long (413) 恢复 — 3 级级联:

Stage 1: Context Collapse drain(成本:0)

Stage 2: Reactive Compact(成本:1 次 API 调用)

Stage 3: 向用户展示错误

💡 设计原则:第一次尝试总是免费的!

4.3 终止原因:9 种退出方式

completed — 正常完成

blocking_limit — 硬性 token 限制达到

aborted_streaming — 用户中断 (Ctrl+C)

prompt_too_long — 恢复尝试后仍超限

max_turns — 超过最大轮数

五、消息压缩:与上下文窗口的战争

Agent AI 工具最大的敌人是上下文窗口限制。Claude Code 用 4 层压缩机制应对:

📊 4 层压缩机制

Snip Compact | 成本:免费 | 损失: | 裁剪整个旧消息块

Microcompact | 成本:免费 | 损失: | 选择性清理工具结果

Context Collapse | 成本: | 损失: | 分阶段缩减,保持原始数据

Auto-Compact | 成本: | 损失: | AI 摘要,保留关键信息

核心原则:总是从最便宜的开始!这是帕累托最优问题——在”最小化成本”和”最大化信息保留”两个轴上找平衡点。

六、8 层安全防护:洋葱式的深度防御

🔐 Layer 1:构建时门控 — 通过不存在实现安全

const WebBrowserTool = feature(‘WEB_BROWSER_TOOL’)  ? require(‘./tools/WebBrowserTool.js’)  : null // 外部构建中物理不存在!

feature() 在构建时求值,Bun 打包器完全消除 false 分支中的代码。运行时无法通过修改环境变量激活。

🚨 Layer 2:Feature Flags — 服务端 Kill Switch

GrowthBook 管理的 tengu_ 前缀特性开关:

• tengu_amber_quartz_disabled — 语音模式 kill switch

• tengu_bypass_permissions_disabled — 绕过权限模式 kill switch

💡 安全事件发生时,可即时从服务端拉下 kill switch,无需客户端更新!

🤖 Layer 4:Transcript Classifier — AI 监视 AI

yoloClassifier.ts — 52K 的文件!(名字叫 YOLO 却有 52K,Anthropic 工程师很有幽默感)

在 auto 模式下,额外的 Claude API 调用判断工具使用安全性:

1. 工具使用请求发生

2. 白名单检查(只读工具 → 跳过分类器)

3. 分类器 API 调用 → “allow” 或 “deny”

4. 3 次连续拒绝 → 回退到提示模式

安全模型设计哲学

1. 默认拒绝 — 需要显式允许规则

2. 失败时提示,而非拒绝 — 不确定时让用户决定

3. 深度防御 — 一层被突破,下一层捕获

4. 服务端 kill switch — 无需客户端更新即可即时停用

5. 构建时消除 — 代码不存在,漏洞也不存在

七、隐藏功能:44 个 Feature Flags 揭示的路线图

7.1 BUDDY — 终端里的电子宠物

🐾 我没开玩笑。Claude Code 有一个完整的电子宠物系统!

• 18 个物种,稀有度从 Common 到 Legendary

• 1% 闪光概率,独立于稀有度

• 闪光传奇 Nebulynx 的概率:0.01%

• 5 个属性:DEBUGGING, PATIENCE, CHAOS, WISDOM, SNARK

• 发布窗口:2026年4月1-7日(愚人节彩蛋?)

7.2 KAIROS — 主动式助手

希腊语”契机”,Claude 先行动的模式:

🚀 KAIROS 能力

SendUserFileTool — 主动发送文件给用户

PushNotificationTool — 移动/桌面推送通知

SubscribePRTool — GitHub PR webhook 订阅

SleepTool — 后台等待(定时器)

💡 场景:GitHub PR 收到新评论 → 检测到 → 检查 CI 结果 → 发送通知:”PR #123 收到 review,CI 失败了,这是你可能需要修复的内容。”

7.3 Dream System — Claude 真的会做梦

💭 services/autoDream/ — 后台记忆整合引擎

三重触发门控:

1. 时间门控:距上次做梦 24 小时

2. 会话门控:距上次做梦至少 5 个会话

3. 锁门控:获取整合锁(防止并发做梦)

“你正在执行一个梦——对你记忆文件的反思性处理。将最近学到的内容合成为持久、组织良好的记忆。”

7.4 Coordinator Mode — 多 Agent 编排

协调者不直接写代码,而是生成和管理多个工作 Agent:

COORDINATOR_MODE_ALLOWED_TOOLS = new Set([  ‘AgentTool’,      // 生成工作进程  ‘TaskStop’,       // 终止工作进程  ‘SendMessage’,    // 与工作进程通信  ‘SyntheticOutput’ // 生成输出])

💡 协调者不能执行 Bash,不能读取文件,只能管理工作进程。这是 AI Agent 的微服务架构——一个 Claude 编排多个 Claude。

7.5 即将发布的模型

代码库包含未公开模型的引用:

• Claude “Capybara” — 新模型家族,已有 v2 版本,支持 1M 上下文窗口

• Opus 4.7 和 Sonnet 4.8 — 代码中已有引用

八、泄露揭示的行业趋势

8.1 Agent 系统比想象中复杂

“调用 LLM API 并执行工具——完成”是演示级别的理解。生产级 Agent 系统需要:

• 上下文管理(4 层压缩)

• 错误恢复(成本感知级联)

• 安全(8 层深度防御)

• 性能(流式并行执行)

8.2 CLI → 平台

Claude Code 正在从单一终端工具进化为多设备、多 Agent 平台

• 从等待用户命令 → 主动监控和通知

• 从打字 → 语音和浏览器自动化

• 从单个 Agent → 由协调者管理的 Agent 群

8.3 我们需要重新定义”开源”

官方仓库只包含插件接口(279 文件),核心引擎(4,600+ 文件)在商业许可之后。

这不是 Anthropic 独有的问题。许多 AI 产品只发布扩展接口,保持核心专有。

九、结语:讽刺与启示

讽刺在于:他们实现了复杂的构建时死代码消除安全机制,却忘记从同一个构建管道中剥离 source maps。他们为用户文件系统构建了 8 层洋葱式保护,却把自己的源代码上传到了 npm。

Claude Code 的内部结构,通过 npm source map 这个荒谬的渠道泄露,揭示了一个全栈 Agent 平台,而非简单的 API 包装。

8 层深度防御安全、4 层消息压缩、收益递减检测、成本感知错误恢复、缓存稳定性工具排序——这些是生产级工程。

本文分析的模式——成本感知错误恢复、多层上下文压缩、构建时特性门控、收益递减检测——不专属于 Claude Code。它们为任何构建 Agent AI 系统的人提供参考。

也许这就是软件工程的本质:即使最复杂的系统,也会倒在最简单的错误上。Anthropic 工程师构建的无疑是令人印象深刻的 Agent 架构。只是下次,希望他们记得把 *.map 加到 .npmignore 里。