Claude Code 源码泄露揭秘
512,000 行代码背后的架构真相
一、事件始末:一个 .map 文件引发的”血案”
1.1 泄露经过
2026年3月31日,安全研究员 Chaofan Shou (@shoucccc) 在 X 上发布了一条震惊 AI 圈的消息:
原因极其简单又极其荒谬:构建时忘记排除 .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 “开源”的真相
如果用餐厅比喻:
三、技术栈:比想象中复杂得多
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 产品只发布扩展接口,保持核心专有。
九、结语:讽刺与启示
Claude Code 的内部结构,通过 npm source map 这个荒谬的渠道泄露,揭示了一个全栈 Agent 平台,而非简单的 API 包装。
8 层深度防御安全、4 层消息压缩、收益递减检测、成本感知错误恢复、缓存稳定性工具排序——这些是生产级工程。
本文分析的模式——成本感知错误恢复、多层上下文压缩、构建时特性门控、收益递减检测——不专属于 Claude Code。它们为任何构建 Agent AI 系统的人提供参考。
夜雨聆风