Claude Code 源码泄露深度剖析:Anthropic AI 编程助手的架构全解密


Claude Code 源码泄露深度剖析:Anthropic AI 编程助手的架构全解密

2026 年 3 月 31 日,安全研究员 Chaofan Shou (@Fried_rice) 发现 Anthropic 的 npm 包中暴露了 .map 文件,意外泄露了 Claude Code CLI 工具的完整 TypeScript 源码。这份源码被迅速归档到 GitHub 仓库 instructkr/claude-code,短短数小时内便获得了近 600 Stars 和 900+ Forks。

“Claude code source code has been leaked via a map file in their npm registry!”
— @Fried_rice, 2026-03-31

作为一个每天都在使用 Claude Code 的重度用户,我第一时间深入研究了这份泄露的源码。本文将从项目架构、核心系统设计、技术栈选型三个维度,全面拆解 Anthropic 是如何构建这个 51 万行代码 的 AI 编程 CLI 工具的。


一、泄露始末:一个 Source Map 引发的”事故”

怎么泄露的?

npm 发布的包中包含了一个 .map 文件(Source Map),该文件包含了指向完整、未混淆的 TypeScript 源码的引用。更关键的是,源码 zip 包直接托管在 Anthropic 的 R2 存储桶上,任何人都可以下载。

npm 包 @anthropic-ai/claude-code 中暴露的 cli.js.map 文件(59.8 MB)

如上图所示,@anthropic-ai/claude-code 包的 2.1.88 版本中,cli.js.map 文件高达 59.8 MB——这个 Source Map 文件包含了完整的源码映射,使得任何人都能还原出原始的 TypeScript 代码。

泄露的规模

指标 数据
文件数量 ~1,900 个文件
代码行数 512,000+ 行
语言 TypeScript (strict)
运行时 Bun
UI 框架 React + Ink (终端 UI)

这不是一个简单的 CLI 工具——这是一个完整的、复杂的多层架构系统


二、整体架构一览

src/
├── main.tsx                 # CLI 入口(Commander.js 解析器)
├── QueryEngine.ts           # 对话引擎核心(~46K 行)
├── Tool.ts                  # 工具类型定义(~29K 行)
├── commands.ts              # 命令注册中心(~25K 行)
├── query.ts                 # 查询执行循环
├── context.ts               # 系统/用户上下文构建
├── cost-tracker.ts          # Token 费用追踪
│
├── tools/                   # 40+ 内置工具实现
├── commands/                # 50+ 斜杠命令实现
├── components/              # 144 个 React/Ink UI 组件
├── hooks/                   # 80+ React Hooks
├── services/                # 外部服务集成层
├── bridge/                  # IDE 桥接层(VS Code/JetBrains)
├── coordinator/             # 多 Agent 协调器
├── skills/                  # 技能系统
├── plugins/                 # 插件系统
├── state/                   # 全局状态管理
├── vim/                     # Vim 模式
├── voice/                   # 语音输入
├── remote/                  # 远程会话
├── server/                  # 服务器模式
├── memdir/                  # 持久化记忆系统
├── tasks/                   # 任务管理
├── screens/                 # 全屏 UI(Doctor、REPL、Resume)
├── schemas/                 # Zod 配置校验
└── entrypoints/             # 多入口初始化逻辑

接下来逐一深入每个核心子系统。

Claude Code 分层架构示意图


三、核心系统深度剖析

3.1 工具系统(Tool System)— 一切能力的基石

Claude Code 的所有”能力”都通过工具(Tool)暴露给 LLM。每个工具都是一个自包含的模块,定义了输入 Schema、权限模型和执行逻辑。

src/tools/ 目录下共有 40+ 个工具实现

工具分类 工具名 功能
文件操作 FileReadTool 读取文件(支持图片、PDF、Notebook)
FileWriteTool 创建/覆写文件
FileEditTool 局部文件修改(字符串替换)
搜索 GlobTool 文件模式匹配搜索
GrepTool 基于 ripgrep 的内容搜索
执行 BashTool Shell 命令执行
PowerShellTool Windows PowerShell 执行
REPLTool 交互式 REPL
网络 WebFetchTool URL 内容抓取
WebSearchTool 网页搜索
Agent AgentTool 子 Agent 生成
SendMessageTool Agent 间消息传递
TeamCreateTool/TeamDeleteTool 团队 Agent 管理
协议 MCPTool MCP 服务器工具调用
LSPTool 语言服务器协议集成
任务 TaskCreateTool/TaskUpdateTool 任务创建与管理
TaskGetTool/TaskListTool 任务查询
模式 EnterPlanModeTool/ExitPlanModeTool 计划模式切换
EnterWorktreeTool/ExitWorktreeTool Git Worktree 隔离
其他 SkillTool 技能执行
ScheduleCronTool 定时任务调度
SleepTool 主动模式等待
SyntheticOutputTool 结构化输出生成
ToolSearchTool 延迟工具发现

架构亮点:每个工具都是声明式的——通过 Schema 定义输入、通过权限模型定义安全边界、通过独立模块实现逻辑。这种设计使得新增工具的成本极低,同时确保了 LLM 能准确理解每个工具的能力边界。

3.2 命令系统(Command System)— 用户交互的前门

src/commands/ 目录下有 50+ 个斜杠命令,涵盖开发工作流的方方面面:

核心开发命令

  • /commit — Git 提交
  • /diff — 查看变更
  • /review — 代码审查
  • /compact — 上下文压缩

配置与管理

  • /config — 设置管理
  • /mcp — MCP 服务器管理
  • /memory — 持久化记忆管理
  • /skills — 技能管理
  • /hooks — 钩子配置

高级功能

  • /vim — Vim 模式切换
  • /doctor — 环境诊断
  • /cost — 使用费用查看
  • /context — 上下文可视化
  • /desktop / /mobile — 跨平台交接

有趣的发现:源码中还有一些未公开的命令,比如 good-claude(给 Claude 正向反馈?)、buddy(伴侣精灵,一个彩蛋功能)、bughunter(自动化 Bug 搜索)、chrome(Chrome 扩展集成)等。

3.3 QueryEngine — 对话引擎的心脏

QueryEngine.ts 是整个 Claude Code 最核心的文件,约 46,000 行代码。它负责:

  • 流式响应处理:与 Anthropic API 的流式通信
  • 工具调用循环:LLM 输出 → 解析工具调用 → 执行工具 → 结果回传 → LLM 继续
  • Thinking 模式:Extended Thinking(扩展思考)的启用与管理
  • 重试逻辑:API 错误的优雅降级与重试
  • Token 计数:精确的 Token 使用量追踪

这是一个经典的 Agent Loop 实现——LLM 不断”思考-行动-观察”,直到任务完成或需要用户输入。

3.4 权限系统(Permission System)— 安全的守门人

src/hooks/toolPermission/ 实现了一套多层权限模型。每次工具调用都会经过权限检查:

工具调用请求 → 权限检查 → [自动通过 | 提示用户 | 拒绝]

支持多种权限模式:

  • default — 默认模式,危险操作需确认
  • plan — 计划模式,仅允许只读操作
  • auto — 自动模式,信任所有操作
  • bypassPermissions — 跳过权限(开发/测试用)

这解释了为什么 Claude Code 在执行文件写入、Shell 命令等操作前会弹出确认提示——不是 LLM 在”犹豫”,而是权限系统在拦截。

3.5 Bridge 系统 — IDE 集成的桥梁

src/bridge/ 实现了 CLI 与 IDE 扩展之间的双向通信层

  • bridgeMain.ts — 桥接主循环
  • bridgeMessaging.ts — 消息协议
  • bridgePermissionCallbacks.ts — 权限回调
  • replBridge.ts — REPL 会话桥接
  • jwtUtils.ts — JWT 认证
  • sessionRunner.ts — 会话执行管理

这套 Bridge 系统使得 VS Code 和 JetBrains 插件能够与底层的 Claude Code CLI 共享同一个会话和上下文,实现了“一个引擎,多个前端”的架构。

3.6 Agent 协调系统 — 从单 Agent 到多 Agent

src/coordinator/ 虽然目前只有一个 coordinatorMode.ts 文件,但结合 AgentToolSendMessageToolTeamCreateTool 等工具,可以看出 Claude Code 已经构建了一套多 Agent 协调机制

  • AgentTool:生成子 Agent 处理独立子任务
  • SendMessageTool:Agent 间通信
  • TeamCreateTool:创建 Agent 团队并行处理
  • useSwarmInitialization.ts / useSwarmPermissionPoller.ts — Swarm 模式初始化与权限轮询

这意味着 Claude Code 可以同时启动多个 Agent 并行工作,类似于一个软件工程团队的分工协作模式。

Agent 多智能体协调系统


四、服务层架构

src/services/ 是外部依赖集成的汇聚点:

服务 说明
api/ Anthropic API 客户端、文件 API、Bootstrap
mcp/ Model Context Protocol 服务器连接管理
oauth/ OAuth 2.0 认证流程
lsp/ Language Server Protocol 管理器
analytics/ GrowthBook 特性标志与分析
plugins/ 插件加载器
compact/ 对话上下文压缩
extractMemories/ 自动记忆提取
tokenEstimation.ts Token 数量估算
teamMemorySync/ 团队记忆同步
policyLimits/ 组织策略限制
remoteManagedSettings/ 远程托管设置
MagicDocs/ 智能文档
PromptSuggestion/ 提示词建议
autoDream/ 自动梦境(?神秘功能)

特别值得关注的是 extractMemories 服务——Claude Code 的记忆系统不仅仅是被动存储,还能主动从对话中提取有价值的信息并持久化。这解释了为什么 Claude Code 用久了会越来越”懂你”。


五、UI 组件体系 — 终端里的 React

Claude Code 使用 React + Ink 构建终端 UI,这是整个项目最”意外”的技术选型之一。src/components/ 下有 144 个 UI 组件,这几乎是一个中型 Web 前端应用的规模。

部分关键组件:

  • App.tsx — 应用根组件
  • CoordinatorAgentStatus.tsx — 多 Agent 状态展示
  • ContextVisualization.tsx — 上下文可视化
  • ContextSuggestions.tsx — 上下文建议
  • DiagnosticsDisplay.tsx — 诊断信息展示
  • AutoUpdater.tsx — 自动更新
  • ConsoleOAuthFlow.tsx — OAuth 认证流程
  • DevBar.tsx — 开发者工具栏

配套的 80+ React Hooks 覆盖了几乎所有状态管理场景:

  • useVimInput.ts — Vim 模式输入处理
  • useVoice.ts / useVoiceIntegration.tsx — 语音输入集成
  • useSwarmInitialization.ts — Swarm 模式初始化
  • useScheduledTasks.ts — 定时任务调度
  • useMemoryUsage.ts — 内存使用监控
  • useTerminalSize.ts — 终端尺寸自适应
  • useVirtualScroll.ts — 虚拟滚动(性能优化)

六、技术栈深度解析

类别 技术 选型理由分析
运行时 Bun 极快的启动速度 + 原生 TypeScript 支持
语言 TypeScript (strict) 类型安全,512K 行代码必须强类型
终端 UI React + Ink 声明式 UI,组件复用,开发效率高
CLI 解析 Commander.js 成熟的 CLI 参数解析框架
Schema 校验 Zod v4 运行时类型校验 + TypeScript 类型推断
代码搜索 ripgrep 极快的代码搜索引擎
协议 MCP SDK + LSP 标准化的工具/语言服务器协议
API Anthropic SDK 官方 SDK
遥测 OpenTelemetry + gRPC 标准化可观测性
特性标志 GrowthBook A/B 测试与灰度发布
认证 OAuth 2.0 + JWT + macOS Keychain 多层认证体系

为什么选 Bun 而不是 Node.js?

Bun 提供了几个关键优势:

  1. 启动速度:比 Node.js 快数倍,CLI 工具对冷启动时间敏感
  2. 原生 TypeScript:无需编译步骤
  3. Bundle 特性标志bun:bundlefeature() 机制实现了编译时死代码消除
import { feature } from 'bun:bundle'

// 未启用的功能代码在构建时被完全移除
const voiceCommand = feature('VOICE_MODE')
  ? require('./commands/voice/index.js').default
  : null

目前已知的特性标志:PROACTIVEKAIROSBRIDGE_MODEDAEMONVOICE_MODEAGENT_TRIGGERSMONITOR_TOOL

为什么用 React 写终端 UI?

这看似反直觉,但有深层考量:

  1. 声明式渲染:终端 UI 的状态管理同样复杂(权限弹窗、多 Agent 状态、流式输出),React 的声明式模型大大降低了复杂度
  2. 组件复用:144 个组件之间存在大量复用关系
  3. Hooks 生态:80+ 自定义 Hooks 实现了关注点分离
  4. Bridge 复用:同一套组件逻辑可以通过 Bridge 在 IDE 中复用

七、启动优化 — 毫秒级的细节打磨

Claude Code 的启动序列经过精心优化:

// main.tsx — 在其他模块加载之前就作为副作用触发
startMdmRawRead()        // 预读 MDM 设置
startKeychainPrefetch()  // 预取 Keychain 凭据

并行预取策略:MDM 设置读取、Keychain 访问、API 预连接和 GrowthBook 初始化全部并行执行,避免串行等待。

懒加载策略:重模块(OpenTelemetry ~400KB、gRPC ~700KB)通过动态 import() 延迟加载,只在实际需要时才引入。


八、几个有趣的发现

1. Buddy 系统(彩蛋)

src/buddy/ 目录——一个”伴侣精灵”系统。虽然目前看起来是个彩蛋功能,但谁知道 Anthropic 会不会把它变成一个正式功能?

2. autoDream 服务

src/services/autoDream/ ——“自动梦境”?名字非常神秘。可能与 Claude 的后台思考或记忆整理相关。

3. 隐藏命令

源码中存在许多未公开的命令:

  • good-claude — 给 Claude 正向反馈
  • bughunter — 自动化 Bug 猎手
  • chrome — Chrome 浏览器集成
  • btw — 顺便说一下(?)
  • ant-trace — Anthropic 内部追踪
  • mock-limits — 模拟速率限制(测试用)
  • heapdump — 堆内存快照

4. KAIROS 特性标志

在特性标志中出现的 KAIROS 是什么?Kairos 在希腊语中意为”恰当的时机”——可能是某个与时间相关的高级 Agent 调度功能。


九、架构设计的核心思想总结

经过深入分析,Claude Code 的架构体现了几个核心设计理念:

1. 工具即能力(Tools as Capabilities)

LLM 的所有交互能力都通过标准化的 Tool 接口暴露,每个工具都是自描述的(Schema + 权限 + 执行逻辑)。这种设计使得:

  • 新增能力 = 新增一个工具模块
  • LLM 能通过 Schema 精确理解工具的输入输出
  • 权限系统能细粒度控制每个工具的执行

2. Agent 是一等公民

Agent 不是一个事后想法,而是从架构层面就支持的核心概念。子 Agent 生成、Agent 间通信、团队协作都有专门的工具和服务支撑。

3. 声明式优于命令式

从 React/Ink 的 UI 渲染到 Zod Schema 的类型校验,再到工具定义的声明式接口,整个项目都倾向于声明式编程范式

4. 性能是设计约束

Bun 运行时、并行预取、懒加载、编译时死代码消除——这些优化不是事后补丁,而是从技术选型阶段就考虑在内的设计决策。


十、写在最后

Claude Code 是目前市面上最复杂的 AI 编程 CLI 工具之一。51 万行 TypeScript 代码、40+ 工具、50+ 命令、144 个 UI 组件——这不是一个简单的”API 包装器”,而是一个完整的软件工程平台

这次源码泄露让我们得以窥见 Anthropic 在 AI 工具链上的工程投入之深。对于开发者而言,这份源码是学习大型 TypeScript 项目架构、Agent 系统设计、终端 UI 开发的绝佳教材。

注意:本文仅作技术分析用途。源码的所有权归属 Anthropic,请勿将其用于商业目的。


参考链接


文章作者: Onefly
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Onefly !
评论
  目录