🏗️

系统架构

Claude Code 核心架构的深度剖析 —— 分层设计、消息流、状态管理与性能策略

核心架构

架构概述

分层设计的艺术

Claude Code 是一个基于 React + TypeScript 构建的高度复杂的 CLI 应用程序。它采用了一种独特的架构方案——将 React 组件模型引入终端环境, 通过自定义的 ink 框架将 React 组件树渲染为 ANSI 终端输出。这意味着开发者可以像编写 Web 应用一样编写终端应用, 享受组件化、状态管理和声明式 UI 的所有优势。

整个系统采用经典的分层架构,从底层的基础设施到顶层的用户界面,每一层都有明确的职责边界。 这种设计不仅使得代码易于理解和维护,还允许各层独立演进而不会产生连锁反应。

Claude Code 五层架构

渲染绑定注册通信调用分发注入持久化启动入口初始化上下文扩展更新ink 渲染器UI 组件React Hooks插件系统SkillsMCP 协议QueryEngine工具系统命令分发全局状态Context记忆系统BootstrapCLI 解析main.tsx
L5UI 层

ink 终端渲染、React 组件、Hooks

L4扩展层

插件、Skills、MCP 协议

L3引擎层

查询引擎、工具系统、命令分发

L2状态层

全局状态、Context、记忆系统

L1基础层

Bootstrap、CLI 解析、主入口

消息流

从用户输入到界面更新的完整旅程

Claude Code 的核心是一个精心设计的消息处理管道。当用户在终端中输入一条指令时, 这条消息会经历一系列转换和处理步骤:从原始文本输入到智能上下文增强, 从 API 调用到工具执行,最终回到终端界面的渲染更新。 每一步都经过优化,确保用户体验流畅且响应迅速。

消息处理管道

捕获记录传递读取构建发送stream渲染返回验证批准输出反馈继续用户输入TextInput对话历史QueryEngineGit 状态System PromptClaude API流式响应UI 更新工具调用权限检查工具执行工具结果对话循环
1
用户输入捕获

用户在终端中输入指令,TextInput 组件捕获输入,构建标准化的用户消息对象,并追加到对话历史中。

2
QueryEngine 上下文增强

QueryEngine 对消息进行上下文增强:获取 git 状态、项目信息、已注册工具列表和当前权限,构建完整的系统提示词。

3
API 调用与流式响应

将增强后的消息发送给 Claude API。启用流式响应(stream: true),每个 token 到达时立即更新终端显示,用户可以看到 Claude 的思考过程实时展开。

4
工具调用与权限验证

Claude 分析请求后决定使用工具(如 FileReadTool),系统先进行权限检查,然后执行工具并将结果反馈给 Claude 继续推理。

5
工具结果反馈与对话循环

工具执行完毕后,结果被包装为 tool_result 消息追加到对话历史,然后反馈给 Claude 继续推理。整个循环会持续进行,直到 Claude 给出最终回复。

状态管理

集中式状态与分布式上下文

Claude Code 的状态管理采用了 集中式全局状态 React Context 相结合的混合方案。全局状态由 bootstrap/state.ts 集中管理,包含应用生命周期中的关键数据;而 UI 相关的状态则通过 React Context 在组件树中分发, 确保每个组件都能获取所需的状态而无需层层传递 props。

状态管理架构

派生关联决定驱动控制触发联动初始化创建写入恢复originalCwdprojectRoottotalCostUSDsessionIdisInteractiveclientTypekairosActivenotificationsoverlaypromptisLoadingBootstrapmemdir 持久化

状态流架构

状态在系统中的流向遵循严格的单向数据流原则:

1
启动阶段

Bootstrap 初始化全局状态(originalCwd、sessionId、clientType),这些值一旦设定,在应用生命周期内不可变

2
运行阶段

QueryEngine 读写 totalCostUSD 追踪费用,工具执行结果更新 UI Context,React 组件自动响应状态变化

3
持久化阶段

关键状态通过 memdir(记忆目录)写入磁盘,下次启动时恢复上下文,实现跨会话的连续体验

工具注册与执行

40+ 内置工具的统一管理

Claude Code 的工具系统是其最强大的能力来源。每个工具都实现了一个统一的接口, 确保无论是内置工具(如文件读写、代码搜索)还是外部工具(如 MCP 服务器提供的工具), 都能以相同的方式被注册、发现和调用。这种设计带来了极高的可扩展性。

工具接口与注册架构

标识描述验证实现实现实现注册注册注册查找执行name: stringdescriptioninputSchemaexecute()ReadWriteBashGrep40+ ...工具注册表工具调度器ToolResult

权限检查流程

每个工具调用都会经过多层权限验证,确保用户的安全和隐私不会被侵犯:

1
Feature Flags

检查实验性功能开关,确定工具是否启用

2
Permission Mode

检查当前权限模式(auto/manual/bypass),决定是否自动批准

3
Tool-Specific Check

工具级别的权限检查,如文件路径限制、网络访问控制等

4
User Consent

在 manual 模式下弹出确认对话框,由用户决定是否执行

性能优化策略

毫秒级响应背后的工程实践

Claude Code 在性能优化方面投入了大量工程努力。从启动时的懒加载到运行时的记忆化缓存, 从大数据量的虚拟滚动到后台任务的非阻塞执行,每一个优化都经过精心设计, 确保终端中的交互体验尽可能流畅。

性能优化策略全景图

启动时运行时渲染时策略按需避免缓存加速优化减少不阻塞后台应用入口Lazy Loadingdynamic import条件加载MemoizationReact.memouseMemoVirtual ScrollBackground Tasks流畅体验
Lazy Loading

动态导入重型模块,只在需要时加载

通过 dynamic import 和条件加载,避免在启动时加载不必要的代码。例如协调器模式只在 feature flag 开启时才加载。

Memoization

React.memo + useMemo 广泛使用

对于复杂的 UI 组件和计算密集型操作,使用 React.memo 避免不必要的重渲染,useMemo 缓存计算结果。

Virtual Scrolling

大列表的虚拟化渲染

在显示大型文件列表、搜索结果等场景下,只渲染可见区域的元素,大幅减少 DOM 操作和内存占用。

Background Tasks

非阻塞异步操作

遥测上报、配置预取、分析数据收集等操作在后台执行,使用 void Promise.all 模式确保不阻塞主线程。

权限系统

多层防护的安全模型

Claude Code 的权限系统采用多层防御策略,从全局的功能开关到细粒度的用户确认, 每一层都提供了不同级别的安全保护。这种设计确保了在各种使用场景下—— 从个人开发到企业环境——都能提供适当的安全级别。

权限系统多层防御

第1层检查第2层模式模式模式第3层第3层验证验证第4层批准通过工具调用请求Feature Flags功能是否启用Permission Modeautomanualbypass工具级权限路径检查网络白名单用户确认执行工具
1
Feature Flags

功能开关层

通过 feature flag 系统控制实验性功能的开启和关闭。新工具和新功能首先通过 flag 控制,经过充分测试后才会默认启用。这确保了只有经过验证的能力才会暴露给用户。

2
Permission Modes

权限模式层

三种权限模式满足不同安全需求:auto 模式自动批准安全操作;manual 模式对所有敏感操作弹出确认;bypass 模式用于 CI/CD 等自动化场景,通过环境变量控制。

3
Tool-Specific Permissions

工具级权限层

每个工具可以定义自己的权限检查逻辑。例如文件操作工具会检查路径是否在项目目录内,网络工具会检查 URL 是否在白名单中。这种细粒度的控制确保了工具只能执行被允许的操作。

4
User Consent

用户确认层

在 manual 模式下,敏感操作(如文件写入、命令执行)会弹出交互式确认对话框。用户可以一次性批准或拒绝,也可以选择"本次会话始终允许",在安全性和便利性之间取得平衡。

上下文管理

让 Claude 理解你的项目

上下文管理是 Claude Code 智能化的关键。系统通过多种渠道收集和整合上下文信息, 帮助 Claude 深入理解用户的项目环境、编码习惯和团队规范。 这些上下文信息在每次 API 调用时都会被精心组织和注入,确保 Claude 的回复始终贴合实际场景。

系统上下文
System Context
  • Git 仓库状态(分支、变更、冲突)
  • 系统信息(操作系统、Node.js 版本)
  • 环境变量与配置
  • 网络连接状态
用户上下文
User Context
  • CLAUDE.md 项目级指令文件
  • 用户级 ~/.claude/settings 配置
  • 项目 .claude/ 目录下的设置
  • 用户偏好与历史行为
记忆系统
Memory System (memdir)
  • 跨会话的持久化上下文存储
  • 项目特定的知识与决策记录
  • 用户习惯的自动学习与适应
  • 团队共享的知识库
团队上下文
Team Context
  • 多 Agent 协调的共享状态
  • 任务分配与进度追踪
  • 团队成员间的消息传递
  • 统一的权限与配置管理

上下文组装流程 (QueryEngine 核心逻辑)

注入注入注入注入加载注册附加生成发送Git 状态系统信息CLAUDE.md用户配置memdir 记忆工具列表权限状态QueryEngine 上下文组装SystemPromptClaude API

四大入口

Four Entry Points — 多样化的启动方式

Claude Code 提供 4 种入口方式,覆盖从命令行到远程协作的全部场景。每种入口最终都汇入共享的 QueryEngine、State 和 Bootstrap 核心。

启动启动连接连接CLI (cli/)REPL (replLauncher)Direct Connect (server/)Remote (remote/)Shared CoreQueryEngineStateBootstrap
💻CLI详情 →

cli/ — 结构化 I/O、NDJSON 流式传输、Bash 命令处理

🔄REPL详情 →

replLauncher.tsx + entrypoints/cli.tsx — 交互式终端会话

🔗Direct Connect

server/ — 服务端直连:directConnectManager、会话创建

🌐Remote

remote/ — 远程会话管理:WebSocket、权限桥接、SDK 适配

完整目录结构树

Interactive Directory Tree — 35+ 模块一览

点击含有子目录的模块可展开查看详细文件。带 标记的模块有对应的深度分析页面。

claude-code-main/

模块依赖 DAG 图

Module Dependency Graph — 层级依赖关系

展示 Claude Code 各模块间的依赖关系。上层模块依赖下层模块,箭头表示「依赖」方向。核心层(QueryEngine、State、Context)位于底部,被多个上层模块共享依赖。

main.tsxentry/cli.tsxentry/mcp.tscli/server/remote/QueryEnginecoordinatorbridgepluginsskillstoolscommandshookscontextstateschemasutilsmemdir