乐于分享
好东西不私藏

Claude Code 源码技术分析报告

Claude Code 源码技术分析报告

来源: 基于 2026-03-31 npm 包 source map 暴露的公开快照
规模: ~1,900 文件, 512,000+ 行 TypeScript 代码
运行时: Bun | 语言: TypeScript (strict) | 终端 UI: React + Ink


目录

  1. 1. 项目概述
  2. 2. 技术栈
  3. 3. 架构设计
  4. 4. 核心模块详解
  5. 5. 功能模块
  6. 6. 部署方案
  7. 7. 关键技术实现
  8. 8. 安全与权限
  9. 9. 性能优化

1. 项目概述

Claude Code 是 Anthropic 官方 CLI 工具,用于从终端与 Claude 交互,执行软件工程任务(编辑文件、运行命令、搜索代码库、协调工作流等)。

关键元数据

属性
公开暴露时间
2026-03-31
语言
TypeScript (strict mode)
运行时
Bun
终端 UI
React 18 + Ink
代码规模
~1,900 文件, 512K+ 行
CLI 解析
Commander.js
模式支持
Vim Mode, Voice Mode, Plan Mode

2. 技术栈

运行时与语言

  • • Bun: 运行时 + bundler,使用 bun:bundle 实现条件编译和 dead code elimination
  • • TypeScript: strict mode,Zod v4 用于运行时 schema 验证

核心框架

类别
技术
终端 UI
React + Ink (vadimdemedes/ink)
CLI 解析
@commander-js/extra-typings
Schema 验证
Zod v4
布局引擎
Yoga (Facebook 开源)
终端协议
ANSI/VT100 (CSI, OSC, DEC, SGR)

AI & API

类别
技术
LLM API
Anthropic SDK (@anthropic-ai/sdk)
模型支持
Claude 3.5/3.7, Opus, Sonnet, Haiku
Prompt 缓存
beta header 支持
结构化输出
beta header 支持

协议集成

协议
实现
MCP (Model Context Protocol)
@modelcontextprotocol/sdk
LSP (Language Server Protocol)
自定义 manager + transport
OAuth 2.0
自定义实现
gRPC
OpenTelemetry

代码搜索

  • • ripgrep: 内容搜索
  • • Glob: 文件模式匹配

可观测性

组件
技术
Feature Flags
GrowthBook
分析
GrowthBook + Datadog
Traces
OpenTelemetry + gRPC
Session 重放
Asciicast

3. 架构设计

3.1 整体架构图

┌─────────────────────────────────────────────────────────────┐
│                        main.tsx                              │
│              (Commander.js CLI 入口, ~4,683 行)              │
└─────────────────────┬───────────────────────────────────────┘
                      │
          ┌───────────┼───────────┐
          ▼           ▼           ▼
   ┌──────────┐ ┌──────────┐ ┌──────────┐
   │ MDM Prefetch │ │ Keychain  │ │ Analytics │
   │ (并行启动) │ │ Prefetch  │ │ (GrowthBook)│
   └──────────┘ └──────────┘ └──────────┘
          │
          ▼
┌─────────────────────────────────────────────────────────────┐
│                    launchRepl() → REPL.tsx                  │
│              (交互式 REPL, ~2,000+ 行)                       │
└─────────────────────┬───────────────────────────────────────┘
                      │
          ┌───────────┼───────────┐
          ▼           ▼           ▼
   ┌──────────┐ ┌──────────┐ ┌──────────┐
   │AppState  │ │ QueryEngine│ │ Tool Pool │
   │Provider  │ │  (查询引擎) │ │  (45+ 工具) │
   └──────────┘ └──────────┘ └──────────┘
          │           │           │
          ▼           ▼           ▼
   ┌─────────────────────────────────────────────────────────┐
   │                    服务层 (Services)                     │
   │  API │ MCP │ LSP │ OAuth │ Analytics │ Compact │ Voice  │
   └─────────────────────────────────────────────────────────┘

3.2 核心文件

文件
行数
职责
main.tsx
~4,683
CLI 入口, 启动编排, 配置初始化
entrypoints/cli.tsx
~2,000+
快速路径路由 (version, daemon, remote-control)
screens/REPL.tsx
~2,000+
交互式 REPL 组件
query.ts
1,729
核心查询循环, API 调用, 流式处理
QueryEngine.ts
1,295
Headless/SDK 查询生命周期
Tool.ts
792
工具接口定义和 buildTool 工厂
commands.ts
754
命令注册表 (100+ slash commands)
tools.ts
389
工具组装, 过滤, presets
context.ts
189
系统/用户上下文收集

3.3 依赖注入与初始化流程

// main.tsx 启动序列
1.profileCheckpoint('main_tsx_entry')     // 性能剖析起点
2.startMdmRawRead()                        // MDM 子进程并行启动
3.startKeychainPrefetch()                  // Keychain 读取并行启动
4.enableConfigs()                           // 配置启用
5.initializeTelemetryAfterTrust()          // 可观测性初始化
6.fetchBootstrapData()                     // API 引导数据
7.loadRemoteManagedSettings()               // 远程托管设置
8.refreshPolicyLimits()                    // 组织策略限制
9.initializeLspServerManager()             // LSP 服务初始化
10.launchRepl() → REPL.tsx// 启动 REPL

4. 核心模块详解

4.1 工具系统 (Tool System)

工具接口 (src/Tool.ts)

interfaceTool {
namestring
call(inputunknown): Promise<ToolResult>
description(): string
inputSchemaZodSchema
outputSchema?: ZodSchema

// 安全元数据
isConcurrencySafe(): boolean
isReadOnly(): boolean
isDestructive(): boolean
checkPermissions(inputToolInput): PermissionResult

// UI 渲染
renderToolUseMessage(): ReactNode
renderToolResultMessage(): ReactNode

// 权限
validateInput(inputunknown): ValidationResult
}

内置工具 (45+)

工具
文件
描述
BashTool tools/BashTool/
Shell 命令执行
FileReadTool tools/FileReadTool/
文件读取 (图片, PDF, notebook)
FileWriteTool tools/FileWriteTool/
文件创建/覆盖
FileEditTool tools/FileEditTool/
局部文件修改
GlobTool tools/GlobTool/
文件模式搜索
GrepTool tools/GrepTool/
ripgrep 内容搜索
WebFetchTool tools/WebFetchTool/
URL 内容获取
WebSearchTool tools/WebSearchTool/
网页搜索
AgentTool tools/AgentTool/
子 Agent 派生
SkillTool tools/SkillTool/
Skill 执行
MCPTool tools/MCPTool/
MCP 服务器工具调用
LSPTool tools/LSPTool/
LSP 协议集成
TaskCreateTool tools/TaskCreateTool/
任务创建
TaskUpdateTool tools/TaskUpdateTool/
任务更新
EnterPlanModeTool tools/EnterPlanModeTool/
计划模式开关
CronCreateTool tools/CronCreateTool/
定时任务创建

工具执行策略 (src/services/tools/toolOrchestration.ts)

// 工具调用分区执行
1. 只读工具: 并发执行 (max10)
2. 非只读工具: 串行执行
3. 可配置并发数: CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY

4.2 命令系统 (Command System)

命令注册 (src/commands.ts)

interfaceCommand {
type'prompt' | 'custom'
namestring
descriptionstring
allowedTools?: Tool[]
  getPromptForCommand?(contextCommandContext): string | Promise<string>
}

常用命令

命令
描述
/commit
Git 提交
/review
代码审查
/compact
上下文压缩
/mcp
MCP 服务器管理
/config
设置管理
/doctor
环境诊断
/memory
持久内存管理
/skills
Skill 管理
/tasks
任务管理
/vim
Vim 模式开关
/diff
查看变更
/cost
检查使用成本
/resume
恢复会话

4.3 查询引擎 (Query Engine)

查询循环 (src/query.ts)

用户输入
    │
    ▼
processUserInput() ──────────────────────┐
    │                                    │
    ▼                                    │
isSlashCommand()? ──Yes──► 执行 Slash Command
    │ No
    ▼
QueryEngine.submitMessage()
    │
    ├── fetchSystemPromptParts() ────► 上下文构建
    │
    ├── API 调用 (流式)
    │       │
    │       ▼
    │   接收 streaming response
    │       │
    │       ▼
    │   tool_calls? ──Yes──► runTools() ──► 递归
    │       │ No
    │       ▼
    └── 返回最终响应

特性支持

  • • 流式响应: 支持 Server-Sent Events
  • • 重试逻辑: 指数退避
  • • Token 计数: 内置 cost tracker
  • • Prompt 缓存: beta header 支持
  • • 思维模式: thinking mode 支持

4.4 状态管理 (State Management)

Store 模式 (src/state/store.ts)

exportfunction createStore<T>(
initialState: T,
onChange?: OnChange<T>
): Store<T>

AppState (src/state/AppStateStore.ts)

interfaceAppState {
settingsUserConfiguration
mainLoopModelModelConfig
toolPermissionContextPermissionContext
mcpMcpConnections
tasksTaskState
kairosEnabledboolean
replBridgeStateBridgeState
fileHistoryFileHistory
}

Provider 层级

<AppStateProvider>
  <MailboxProvider>
    <VoiceProvider>        {/* VOICE_MODE only */}
      {children}
    </VoiceProvider>
  </MailboxProvider>
</AppStateProvider>

5. 功能模块

5.1 服务层 (Services)

API 服务 (src/services/api/)

文件
描述
claude.ts
Anthropic API 客户端 (~944 行)
client.ts
HTTP transport, 流式处理
bootstrap.ts
会话引导
errors.ts
错误分类和重试逻辑
filesApi.ts
文件上传/下载
promptCacheBreakDetection.ts
Prompt 缓存中断检测

MCP 服务 (src/services/mcp/)

文件
描述
client.ts
MCP SDK 客户端 (~119KB)
config.ts
服务器配置解析
types.ts
MCP 类型定义
MCPConnectionManager.tsx
React hook 连接管理

LSP 服务 (src/services/lsp/)

文件
描述
manager.ts
LSP 服务协调器
LSPServerManager.ts
服务器管理器实现
LSPClient.ts
LSP 客户端
config.ts
LSP 配置

其他服务

服务
描述
compact/
对话上下文压缩
oauth/
OAuth 2.0 认证
analytics/
分析和 feature flags
plugins/
插件加载器
policyLimits/
组织策略限制
voice.ts
语音输入服务

5.2 UI 层 (Ink/React)

Ink 核心 (src/ink/)

ink/
├── ink.tsx              # 主组件
├── App.tsx              # 根组件
├── reconciler.ts        # React Reconciler 适配
├── renderer.ts          # Yoga 布局引擎
├── termio/              # 终端协议解析
│   ├── ansi.ts          # ANSI 转义序列
│   ├── parser.ts        # 解析器
│   ├── csi.ts           # Control Sequence Introducer
│   ├── osc.ts           # Operating System Command
│   └── dec.ts           # DEC 私有序列
├── events/              # 事件系统
│   ├── keyboard-event.ts
│   ├── mouse-event.ts
│   └── focus-event.ts
├── layout/              # 布局引擎
│   ├── engine.ts
│   ├── node.ts
│   └── yoga.ts
└── hooks/               # 自定义 hooks
    ├── use-input.ts
    ├── use-stdin.ts
    ├── use-app.ts
    └── use-animation-frame.ts

UI 组件 (src/components/)

  • • 146 个组件 总计
  • • 主要组件:
    • • Messages.tsx (147KB) – 消息渲染
    • • MessageSelector.tsx (115KB) – 消息选择
    • • ScrollKeybindingHandler.tsx (148KB) – 键盘处理
    • • Stats.tsx (152KB) – 统计显示
    • • StatusLine.tsx (49KB) – 状态栏

5.3 插件系统 (src/plugins/)

// 插件加载流程
initBuiltinPlugins()           // 加载内置插件
loadAllPluginsCacheOnly()     // 加载缓存插件
cleanupOrphanedPluginVersionsInBackground()  // 清理孤立版本

5.4 Skill 系统 (src/skills/)

  • • 内置 skills: init/review-pr/pdf/commit/simplify/security-review/loop/
  • • 用户可自定义 skills
  • • 通过 SkillTool 执行

5.5 Vim 模式 (src/vim/)

文件
描述
motions.ts
移动命令
operators.ts
操作符
transitions.ts
状态转换
textObjects.ts
文本对象

6. 部署方案

6.1 构建配置

Bundler: Bun (bun:bundle)

条件编译:

import { feature } from'bun:bundle'

constmodule = feature('FEATURE_FLAG')
  ? require('./module.js').default
  : null

6.2 Feature Flags

Flag
用途
COORDINATOR_MODE
多 Agent 协调器
KAIROS
助手模式
BRIDGE_MODE
远程控制
DAEMON
长运行监督进程
BG_SESSIONS
后台会话
VOICE_MODE
语音输入
WEB_BROWSER_TOOL
浏览器自动化
MONITOR_TOOL
系统监控
AGENT_TRIGGERS
定时任务
CONTEXT_COLLAPSE
上下文压缩

6.3 启动优化 (main.tsx)

// 并行预取节省 ~65ms
startMdmRawRead()        // macOS: plutil, Windows: reg query
startKeychainPrefetch()  // OAuth + API key 读取并行化

6.4 发布配置

  • • 版本管理MACRO.VERSION (编译时内联)
  • • 发布目标ant (内部) vs external (公开)
  • • 平台支持: macOS, Windows, Linux

7. 关键技术实现

7.1 终端渲染 (Ink)

Ink 是 React 的终端渲染器,使用 Yoga 布局引擎:

// 渲染流程
JSX → InkComponents → Reconciler → Layout (Yoga) → ANSIOutput

关键文件:

  • • ink/reconciler.ts – React Reconciler 适配
  • • ink/renderer.ts – Yoga 布局执行
  • • ink/termio/ – ANSI 协议解析

7.2 流式 API 处理

// query.ts 中的流式处理
const stream = await api.messages.create({
model: config.model,
messages: conversationHistory,
streamtrue,
max_tokens: config.maxTokens,
})

forawait (const event of stream) {
if (event.type === 'content_block_delta') {
// 处理增量输出
  } elseif (event.type === 'message_delta') {
// 处理 tool_calls
  }
}

7.3 权限系统

// PermissionMode 类型
typePermissionMode =
  | 'default'// 每次询问
  | 'plan'// 计划模式跳过
  | 'bypassPermissions'// 跳过所有
  | 'auto'// 基于 AI 分类自动决定

// 检查流程
tool.checkPermissions(input)
  → PermissionContext.evaluate()
  → allow | deny | prompt

7.4 上下文压缩

// src/services/compact/
compact.ts// 主压缩逻辑
autoCompact.ts// 自动触发
timeBasedMCConfig.ts// 基于时间的配置
microCompact.ts// 微压缩

8. 安全与权限

8.1 权限模型

权限模式
行为
default
每个工具调用都询问用户
plan
在 plan 模式下跳过工具询问
bypassPermissions
跳过所有权限检查
auto
基于 AI 自动分类决定

8.2 安全措施

  • • 输入验证: Zod schema 验证所有工具输入
  • • 权限回调bridgePermissionCallbacks.ts
  • • 敏感操作isDestructive() 标记危险工具
  • • Keychain: API key 存储在系统 Keychain

8.3 OAuth 流程

用户授权 → OAuth 服务器 → Authorization Code → Token 交换 → Keychain 存储

9. 性能优化

9.1 启动优化

  1. 1. 并行预取: MDM + Keychain 并行读取
  2. 2. 懒加载: Heavy 模块 (OpenTelemetry, gRPC) 延迟 import
  3. 3. 缓存: Feature flag 缓存, 工具缓存

9.2 运行时优化

  1. 1. 工具并发: 只读工具最多 10 个并发
  2. 2. Memoization: Selector 模式避免不必要渲染
  3. 3. 流式处理: 增量渲染而非等待完整响应

9.3 内存优化

  1. 1. 上下文压缩: 自动压缩对话历史
  2. 2. Session Memory: 自动提取记忆
  3. 3. 文件历史: 限制文件追踪数量

附录: 目录结构

src/
├── main.tsx                 # CLI 入口 (~4,683 行)
├── entrypoints/             # 初始化逻辑
│   └── cli.tsx              # 快速路径路由
├── commands.ts              # 命令注册表 (~754 行)
├── tools.ts                 # 工具组装 (~389 行)
├── Tool.ts                  # 工具接口 (~792 行)
├── query.ts                  # 查询循环 (~1,729 行)
├── QueryEngine.ts           # 查询引擎 (~1,295 行)
├── context.ts               # 上下文构建
├── cost-tracker.ts          # Token 成本追踪

├── commands/                # Slash 命令实现 (~50)
├── tools/                   # 工具实现 (~45)
├── components/              # UI 组件 (~146)
│   ├── design-system/       # 设计系统
│   ├── messages/            # 消息渲染
│   ├── permissions/         # 权限对话框
│   └── PromptInput/         # 输入处理

├── screens/                 # 全屏 UI
│   ├── REPL.tsx             # 主 REPL
│   ├── Doctor.tsx           # 诊断界面
│   └── Resume.tsx           # 恢复界面

├── services/                # 服务层
│   ├── api/                 # Anthropic API
│   ├── mcp/                 # MCP 协议
│   ├── lsp/                 # LSP 协议
│   ├── analytics/           # 分析和 Feature Flags
│   ├── compact/             # 上下文压缩
│   ├── plugins/             # 插件系统
│   └── oauth/               # OAuth 认证

├── state/                   # 状态管理
│   ├── AppStateStore.ts     # App 状态
│   ├── store.ts             # Store 工厂
│   └── selectors.ts         # 状态选择器

├── ink/                     # Ink 渲染引擎
│   ├── reconciler.ts        # React Reconciler
│   ├── renderer.ts          # Yoga 布局
│   ├── termio/              # 终端协议
│   ├── events/              # 事件系统
│   └── hooks/               # 自定义 hooks

├── bridge/                  # IDE 桥接
│   ├── bridgeMain.ts        # 桥接主循环
│   ├── bridgeMessaging.ts   # 消息协议
│   └── replBridge.ts        # REPL 桥接

├── coordinator/             # 多 Agent 协调
├── plugins/                 # 插件系统
├── skills/                  # Skill 系统
├── vim/                     # Vim 模式
├── voice/                   # 语音输入
├── remote/                  # 远程会话
├── server/                  # 服务器模式
├── memdir/                  # 持久内存
├── tasks/                   # 任务管理
├── migrations/              # 配置迁移
├── schemas/                 # Zod schemas
├── types/                   # TypeScript 类型
├── utils/                   # 工具函数
└── upstreamproxy/           # 代理配置

分析基于: Claude Code 公开源码快照 (2026-03-31)