整体架构

Claude Code 是一个用 TypeScript 编写、运行在 Bun 上的终端 AI 编程助手。它的架构分为几个清晰的层次。

技术栈概览

语言 & 运行时

TypeScript + Bun (非 Node.js)。ESM 模块系统,TSX 配合 react-jsx transform。

构建输出

代码分割构建 (dist/cli.js + ~450 chunks)。build.ts 执行 Bun.build()。

Monorepo

Bun workspaces,内部包在 packages/ 目录,通过 workspace:* 解析。

运行时 & 构建系统

Claude Code 完全基于 Bun 运行时,而非 Node.js。所有导入、构建和执行都使用 Bun 的原生 API。

# 安装依赖
bun install

# 开发模式 (通过 -d flags 注入 MACRO defines)
bun run dev    # 默认启用 BUDDY, TRANSCRIPT_CLASSIFIER, BRIDGE_MODE 等 6 个 feature

# 构建 (代码分割, 输出 dist/cli.js + ~450 chunk files)
bun run build  # build.ts 执行 Bun.build() with splitting: true

# 测试 & Lint
bun test                  # 运行全部 418 个测试文件
bun run lint              # Biome 代码检查

# Pipe 模式
echo "say hello" | bun run src/entrypoints/cli.tsx -p
    
为什么选 Bun? Bun 提供更快的启动时间、原生 TypeScript 支持、内置打包器,以及与 Node.js 兼容的 API。对于一个需要快速启动的 CLI 工具来说,这些都是关键优势。

启动引导流程

从用户执行 claude 命令到进入交互界面,经历以下步骤:

1

cli.tsx — 入口 + 12+ Fast-Paths

main() 函数按优先级处理快速路径:--version(零模块加载)、--claude-in-chrome-mcp--daemon-worker(DAEMON flag)、remote-control/rc/bridge(BRIDGE_MODE flag)、ps/logs/attach/kill(BG_SESSIONS flag)等。只有默认路径才加载完整 CLI。

2

main.tsx — CLI 命令定义 (~4680 行)

Commander.js 注册 51+ 子命令(mcp, server, ssh, open, auth, plugin, agents, auto-mode, doctor, update 等)。主 action handler ~2867 行内联代码。

3

init.ts — 一次性初始化

遥测配置、TLS 证书、信任对话框、配置文件加载。设置优雅关闭处理。

4

REPL.tsx — 交互界面启动

React/Ink 组件挂载。初始化消息历史、工具列表、MCP 连接。进入用户输入循环。

架构分层

表现层
Ink / React Components
REPL.tsx, Messages.tsx, PromptInput/, permissions/
业务逻辑层
QueryEngine / query()
会话管理, 工具编排, 权限检查, 上下文构建
服务层
API Client / Tool System / MCP
claude.ts, tools/, services/
基础设施层
State / Config / Hooks / Permissions
state/, utils/, bootstrap/

状态管理

Claude Code 使用多层状态管理:

// AppState 核心字段
interface AppState {
  messages: Message[]           // 对话消息列表
  tools: Tool[]                 // 可用工具列表
  permissionContext: PermCtx    // 权限配置
  mcpClients: McpClient[]       // MCP 服务器连接
  apiConfig: ApiConfig          // API 配置 (provider, model)
  sessionId: string            // 会话唯一标识
  // ... 更多字段
}
    

UI 渲染层

Claude Code 的终端 UI 基于 Ink — 一个在终端中渲染 React 组件的框架。

React Compiler — 组件代码中可以看到 const $ = _c(N) 这样的模式,这是 React Compiler 自动优化后的产物。每个组件都经过编译器的 memoization 处理。

Feature Flag 系统 (88+)

通过 import { feature } from 'bun:bundle' 实现编译时功能门控。在 Dev 模式下通过环境变量 FEATURE_<FLAG>=1 启用特定功能。

// 统一从 bun:bundle 导入
import { feature } from 'bun:bundle';

if (feature('BRIDGE_MODE')) {
  // 仅在 FEATURE_BRIDGE_MODE=1 时启用
}

// Dev 默认启用: BUDDY, TRANSCRIPT_CLASSIFIER, BRIDGE_MODE,
//               AGENT_TRIGGERS_REMOTE, CHICAGO_MCP, VOICE_MODE
// Build 默认启用: AGENT_TRIGGERS_REMOTE, CHICAGO_MCP, VOICE_MODE
// 手动启用: FEATURE_PROACTIVE=1 bun run dev
    
88+ Feature Flags 覆盖 6 大类:Agent/自动化 (15)、基��设施 (10)、安全/分类 (6)、工具/能力 (10)、UI/体验 (8)、实验性 (10+)。详见 Ch12 内部机制。MACRO 定义集中在 scripts/defines.ts,当前版本 v2.1.888