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 交互,执行软件工程任务。让我们先来看看它的整体架构。

系统架构图

基础设施层

服务层

核心引擎层

用户交互层

CLI入口 main.tsx

命令系统 commands/

REPL模式 replLauncher

交互式UI screens/

QueryEngine
查询引擎

工具系统 tools/

技能系统 skills/

任务管理 tasks/

Claude API

MCP服务

LSP客户端

OAuth认证

终端渲染 ink/

状态管理 state/

桥接系统 bridge/

权限控制 hooks/

核心技术栈

类别 技术选型
运行时 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 成本追踪

核心流程:

工具系统 Claude API QueryEngine 终端UI 用户 工具系统 Claude API QueryEngine 终端UI 用户 alt [需要工具调用] 输入消息 处理输入 构建上下文 发送请求 流式响应 tool_use 执行工具 工具结果 继续对话 流式输出 显示结果

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 启用验证代理(对抗性验证)
特别有意思的设计
  1. Anthropic 内部专用提示

    • 更严格的代码风格要求(默认不写注释)
    • 更主动的协作方式(指出用户的误解)
    • 更诚实的结果报告(不造假测试结果)
  2. 验证代理(Verification Agent)

    • 非平凡实现完成后需要独立的对抗性验证
    • 只有验证代理可以分配 PASS/FAIL 判决
    • 自己的检查不能替代验证代理
  3. 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

学习建议

推荐从以下几个入口开始探索:

  1. src/QueryEngine.ts - 核心查询引擎
  2. src/Tool.ts - 工具基类定义
  3. src/tools/ - 各种工具实现目录
  4. src/services/mcp/ - MCP 协议实现

写在最后

Claude Code 源码泄露是一个有趣的事件。从安全角度看,这是一个发布流程的失误;但从学习角度看,这为我们提供了一个学习生产级 AI 开发者工具架构的绝佳机会。

这个代码库展示了许多优秀的软件工程实践:

  • 清晰的模块化设计
  • 精心考虑的性能优化
  • 完善的安全模型
  • 灵活的扩展机制

希望这个系列文章能帮助你更好地理解 Claude Code 的内部工作原理,并从中汲取灵感用于自己的项目。


下一篇:[QueryEngine 深度解析] — 敬请期待!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐