跳到主要内容

架构总览

Claude Code 是一个基于 TypeScript + Bun 构建的终端 AI 助手,采用 React + Ink 渲染终端 UI,通过 Commander.js 解析 CLI 命令。其整体架构体现了高度模块化和可扩展性。

架构分层

┌─────────────────────────────────────────────────┐
│ 入口层 (Entrypoints) │
│ main.tsx · Commander.js CLI 解析 │
├─────────────────────────────────────────────────┤
│ UI 层 (Ink + React) │
│ 144 组件 · 104 Hooks · 主题系统 · 快捷键 │
├─────────────────────────────────────────────────┤
│ 命令层 (Commands) │
│ 101+ 斜杠命令 · 命令注册表 │
├─────────────────────────────────────────────────┤
│ 工具层 (Tools) │
│ 43+ Agent 工具 · 权限检查 · Schema 校验 │
├─────────────────────────────────────────────────┤
│ 查询引擎 (Query Engine) │
│ QueryEngine.ts · query.ts · LLM API 管道 │
├─────────────────────────────────────────────────┤
│ 服务层 (Services) │
│ API · MCP · LSP · OAuth · 压缩 · 遥测 · 分析 │
├─────────────────────────────────────────────────┤
│ 状态层 (State & Memory) │
│ 会话历史 · 持久记忆 · 任务管理 · 配置迁移 │
├─────────────────────────────────────────────────┤
│ 集成层 (Integrations) │
│ IDE Bridge · MCP Server · Agent 协调器 │
└─────────────────────────────────────────────────┘

核心入口

main.tsx (4,683 行) 是整个应用的入口文件,负责:

  1. CLI 参数解析(Commander.js)
  2. 用户认证与初始化
  3. 配置加载与迁移
  4. 启动 Ink 渲染器
  5. 建立 REPL 循环

查询引擎

查询引擎是 Claude Code 的核心,由两个关键文件组成:

  • QueryEngine.ts (1,295 行) — 封装与 Anthropic API 的通信,管理消息流、工具调用和流式响应
  • query.ts (1,729 行) — 构建完整的查询管道,包括上下文收集、系统提示词组装、工具注入和响应处理

查询流程

用户输入 → 上下文收集 → 系统提示词组装 → 工具列表注入

Anthropic API 调用 → 流式响应处理 → 工具调用执行

工具结果返回 → 循环直到完成 → 渲染最终输出

性能优化

Claude Code 在启动和运行时做了大量性能优化:

并行预取

在模块加载之前,并行预取 MDM 设置和 Keychain 认证信息,减少启动延迟。

懒加载

重型模块(OpenTelemetry、gRPC、分析服务)采用懒加载策略,只在实际需要时才加载。

编译时特性标记

通过 Bun 的 bun:bundle 特性标记进行编译时死代码消除:

// 在构建时被替换为 true/false,实现条件编译
if (PROACTIVE) { /* 主动模式代码 */ }
if (KAIROS) { /* 计时系统代码 */ }
if (BRIDGE_MODE) { /* IDE 桥接代码 */ }
if (VOICE_MODE) { /* 语音模式代码 */ }

状态管理

Claude Code 采用多层状态管理策略:

状态类型存储位置生命周期
会话消息内存单次会话
用户偏好settings.json持久化
项目记忆~/.claude/projects/持久化
任务进度任务系统单次会话
认证令牌macOS Keychain持久化
遥测数据本地文件持久化

设计原则

  1. 工具即能力 — 每个工具都是一个自包含的能力单元,拥有独立的 Schema、权限和执行逻辑
  2. 权限先行 — 所有外部操作都经过权限系统审核
  3. 流式优先 — 从 API 响应到 UI 渲染,全链路流式处理
  4. 可扩展性 — 通过插件、技能、MCP 三套扩展机制支持第三方集成
  5. 优雅降级 — 功能不可用时(如无网络、无认证)提供明确的降级路径