Claude Code源码泄露:在你压力大的时候,不妨去看看Anthropic的工作人员
Claude Code源码泄露,在你压力大的时候,不妨去看看Anthropic的工作人员
Claude Code源码泄露与架构深度解析
在你压力大的时候,不妨去看看Anthropic的工作人员。2026年3月31日,Claude Code 的完整 TypeScript 源码通过 npm 包中的 source map 文件意外泄露。本文将回顾这一事件,分析 Claude Code 的整体架构设计,并预告后续将对其核心模块进行逐篇深入讲解。
📦 源码已上传至GitHub:我已将提取的 Claude Code 源码上传至 GitHub,供大家学习研究:https://github.com/XiaoMaColtAI/claude-code-source
事件回顾:源码是如何泄露的
2026年3月31日,用户 @Fried_rice 在 X(原 Twitter)上公开指出:
“Claude code source code has been leaked via a map file in their npm registry!”

问题出在 Claude Code 的 npm 发布包中包含了完整的 .map 源映射文件,而这些源映射文件引用了托管在 Anthropic R2 存储桶上的未混淆 TypeScript 源码。这使得任何人都可以下载完整的 src/ 目录快照。
泄露的代码规模
| 指标 | 数据 |
|---|---|
| 文件数量 | ~1,900 个 |
| 代码行数 | 512,000+ 行 |
| 主要语言 | TypeScript |
| 运行时 | Bun |
这不是一个简单的 demo,而是一个完整的、生产级别的 AI 开发者工具代码库。
源码提取方法
如果你想自己提取 Claude Code 源码,可以按照以下步骤操作:
步骤 1:下载 source map 文件
首先从 npm registry 下载包含完整源码的 source map 文件:
# 使用 curl 下载
curl -O https://unpkg.com/@anthropic-ai/claude-code@2.1.88/cli.js.map
# 或者使用 wget
wget https://unpkg.com/@anthropic-ai/claude-code@2.1.88/cli.js.map
步骤 2:准备提取脚本
将以下代码保存为 unpack.mjs:
import { readFileSync, writeFileSync, mkdirSync } from "fs";
import { dirname, join } from "path";
const mapFile = join(import.meta.dirname, "cli.js.map");
const outDir = join(import.meta.dirname, "unpacked");
console.log("正在读取 source map(57MB,请稍等 10-20 秒)...");
const map = JSON.parse(readFileSync(mapFile, "utf-8"));
const sources = map.sources || [];
const contents = map.sourcesContent || [];
console.log(`共发现 ${sources.length} 个源文件,正在提取...`);
let written = 0;
let skipped = 0;
for (let i = 0; i < sources.length; i++) {
const src = sources[i];
const content = contents[i];
if (content == null) {
skipped++;
continue;
}
const outPath = join(outDir, src.replace(/^\.\.\//g, ""));
mkdirSync(dirname(outPath), { recursive: true });
writeFileSync(outPath, content);
written++;
}
console.log(`✅ 提取完成!共写入 ${written} 个文件到 ${outDir} 目录`);
if (skipped > 0) console.log(`跳过了 ${skipped} 个空文件`);
步骤 3:运行提取脚本
node unpack.mjs
脚本会自动:
- 读取
cli.js.map(约 57MB) - 提取所有嵌入的 TypeScript 源码
- 将文件写入
unpacked/目录
注意事项
⚠️ 请确保:
- 仅用于学习和研究目的
- 遵守相关法律法规
- 不要用于商业用途
Claude Code 架构概览
Claude Code 是 Anthropic 官方开发的 CLI 工具,让用户可以在终端中与 Claude AI 交互,执行软件工程任务。让我们先来看看它的整体架构。
系统架构图
核心技术栈
| 类别 | 技术选型 |
|---|---|
| 运行时 | Bun |
| 语言 | TypeScript (strict) |
| 终端UI | React + Ink |
| CLI解析 | Commander.js |
| schema验证 | Zod v4 |
| 代码搜索 | ripgrep |
| 协议 | MCP SDK, LSP |
| API | Anthropic SDK |
| 遥测 | OpenTelemetry + gRPC |
核心模块详解
1. 入口与命令系统
主入口 (main.tsx)
这是整个应用的启动点,采用了精心设计的并行预加载策略:
// 启动优化:并行预读取
startMdmRawRead() // 并行读取 MDM 设置
startKeychainPrefetch() // 预取密钥链凭证
initializeGrowthBook() // 初始化功能标志
这种设计让启动时间减少了约 65ms,对于 CLI 工具来说非常重要。
命令系统 (commands/)
Claude Code 提供了约 50 个内置斜杠命令,主要分为:
| 类别 | 命令示例 |
|---|---|
| 认证 | /login, /logout |
| 配置 | /config, /theme, /keybindings |
| 开发 | /commit, /diff, /review, /branch |
| AI功能 | /agents, /skills, /tasks, /memory |
| 高级 | /plan, /mcp, /resume |
2. 查询引擎 (QueryEngine.ts)
这是整个系统的核心大脑,约 46,000 行代码,负责:
- 消息历史管理
- 上下文构建(系统提示、文件状态、记忆)
- 工具调用协调
- 流式响应处理
- Token 成本追踪
核心流程:
3. 工具系统 (Tool.ts, tools/)
工具是 AI 与外部世界交互的接口。Claude Code 内置了约 40 个工具:
| 工具类别 | 示例 |
|---|---|
| 文件操作 | FileReadTool, FileWriteTool, FileEditTool, GlobTool, GrepTool |
| 执行 | BashTool, AgentTool |
| 网络 | WebSearchTool, WebFetchTool |
| 任务管理 | TaskCreateTool, TaskUpdateTool, TodoWriteTool |
| 开发 | LSPTool, SkillTool, MCPTool |
| 其他 | EnterPlanModeTool, CronCreateTool, NotebookEditTool |
每个工具都定义了清晰的输入 schema、权限模型和执行逻辑。
4. Prompt 系统 (constants/prompts.ts)
Claude Code 的 prompt 系统是其核心竞争力之一,通过精心设计的模块化提示词工程,确保 AI 能够稳定、高效地完成任务。
系统架构
Prompt 系统采用分段式模块化设计,主要包含以下部分:
| 模块 | 作用 |
|---|---|
| Intro Section | 定义 AI 角色定位和基本行为准则 |
| System Section | 系统级规则(工具执行、权限模式等) |
| Doing Tasks Section | 任务执行指南(代码风格、协作方式等) |
| Actions Section | 谨慎操作指南(不可逆操作需要确认) |
| Using Tools Section | 工具使用规范(优先使用专用工具而非 Bash) |
| Tone & Style | 语气风格要求(简洁、引用文件路径等) |
| Output Efficiency | 输出效率要求(直截了当、避免冗余) |
| Environment | 环境信息(CWD、Git 状态、模型信息等) |
| Memory | 持久化记忆(从 memdir 加载) |
| MCP Instructions | MCP 服务器指令(动态连接的服务器) |
缓存优化策略
为了优化性能和降低成本,Claude Code 采用了静态/动态内容分离的缓存策略:
// 静态内容边界标记
export const SYSTEM_PROMPT_DYNAMIC_BOUNDARY =
'__SYSTEM_PROMPT_DYNAMIC_BOUNDARY__'
- 静态内容(可缓存):角色定义、系统规则、工具指南等
- 动态内容(不可缓存):环境信息、记忆、MCP 服务器状态等
这种设计使得大部分提示词可以跨会话缓存,显著减少 token 使用量。
核心提示词片段
让我们看看几个关键的提示词部分:
Intro Section(角色定义):
You are an interactive agent that helps users with software engineering tasks.
Use the instructions below and the tools available to you to assist the user.
Doing Tasks Section(任务执行):
- 不要添加超出要求的功能
- 不要为一次性操作创建抽象
- 只在逻辑不明显时添加注释
- 在报告任务完成前验证它确实有效
Actions Section(谨慎操作):
- 仔细考虑可逆性和影响范围
- 破坏性操作需要用户确认(删除文件、强制推送等)
- 遇到障碍时找出根本原因,而不是绕过安全检查
Output Efficiency(输出效率):
- 直截了当,先尝试最简单的方法
- 保持回复简短,直奔主题
- 跳过填充词和不必要的过渡
功能标志控制
Prompt 系统还支持通过功能标志动态调整:
| 功能标志 | 作用 |
|---|---|
PROACTIVE / KAIROS |
启用自主工作模式 |
CACHED_MICROCOMPACT |
启用工具结果自动清理 |
EXPERIMENTAL_SKILL_SEARCH |
启用技能搜索 |
TOKEN_BUDGET |
启用 Token 预算控制 |
VERIFICATION_AGENT |
启用验证代理(对抗性验证) |
特别有意思的设计
-
Anthropic 内部专用提示:
- 更严格的代码风格要求(默认不写注释)
- 更主动的协作方式(指出用户的误解)
- 更诚实的结果报告(不造假测试结果)
-
验证代理(Verification Agent):
- 非平凡实现完成后需要独立的对抗性验证
- 只有验证代理可以分配 PASS/FAIL 判决
- 自己的检查不能替代验证代理
-
Undercover 模式:
- 从系统提示中移除所有模型名称/ID
- 防止内部信息泄露到公开提交中
这个 prompt 系统展示了企业级 AI 应用在提示词工程上的深度思考——不仅关注功能实现,更注重稳定性、安全性和成本控制。
5. 桥接系统 (bridge/)
这是 Claude Code 最有趣的部分之一,它实现了一个双向通信层,连接 IDE 扩展(VS Code、JetBrains)与 CLI。
核心组件包括:
bridgeMain.ts- 桥接主循环bridgeMessaging.ts- 消息协议replBridge.ts- REPL 会话桥接jwtUtils.ts- JWT 认证sessionRunner.ts- 会话执行管理
这使得用户可以在 IDE 中使用 Claude Code,同时保持 CLI 的完整功能。
5. 权限系统
每次工具调用都会经过权限检查:
type PermissionMode =
| 'ask' // 每次询问用户
| 'auto' // 自动批准(受限)
| 'plan' // 计划模式
| 'bypass' // 绕过权限(危险)
这种设计既保证了安全性,又提供了足够的灵活性。
6. 技能系统 (skills/)
技能是可复用的工作流,可以理解为"高级命令"。内置技能包括:
batchSkill- 批量处理debugSkill- 调试辅助loopSkill- 循环执行stuckSkill- 处理卡顿verifySkill- 结果验证
用户还可以添加自定义技能。
设计亮点
1. 并行预加载
// main.tsx - 在其他 import 之前作为副作用触发
startMdmRawRead()
startKeychainPrefetch()
通过并行预读取 MDM 设置和密钥链,显著优化了启动时间。
2. 懒加载
重型模块(OpenTelemetry、gRPC、analytics)通过动态 import() 延迟加载,直到真正需要时才加载。
3. 功能标志
使用 Bun 的 bun:bundle 功能标志进行死代码消除:
import { feature } from 'bun:bundle'
// 未激活的代码在构建时完全被移除
const voiceCommand = feature('VOICE_MODE')
? require('./commands/voice/index.js').default
: null
主要的功能标志包括:PROACTIVE, KAIROS, BRIDGE_MODE, DAEMON, VOICE_MODE, AGENT_TRIGGERS, MONITOR_TOOL
目录结构总览
src/
├── main.tsx # 入口点
├── commands.ts # 命令注册表
├── tools.ts # 工具注册表
├── Tool.ts # 工具类型定义
├── QueryEngine.ts # LLM 查询引擎(~46K行)
├── context.ts # 系统/用户上下文收集
├── cost-tracker.ts # Token 成本追踪
│
├── commands/ # 斜杠命令实现(~50个)
├── tools/ # Agent 工具实现(~40个)
├── components/ # Ink UI 组件(~140个)
├── hooks/ # React 钩子
├── services/ # 外部服务集成
├── screens/ # 全屏 UI(Doctor、REPL、Resume)
├── types/ # TypeScript 类型定义
├── utils/ # 工具函数
│
├── bridge/ # IDE 和远程控制桥接
├── coordinator/ # 多代理协调器
├── plugins/ # 插件系统
├── skills/ # 技能系统
├── keybindings/ # 键绑定配置
├── vim/ # Vim 模式
├── voice/ # 语音输入
├── remote/ # 远程会话
├── server/ # 服务器模式
├── memdir/ # 持久化记忆目录
├── tasks/ # 任务管理
├── state/ # 状态管理
├── migrations/ # 配置迁移
├── schemas/ # 配置模式(Zod)
└── ...
后续预告:模块深度解析系列
本文只是一个开始。在接下来的文章中,我将逐个深入讲解 Claude Code 的核心模块:
计划中的主题
| 序号 | 主题 | 预计内容 |
|---|---|---|
| 1 | QueryEngine 深度解析 | 消息管理、上下文构建、工具调用循环 |
| 2 | Prompt 系统设计 | 模块化架构、缓存策略、提示词工程实践 |
| 3 | 工具系统设计与实现 | Tool 接口、权限模型、内置工具源码分析 |
| 4 | 命令系统架构 | 命令注册、参数解析、执行流程 |
| 5 | 终端 UI 框架(Ink) | 组件系统、布局引擎、事件处理 |
| 6 | 桥接系统详解 | WebSocket 通信、会话管理、JWT 认证 |
| 7 | 技能系统设计 | 技能定义、钩子机制、执行流程 |
| 8 | 状态管理架构 | AppState、选择器、持久化 |
| 9 | MCP 协议集成 | Model Context Protocol 实现 |
| 10 | 安全架构分析 | 权限控制、SSRF 防护、输入验证 |
| 11 | 性能优化策略 | 启动优化、缓存策略、流式处理 |
每篇文章都将包含:
- 源码分析
- 架构图解
- 关键代码片段
- 设计思路解读
- 实际使用示例
GitHub 仓库说明
为了方便大家学习研究,我已将提取的 Claude Code 源码上传至 GitHub:
仓库地址:https://github.com/XiaoMaColtAI/claude-code-source
仓库内容
- ✅ 完整的
src/目录(约 1,900 个文件) - ✅ 完整的工具实现(40+ 工具)
- ✅ TypeScript 类型定义
- ✅ 配置文件和 Schema
使用方式
# 克隆仓库
git clone https://github.com/XiaoMaColtAI/claude-code-source.git
# 浏览源码
cd claude-code-source
ls -la
学习建议
推荐从以下几个入口开始探索:
src/QueryEngine.ts- 核心查询引擎src/Tool.ts- 工具基类定义src/tools/- 各种工具实现目录src/services/mcp/- MCP 协议实现
写在最后
Claude Code 源码泄露是一个有趣的事件。从安全角度看,这是一个发布流程的失误;但从学习角度看,这为我们提供了一个学习生产级 AI 开发者工具架构的绝佳机会。
这个代码库展示了许多优秀的软件工程实践:
- 清晰的模块化设计
- 精心考虑的性能优化
- 完善的安全模型
- 灵活的扩展机制
希望这个系列文章能帮助你更好地理解 Claude Code 的内部工作原理,并从中汲取灵感用于自己的项目。
下一篇:[QueryEngine 深度解析] — 敬请期待!
更多推荐



所有评论(0)