乐于分享
好东西不私藏

Claude Code源码泄漏,深度架构分析

本文最后更新于2026-03-31,某些文章具有时效性,若有错误或已失效,请在下方留言或联系老夜

Claude Code源码泄漏,深度架构分析

字数 5970,阅读大约需 30 分钟


1. 项目概览

Claude Code 是 Anthropic 推出的 命令行 AI 编程助手,允许开发者直接在终端中将编码任务委托给 Claude 模型。它是一个功能极其丰富的系统,涵盖了交互式 REPL、多 Agent 编排、远程执行、MCP(Model Context Protocol)集成、插件/技能扩展、权限管控等多个维度。

技术栈概要:

  • • 语言:TypeScript(TSX)
  • • 运行时:Bun / Node.js(≥18)
  • • UI 框架:React + 自定义 Ink 终端渲染引擎
  • • 构建系统:Bun bundler(支持编译期 feature gate 死代码消除)
  • • API 集成:Anthropic Claude API(支持 Bedrock / Vertex 等多平台)
  • • 协议:MCP(Model Context Protocol)、WebSocket、Unix Domain Socket

代码规模:

  • • TypeScript/TSX 源文件:~1,884 个
  • • 总代码行数:~102,250 行(不含依赖)
  • • 最大单文件:main.tsx(803KB / 4,683 行)
  • • 核心目录:约 60 个顶层模块

2. 顶层目录结构

claude-code/
├── main.tsx                 # 主编排入口(803KB),启动、配置加载、命令/工具注册
├── setup.ts                 # REPL 启动前初始化(权限、worktree、插件预加载)
├── context.ts               # 系统/用户上下文管理(git 状态、claude.md 发现)
├── commands.ts              # 命令注册中心(70+ 内建命令 + 技能 + 插件命令)
├── tools.ts                 # 工具注册中心(50+ 内建工具 + MCP 动态工具)
├── query.ts                 # 核心查询循环(async generator,流式响应)
├── QueryEngine.ts           # 查询引擎高层编排类
├── Tool.ts                  # 工具基础抽象(接口、权限、渲染)
├── Task.ts                  # 后台任务状态与生命周期管理
├── ink.ts                   # Ink 终端渲染封装与主题系统
├── history.ts               # 会话历史与粘贴内容管理
├── cost-tracker.ts          # 会话成本与用量追踪
├── replLauncher.tsx         # REPL 启动器
├── dialogLaunchers.tsx      # 对话框启动器集合
├── interactiveHelpers.tsx   # 交互式 UI 辅助工具

├── entrypoints/             # 程序入口点
│   ├── cli.tsx              # CLI 引导(快速路径优化、feature flag 门控)
│   ├── init.ts              # 会话初始化(配置校验、遥测、安全检查)
│   └── mcp.ts               # MCP 服务器入口

├── cli/                     # CLI 基础设施(结构化 I/O、NDJSON、远程传输)
├── tools/                   # 45+ 工具实现(每个工具一个目录)
├── commands/                # 100+ 命令实现
├── components/              # 146 个 React 终端 UI 组件
├── hooks/                   # 87 个 React Hook(输入、权限、导航、集成)
├── services/                # 38 个服务模块(API、MCP、分析、LSP 等)
├── utils/                   # 329 个工具函数(消息、存储、认证、git 等)
├── state/                   # 集中式状态管理(不可变 Store 模式)
├── bridge/                  # Claude Code Remote (CCR) 桥接层
├── remote/                  # 远程会话管理(SDK 集成)
├── constants/               # 常量定义(API 限制、beta 头、系统提示)
├── types/                   # 核心类型定义(命令、权限、Hook、插件)
├── plugins/                 # 插件系统
├── skills/                  # 技能系统(18 个内建技能)
├── memdir/                  # 记忆系统(auto-memory、团队记忆)
├── coordinator/             # 多 Agent 协调器模式
├── keybindings/             # 键绑定系统(72 个动作、18 个上下文)
├── migrations/              # 数据迁移(模型版本、设置迁移)
├── screens/                 # 全屏 UI(REPL、Doctor、ResumeConversation)
├── server/                  # DirectConnect WebSocket 服务端
├── query/                   # 查询子模块(配置、依赖注入、token 预算)
├── context/                 # 上下文子模块
├── ink/                     # 自定义 Ink 渲染器(非标准 Ink 库)
├── vim/                     # Vim 模式支持
├── voice/                   # 语音输入/输出
├── buddy/                   # Buddy 功能
├── schemas/                 # JSON Schema 定义
├── tasks/                   # 任务管理子系统
└── public/                  # 公共静态资源

3. 核心架构:启动流程

整个应用的启动链路如下:

cli.tsx (入口)
  │  快速路径检测:--version / --dump-system-prompt / --claude-in-chrome-mcp 等
  │  动态导入,最小化模块评估时间
  ↓
init.ts (会话初始化)
  │  配置校验、OpenTelemetry 遥测、安全检查(root/sandbox 验证)
  │  环境变量安全设置
  ↓
main.tsx (主编排)
  │  ┌─ profileCheckpoint()            ─┐
  │  │  startMdmRawRead()       (MDM)   │ 并行启动优化
  │  └─ startKeychainPrefetch() (钥匙链)─┘
  │
  │  ┌─ GrowthBook feature flags 加载
  │  │  getSystemContext() ← git 状态
  │  │  getUserContext()  ← claude.md 发现
  │  │  getCommands()     ← 注册 70+ 命令
  │  │  getTools()        ← 注册 50+ 工具
  │  └─ MCP 工具发现与注册
  ↓
setup.ts (REPL 前准备)
  │  Node 版本检查 → 会话管理 → UDS 消息服务
  │  终端恢复 → Worktree 处理 → Tmux 会话
  │  后台任务:插件加载、Hook 预取、MCP 资源
  │  权限验证 → 发行说明 → 最近活动
  ↓
replLauncher.tsx (REPL 启动)
  │  动态导入 App + REPL 组件
  │  包裹 ThemeProvider → Ink root render
  ↓
REPL.tsx (交互循环)
  └── 用户输入 → Query → API 调用 → 工具执行 → 响应渲染 → 等待输入...

关键设计决策:

  • • 并行预取:命令、插件、Hook、MCP 资源在启动时并发加载
  • • 懒加载:通过动态 import() 延迟加载重型模块(OpenTelemetry、插件等)
  • • Feature Gate:Bun bundler 的 feature() 函数实现编译期死代码消除

4. 查询系统(Query System)— 核心引擎

查询系统是 Claude Code 的心脏,负责编排用户输入到 API 调用再到工具执行的完整循环。

4.1 Async Generator 流式架构

// query.ts — 核心查询循环
export
 async function* query(params: QueryParams):
  AsyncGenerator
<StreamEvent | Message | ToolUseSummaryMessage, Terminal>

采用 异步生成器 模式实现流式响应:

用户输入
  ↓
queryEngine.ask()
  ↓
query() async generator 主循环:
  ┌─────────────────────────────────────────────────────────┐
  │ 1. 消息预处理                                           │
  │    snipCompact → microCompact → contextCollapse → auto  │
  │                                                         │
  │ 2. API 调用                                             │
  │    queryModelWithStreaming()                             │
  │                                                         │
  │ 3. 流式响应渲染                                          │
  │    yield StreamEvent → UI 实时更新                       │
  │                                                         │
  │ 4. 工具使用检测                                          │
  │    检测 tool_use content blocks                          │
  │                                                         │
  │ 5. 权限检查                                             │
  │    useCanUseTool → allow / deny / ask                   │
  │                                                         │
  │ 6. 工具执行                                             │
  │    toolOrchestration.runTools()                         │
  │                                                         │
  │ 7. 结果处理                                             │
  │    generateToolUseSummary()                             │
  │                                                         │
  │ 8. Stop Hook 执行                                       │
  │    任务完成检测、模板分类                                  │
  │                                                         │
  │ 9. yield Messages → 下一轮迭代或终止                     │
  └─────────────────────────────────────────────────────────┘

4.2 消息压缩管线

为在有限的上下文窗口中维持长对话,系统实现了四级链式压缩:

  1. 1. Snip Compact — 删除旧消息,保留近期上下文
  2. 2. Micro Compact — 缓存重复工具调用的摘要
  3. 3. Context Collapse — 用语义摘要归档旧对话段
  4. 4. Auto Compact — 当前三级仍然不够时,触发完整会话总结

4.3 依赖注入

interface QueryDeps {
  queryModel
: () => Promise<...>      // 可注入 mock
  compact
: () => Promise<...>         // 会话压缩
  // ...其他依赖

}

通过 QueryDeps 接口实现依赖注入,productionDeps() 工厂提供生产环境实现,测试时可替换为 mock。

4.4 Token 预算管理

query/tokenBudget.ts 负责追踪长时间运行查询的 token 消耗,在超出阈值时触发压缩策略。


5. 工具系统(Tool System)

5.1 工具抽象层(Tool.ts — 793 行)

所有工具遵循统一的 Tool 接口:

interface Tool {
  // 核心属性

  name
: string
  inputSchema
: ZodSchema          // Zod 验证
  outputSchema
: ZodSchema

  // 执行

  call
(args, context, progress): Promise<Result>

  // 权限与安全

  validateInput
(): ValidationResult
  checkPermissions
(): PermissionResult    // allow / deny / ask / passthrough
  getPath
(): string                       // 提取文件路径用于权限匹配
  isDestructive
(): boolean
  isReadOnly
(): boolean

  // 并发与中断

  isConcurrencySafe
(): boolean
  interruptBehavior
(): 'cancel' | 'block'

  // UI 渲染(5 种状态)

  renderToolUseMessage
()          // 执行发起
  renderToolUseProgressMessage
()  // 进行中进度
  renderToolResultMessage
()       // 最终结果
  renderToolUseRejectedMessage
()  // 权限拒绝
  renderToolUseErrorMessage
()     // 错误
  renderGroupedToolUse
()          // 并行分组显示

  // 搜索与分类

  isSearchOrReadCommand
(): boolean
  isOpenWorld
(): boolean
  shouldDefer
: boolean            // 延迟加载标志
  searchHint
: string              // ToolSearch 匹配关键词
}

buildTool() 工厂函数:包裹部分 ToolDef 并填充智能默认值(fail-closed 策略:默认不并发安全、默认需要权限检查)。

5.2 工具分类(45+ 工具)

分类
工具
说明
执行
BashTool, PowerShellTool, REPLTool
Shell / PS / Node REPL 执行
文件操作
FileReadTool, FileEditTool, FileWriteTool, NotebookEditTool
读/写/编辑/Jupyter
搜索发现
GlobTool, GrepTool, WebSearchTool, ToolSearchTool
文件模式匹配、内容搜索、Web 搜索
网络
WebFetchTool
URL 内容抓取
Agent 编排
AgentTool, TeamCreateTool, TeamDeleteTool, SendMessageTool
子 Agent 派生、团队管理
规划
EnterPlanModeTool, ExitPlanModeTool, VerifyPlanExecutionTool
计划模式
任务管理
TaskCreateTool, TaskGetTool, TaskUpdateTool, TaskListTool, TaskOutputTool, TaskStopTool
后台任务 CRUD
MCP
MCPTool, ListMcpResourcesTool, ReadMcpResourceTool, McpAuthTool
MCP 协议工具
技能
SkillTool
技能执行器
实用
AskUserQuestionTool, TodoWriteTool, SleepTool, ScheduleCronTool, BriefTool, ConfigTool, RemoteTriggerTool
用户交互、配置等
worktree
EnterWorktreeTool, ExitWorktreeTool
Git worktree 隔离
LSP
LSPTool
Language Server Protocol 集成

5.3 工具注册与过滤

getAllBaseTools()         →  全部可用工具列表(含 feature gate)
    ↓ 过滤层
filterToolsByDenyRules() →  权限 deny 规则过滤
    ↓
模式过滤               →  SIMPLE 模式仅 Bash/Read/Edit
    ↓
REPL 模式过滤          →  隐藏被 REPL 包裹的原始工具
    ↓
isEnabled() 检查        →  运行时权限检查
    ↓
assembleToolPool()      →  合并内建 + MCP 工具,去重,排序(prompt cache 稳定性)

5.4 BashTool — 最复杂的工具

BashTool 拥有 20+ 支撑文件,体现了系统对安全性的极致重视:

  • • bashPermissions.ts — 通配符规则匹配(如 "Bash(git *)" )
  • • bashSecurity.ts — 命令 AST 解析进行语义安全分析
  • • readOnlyValidation.ts — 只读约束检测
  • • sedEditParser.ts — sed 编辑命令解析
  • • shouldUseSandbox.ts — 沙箱必要性判定
  • • destructiveCommandWarning.ts — 破坏性命令警告(rm、mv 等)
  • • commandSemantics.ts — 命令语义解释
  • • pathValidation.ts — 路径安全检查

命令分类系统:自动检测命令是搜索类(grep/find/rg)、只读类(cat/head/wc)还是列表类(ls/tree),支持管道中每段独立判定。

5.5 延迟加载机制(Tool Deferral)

工具定义 shouldDefer=true
  ↓
首次加载时仅发送 name + searchHint(不含完整 schema)
  ↓
模型通过 ToolSearchTool 按关键词搜索
  ↓
匹配后返回完整 JSONSchema,工具变为可调用

这一机制显著减少了初始 system prompt 的 token 消耗。


6. 权限系统(Permission System)

6.1 权限模式

系统支持 6 种权限模式

模式
说明
default
标准交互模式,敏感操作需用户确认
acceptEdits
自动接受文件编辑
plan
仅规划模式,不执行
bypassPermissions
跳过所有权限检查(需验证安全环境)
dontAsk
拒绝所有需要权限的操作
auto
自动模式(feature-gated,使用分类器判断)

6.2 规则系统

interface ToolPermissionContext {
  mode
: PermissionMode
  additionalWorkingDirectories
: Map<string, string>
  alwaysAllowRules
: ToolPermissionRulesBySource   // 始终允许
  alwaysDenyRules
: ToolPermissionRulesBySource     // 始终拒绝
  alwaysAskRules
: ToolPermissionRulesBySource      // 始终询问
}

规则来源(按优先级):policySettings > cliArg > userSettings > projectSettings > localSettings > flagSettings > command > session

6.3 权限检查流程

工具执行请求
  ↓
validateInput()           →  输入校验(在权限提示前,快速失败)
  ↓
checkPermissions()        →  返回 PermissionResult
  ├── allow               →  直接执行
  ├── deny                →  拒绝并记录
  ├── passthrough          →  交给上层判断
  └── prompt              →  向用户展示权限请求
       ↓
useCanUseTool Hook
  ├── 规则匹配(通配符模式)
  ├── Auto-mode 分类器(如启用)
  ├── 权限请求队列(批量处理)
  └── 用户交互决定

7. 状态管理(State Management)

7.1 Store 实现

采用自研的极简不可变 Store 模式(类似 Zustand):

type Store<T> = {
  getState
: () => T
  setState
: (updater: (prev: T) => T) => void
  subscribe
: (listener: Listener) => () => void
}

无外部依赖,仅 35 行代码。通过 onChange 回调和 subscribe 监听器实现变更通知。

7.2 AppState 结构

AppState 是全局不可变状态树,核心字段包括:

AppState
├── Settings                    # 用户配置
├── Model Selection             # mainLoopModel, mainLoopModelForSession
├── UI State                    # verbose, briefOnly, expandedView, statusLineText
├── Tool Permission Context     # 权限规则、模式、工作目录
├── Tools                       # 当前可用工具列表
├── Messages                    # 完整对话历史
├── MCP                         # 连接、资源、工具
├── Tasks                       # Map<string, TaskState> 后台任务
├── Plugins                     # 已加载插件、错误、禁用列表
├── Speculation                 # 推测执行状态
├── Session Hooks               # 会话钩子
├── Attributions                # Git 归因追踪
├── File History                # 文件修改历史
├── Notifications               # 通知队列
├── Todo                        # 待办事项列表
├── Agent Swarms (可选)         # 多 Agent 集群状态
└── Remote Managed Settings     # 远端管控设置

7.3 React 集成

// AppState.tsx
<AppStateProvider>
  {children}                    // 通过 React Context 提供状态
</AppStateProvider>

// 使用

const
 value = useAppState(selector)    // 基于 Object.is 比较的选择器订阅

8. UI 渲染系统

8.1 自定义 Ink 引擎

Claude Code 并未使用标准 Ink 库,而是维护了一个 自定义的终端 React 渲染器/ink/ 目录),基于 Yoga 布局引擎,支持:

  • • 复杂的 Flexbox 终端布局
  • • 焦点管理与选择
  • • 动画帧(useAnimationFrame)
  • • 终端焦点检测
  • • Tab 状态追踪
  • • 虚拟滚动

8.2 主题系统

<ThemeProvider>
<App>
    ...                         // 所有组件通过 useTheme() 获取主题
  </App>

</ThemeProvider>

8.3 核心 UI 组件

组件
说明
REPL.tsx

 (895KB)
主交互界面,最大的单组件
FullscreenLayout.tsx
主布局框架,含滚动区域
VirtualMessageList.tsx
虚拟化消息列表,支持搜索索引和跳转
Messages.tsx
消息列表容器,过滤与选择
Message.tsx
单条消息渲染,内联/详细模式切换
AgentProgressLine.tsx
Agent 工具执行实时进度可视化
LogSelector.tsx
会话历史浏览器(树状分组、模糊搜索)
BridgeDialog.tsx
CCR 桥接连接 UI(含 QR 码)
ConsoleOAuthFlow.tsx
终端内 OAuth 流程
Stats.tsx
Token 用量、成本、时间分析仪表板
CoordinatorAgentStatus.tsx
多 Agent 集群状态显示
BaseTextInput.tsx
底层文本输入(多行、掩码、历史)

8.4 键绑定系统

  • • 72 个可绑定动作,分布在 18 个上下文(Global、Chat、Autocomplete、Confirmation 等)
  • • 支持和弦键(chord)、平台特定绑定(Windows/macOS/Linux)
  • • 用户可自定义覆盖
  • • Vim 模式完整支持

9. 服务层(Services)

38 个服务模块组成了系统的后端基础设施:

9.1 API 服务

services/api/
├── claude.ts       # 主 API 交互:流式调用、消息规范化、token 计数
├── client.ts       # Anthropic SDK 客户端管理
├── bootstrap.ts    # API 初始化
├── withRetry.ts    # 重试逻辑
└── errors.ts       # 错误分类(可重试 vs 致命)

9.2 MCP 服务(Model Context Protocol)

services/mcp/
├── types.ts                  # MCP 服务器配置类型(stdio/sse/http/ws/sdk 传输)
├── MCPConnectionManager.tsx  # 连接生命周期管理
├── client.ts                 # MCP 客户端封装
├── InProcessTransport.ts     # 进程内传输(测试用)
├── SdkControlTransport.ts    # SDK 传输
├── auth.ts                   # MCP 认证(含 OAuth、XAA)
├── channelPermissions.ts     # MCP 通道权限回调
├── elicitationHandler.ts     # 处理 MCP 服务器的 elicitation 请求
└── vscodeSdkMcp.ts           # VSCode SDK MCP 集成

9.3 其他关键服务

服务
说明
analytics/
事件日志(无依赖队列模式)+ GrowthBook feature flag
lsp/
Language Server Protocol 管理与诊断缓存
tools/
工具执行编排、流式执行、Hook 执行
SessionMemory/
会话记忆管理
teamMemorySync/
团队记忆同步
compact/
会话压缩
AgentSummary/
Agent 执行摘要(效率优化)
plugins/
插件管理
extractMemories/
从上下文提取记忆
oauth/
OAuth 流程处理
policyLimits/
策略限制执行
voice.ts
语音输入/输出
vcr.ts
请求录制/回放(测试用)
tokenEstimation.ts
Token 计数估算
notifier.ts
通知服务

10. 桥接与远程系统

10.1 Bridge — Claude Code Remote (CCR)

Bridge 层实现了 CLI 与云端环境(claude.ai、Web UI)的分布式执行桥接:

REPL 会话
  ↓
useReplBridge Hook(自动启动)
  ↓
initReplBridge → bridgeApi.createSession()
  ↓
replBridge.initBridgeCore() → WebSocket 连接
  ↓
消息轮询循环 ← 转发 REPL 消息 → 发送 Bridge 消息
  ↓
权限请求 → 队列 → UI → 用户决定
  ↓
工具执行结果 → 路由回 Bridge

核心文件(33 个,~500K 行):

  • • bridgeMain.ts — 多会话编排、连接生命周期、消息路由
  • • replBridge.ts — REPL 特定桥接(入站队列、权限转发)
  • • bridgeApi.ts — HTTP 客户端(OAuth + JWT + 设备信任)
  • • remoteBridgeCore.ts — WebSocket 管理、重连退避、心跳
  • • bridgeMessaging.ts — 消息协议序列化/反序列化

10.2 Remote Session

remote/
├── RemoteSessionManager.ts     # 远程会话生命周期管理
├── SessionsWebSocket.ts        # WebSocket 客户端(OAuth 认证、自动重连)
├── remotePermissionBridge.ts   # 权限路由(SDK ↔ 远程会话)
└── sdkMessageAdapter.ts        # SDK 消息格式适配

11. 扩展系统

11.1 插件系统

interface BuiltinPluginDefinition {
  name
: string
  description
: string
  version
: string
  defaultEnabled
?: boolean
  isAvailable
?: () => boolean         // 平台特定可用性
  skills
?: BundledSkillDefinition[]   // 技能列表
  hooks
?: HooksSettings               // Hook 配置
  mcpServers
?: MCPServerDefinition[]  // MCP 服务器定义
}

特点:

  • • 通过 @builtin 市场标识注册
  • • 用户可通过 /plugin 命令启用/禁用
  • • 支持技能、Hook、MCP 服务器三种扩展方式
  • • 设置持久化到用户配置

11.2 技能系统

interface BundledSkillDefinition {
  name
: string
  description
: string
  getPromptForCommand
(args, context): Promise<ContentBlockParam[]>  // 技能即提示词
  allowedTools
?: string[]        // 工具白名单
  whenToUse
?: string             // 使用指南
  model
?: string                 // 覆盖模型
  context
?: 'inline' | 'fork'   // 执行上下文
  files
?: Record<string, string> // 绑定参考文件
  hooks
?: HooksSettings          // 启用特定 Hook
}

18 个内建技能包括:remember(记忆管理)、debug(调试)、loop(循环)、scheduleRemoteAgents(远程 Agent 调度)等。

核心理念:技能是提示词,不是代码。首次调用时触发文件提取(memoized),目录前缀注入 prompt。

11.3 命令系统

命令按优先级加载:

  1. 1. 内建命令(70+ 静态导入)
  2. 2. 绑定技能(同步注册)
  3. 3. 内建插件技能
  4. 4. 技能目录命令
  5. 5. 工作流命令(feature-gated)
  6. 6. 插件命令

命令类型prompt(模型可调用技能)、local(CLI-only)、local-jsx(Ink UI 命令)


12. 记忆系统(Memory System)

memdir/
├── memdir.ts              # 核心操作(MEMORY.md 入口,200 行 / 25KB 上限)
├── memoryTypes.ts         # 四种记忆类型:user / feedback / project / reference
├── findRelevantMemories.ts # 记忆检索
├── memoryScan.ts          # 记忆文件扫描
├── memoryAge.ts           # 时间戳追踪
├── paths.ts               # 记忆目录路径
├── teamMemPaths.ts        # 团队记忆路径
└── teamMemPrompts.ts      # 团队记忆提示构建

记忆类型:

类型
用途
user
用户角色、目标、偏好、知识水平
feedback
用户给出的工作方式指导(纠正 + 确认)
project
进行中的工作、目标、截止日期、决策
reference
外部系统中的信息位置指针

MEMORY.md 作为索引文件,每条记忆指向独立的 .md 文件,支持团队共享模式。


13. 多 Agent 编排

13.1 Agent 工具

AgentTool 支持多种 Agent 派生模式:

  • • 本地 Agent(LocalAgentTask)— 同进程子 Agent
  • • 远程 Agent(RemoteAgentTask)— CCR 环境隔离执行
  • • 进程内队友(InProcessTeammate)— 共享上下文
  • • Fork Agent — Git worktree 隔离
  • • 多 Agent 集群(Agent Swarms)— feature-gated

13.2 协调器模式(Coordinator Mode)

coordinator/coordinatorMode.ts
├── isCoordinatorMode()            # 检测协调器/工作者模式
├── matchSessionMode()             # 恢复时确保模式一致
├── getCoordinatorUserContext()     # 为派生工作者构建上下文
└── 工具白名单管理                   # 基于会话类型限制可用工具

13.3 任务系统

type TaskType = 'local_bash' | 'local_agent' | 'remote_agent' |
                'in_process_teammate'
 | 'local_workflow' | 'monitor_mcp' | 'dream'

type
 TaskStatus = 'pending' | 'running' | 'completed' | 'failed' | 'killed'

任务 ID 生成:类型前缀(b/a/r/t/w/m/d)+ 8 位随机字符(36^8 ≈ 2.8 万亿组合)。输出持久化到磁盘文件。


14. Hook 系统

87 个 React Hook 构成了 UI 逻辑的核心:

14.1 输入与通信

Hook
说明
useTextInput
多行编辑器,支持 yank ring、kill ring、历史、Vim 绑定、图片粘贴
useTypeahead
自动补全(文件路径、命令、历史)
useCommandKeybindings
斜杠命令(/)处理
useReplBridge
始终在线的 Bridge 连接(消息同步)

14.2 权限与安全

useCanUseTool(~40K 行)是最大的 Hook,负责:权限决策路由、分类器审批追踪、权限上下文管理、工具权限队列与批处理。

14.3 导航与历史

Hook
说明
useArrowKeyHistory
双向会话历史导航
useHistorySearch
会话文本搜索(含深度 Agent 搜索)
useVirtualScroll
大消息列表高效渲染

14.4 集成

Hook
说明
useIDEIntegration
VSCode/IDE diff、LSP、文件编辑、worktree 同步
useVoice
语音输入/输出集成
useInboxPoller
通知收件箱轮询
useSwarmPermissionPoller
集群权限请求轮询

15. 成本与遥测

15.1 成本追踪

// cost-tracker.ts 提供的追踪维度
getTotalCost
()                          // 总费用(USD)
getTotalDuration
()                      // 总耗时
getTotalAPIDuration
()                   // API 调用耗时
getTotalInputTokens
()                   // 输入 token
getTotalOutputTokens
()                  // 输出 token
getTotalCacheReadInputTokens
()          // 缓存读取 token
getTotalCacheCreationInputTokens
()      // 缓存创建 token
getTotalWebSearchRequests
()             // Web 搜索次数
getTotalLinesAdded
() / Removed()        // 代码行变更

支持按模型分别追踪,会话恢复时可恢复成本状态。

15.2 分析系统

  • • Analytics — 无依赖队列模式,init 时挂接发送器
  • • GrowthBook — Feature flag 评估(缓存、懒评估)
  • • OpenTelemetry — 遥测追踪(延迟加载)
  • • Metadata 清洗 — 不收集代码内容或文件路径

16. 数据迁移

/migrations/ 目录包含 12 个幂等迁移脚本,处理:

  • • 模型版本升级(Sonnet 4.5 → Sonnet 4.6, Opus → Opus 1M)
  • • MCP 服务器配置迁移
  • • 自动更新偏好迁移
  • • 远程控制设置迁移
  • • Auto-mode opt-in 重置

每个迁移均记录分析日志,支持安全的增量升级。


17. 关键架构模式总结

17.1 编译期 Feature Gate

import { feature } from "bun:bundle"

if
 (feature("COORDINATOR_MODE")) {
  // 编译时决定是否包含此代码块

  // 未启用时整个分支被死代码消除

}

17.2 懒加载 Schema

const schema = lazySchema(() => z.object({...}))
// 延迟 Zod schema 创建,避免循环依赖

17.3 Memoization 策略

大量使用 lodash memoize 缓存昂贵操作(命令加载、工具列表、git 状态等),按 cwd/context 键缓存,支持手动清除。

17.4 流式 + 进度回调

tool.call(args, context, onProgress)
// onProgress 回调支持实时 UI 更新

// 类型安全的进度类型:BashProgress, AgentToolProgress 等

17.5 渲染与逻辑分离

每个工具定义 5 种渲染方法,严格分离执行逻辑和 UI 展示。支持 condensed 样式、verbose 模式、transcript 模式。

17.6 安全优先

  • • 权限系统多层过滤(deny 规则 → 模式过滤 → 运行时检查)
  • • Bash 命令 AST 级别安全分析
  • • 破坏性操作显式警告
  • • 沙箱执行支持
  • • 文件路径安全验证
  • • 设备文件阻止(防止 /dev/zero 等导致挂起)

17.7 优雅降级

技能/插件加载失败不会崩溃主进程,返回空数组。API 错误支持分类重试(可重试 vs 致命)。


18. 系统数据流全景图

┌───────────────────────────────────────────────────────────────────┐
│                        用户终端界面                                │
│  ┌─────────────┐  ┌───────────┐  ┌──────────┐  ┌──────────────┐ │
│  │ useTextInput│  │ useTypeahead│ │ Vim Mode │  │ useVoice     │ │
│  └──────┬──────┘  └─────┬─────┘  └────┬─────┘  └──────┬───────┘ │
│         └───────────────┼──────────────┼───────────────┘         │
│                         ↓                                         │
│  ┌────────────────────────────────────────────────────────────┐  │
│  │                   REPL.tsx (主交互循环)                      │  │
│  └──────────────────────────┬─────────────────────────────────┘  │
└─────────────────────────────┼─────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────┐
│                      查询引擎 (QueryEngine)                      │
│  ┌──────────────────────────────────────────────────────┐       │
│  │ query() Async Generator 主循环                        │       │
│  │  ┌─ 消息压缩管线 ──────────────────────────────────┐  │       │
│  │  │ Snip → Micro → ContextCollapse → AutoCompact    │  │       │
│  │  └─────────────────────────────────────────────────┘  │       │
│  │  ┌─ API 调用 ─────────────────────────────────────┐   │       │
│  │  │ queryModelWithStreaming() → Anthropic API       │   │       │
│  │  └─────────────────────────────────────────────────┘   │       │
│  │  ┌─ 工具执行 ─────────────────────────────────────┐   │       │
│  │  │ 权限检查 → toolOrchestration.runTools()        │   │       │
│  │  └─────────────────────────────────────────────────┘   │       │
│  │  ┌─ Stop Hooks ───────────────────────────────────┐   │       │
│  │  │ 任务完成检测 / 模板分类                          │   │       │
│  │  └─────────────────────────────────────────────────┘   │       │
│  └──────────────────────────────────────────────────────┘       │
└─────────────────────┬───────────────────────┬───────────────────┘
                      ↓                       ↓
    ┌─────────────────────┐     ┌──────────────────────────────┐
    │   工具系统 (45+)      │     │     服务层 (38 模块)          │
    │  ┌───────────────┐   │     │  ┌────────────────────────┐ │
    │  │ BashTool       │   │     │  │ API Service            │ │
    │  │ FileRead/Edit  │   │     │  │ MCP Service            │ │
    │  │ AgentTool      │   │     │  │ Analytics / Telemetry  │ │
    │  │ WebSearch/Fetch│   │     │  │ LSP Service            │ │
    │  │ MCPTool        │   │     │  │ Session Memory         │ │
    │  │ SkillTool      │   │     │  │ Plugin Manager         │ │
    │  │ Task*Tool      │   │     │  │ Cost Tracker           │ │
    │  │ ...            │   │     │  │ Token Estimation       │ │
    │  └───────────────┘   │     │  └────────────────────────┘ │
    └─────────────────────┘     └──────────────────────────────┘
                      ↓                       ↓
    ┌─────────────────────────────────────────────────────────┐
    │                   扩展层                                  │
    │  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌────────┐  │
    │  │  Plugins  │  │  Skills  │  │   MCP    │  │  Hooks │  │
    │  │  (市场)   │  │  (技能)  │  │ (服务器)  │  │ (事件) │  │
    │  └──────────┘  └──────────┘  └──────────┘  └────────┘  │
    └─────────────────────────────────────────────────────────┘
                              ↓
    ┌─────────────────────────────────────────────────────────┐
    │                   桥接 & 远程层                           │
    │  ┌────────────────┐  ┌──────────────────────────────┐   │
    │  │ Bridge (CCR)    │  │ Remote Session Manager       │   │
    │  │ WebSocket       │  │ SDK Message Adapter          │   │
    │  │ OAuth + JWT     │  │ Permission Routing           │   │
    │  └────────────────┘  └──────────────────────────────┘   │
    └─────────────────────────────────────────────────────────┘

19. 文件规模参考

文件/目录
大小
核心作用
main.tsx
803 KB
主编排入口
REPL.tsx
895 KB
主交互界面
query.ts
69 KB
核心查询循环
QueryEngine.ts
47 KB
查询引擎
interactiveHelpers.tsx
57 KB
UI 交互辅助
commands.ts
25 KB
命令注册
tools.ts
17 KB
工具注册
Tool.ts
30 KB
工具抽象
utils/

 (329 文件)
7.6 MB
工具函数库
components/

 (146 文件)
10 MB
UI 组件库
bridge/

 (33 文件)
532 KB
远程桥接
services/

 (38 目录)
2.1 MB
服务层
hooks/

 (87 文件)
1.5 MB
React Hook
commands/

 (100+ 目录)
3.0 MB
命令实现
tools/

 (45 目录)
3.0 MB
工具实现

本文档基于源码静态分析生成,反映了 Claude Code 截至 2026 年 3 月的架构状态。