【AI 工具与工作流-Claude Code — 源码文档与架构分析】此文章归类为:AI 工具与工作流。
Claude Code 是 Anthropic 官方的 Claude CLI 工具。本文档提供了对其源码架构、模块和内部设计模式的全面逆向工程分析。
本文档是对 Claude Code 源码树进行深度分析的成果。它面向希望了解 Claude Code 底层工作原理的开发者和工程师——包括其架构、模块边界、数据流和设计决策。
结构: 文档采用自顶向下的组织方式,从项目概览和技术栈开始,然后深入到各个主要子系统(工具、命令、状态、服务、UI)。每个章节都是独立的;你可以通过目录跳转到任意章节。
受众: 熟悉 TypeScript、React 和 CLI 工具的中高级开发者。有 AI/LLM 工具开发经验会有帮助,但不是必需的。
范围: 本文档涵盖源码树结构、模块清单和架构模式。不深入涉及运行时行为,也不包含性能基准测试或安全审计。
Claude Code 是一个功能丰富的交互式终端应用,允许直接在命令行中进行 AI 辅助软件工程。它提供:
| 层级 | 技术 |
|---|---|
| 语言 | TypeScript (.ts / .tsx) |
| 运行时 | Bun(打包工具,通过 bun:bundle 实现特性标志) |
| UI 框架 | React + Ink(终端 React 渲染器) |
| API 客户端 | @anthropic-ai/sdk(Anthropic SDK) |
| MCP | @modelcontextprotocol/sdk |
| CLI 框架 | @commander-js/extra-typings |
| 数据验证 | Zod v4 |
| 样式 | Chalk(终端颜色) |
| 状态管理 | Zustand 风格 Store + React Context |
claude-code-analysis/
└── src/ # 所有源码(单一顶级目录)
├── main.tsx # 主引导与初始化
├── QueryEngine.ts # 对话循环编排器
├── Tool.ts # 工具类型定义与接口
├── Task.ts # 任务类型定义与生命周期
├── commands.ts # 命令注册表
├── tools.ts # 工具注册表与工厂
├── context.ts # 系统/用户上下文构建器
├── query.ts # 查询上下文准备
├── setup.ts # 启动阶段编排
├── history.ts # 聊天会话历史
├── cost-tracker.ts # Token 用量与定价
├── ink.ts # Ink 渲染封装
├── replLauncher.tsx # REPL React 组件启动器
├── tasks.ts # 任务执行管理器
│
├── commands/ # 101 个命令模块(斜杠命令)
├── tools/ # 41 个工具实现
├── services/ # 核心服务(API、MCP、分析等)
├── components/ # React/Ink UI 组件(130+ 文件)
├── utils/ # 工具函数(300+ 文件)
├── state/ # 应用状态管理
├── types/ # TypeScript 类型定义
├── hooks/ # React Hooks
├── schemas/ # Zod 验证模式
├── tasks/ # 任务类型实现
├── entrypoints/ # 入口点定义(CLI、SDK、MCP)
├── bootstrap/ # 应用启动与全局状态
├── screens/ # 全屏 UI 布局
├── plugins/ # 插件系统(内置插件)
├── skills/ # 自定义技能系统(内置技能)
├── memdir/ # 内存目录自动发现
├── constants/ # 应用常量
├── migrations/ # 数据/模式迁移
├── ink/ # Ink 终端自定义
├── keybindings/ # 键盘绑定系统
├── context/ # React Context(信箱、通知)
├── query/ # 查询处理模块
├── outputStyles/ # 输出格式化样式
├── vim/ # Vim 模式集成
├── voice/ # 语音输入/输出
├── native-ts/ # 原生 TypeScript 绑定
├── assistant/ # Kairos(助手)模式
├── bridge/ # Bridge 模式(常驻远程连接)
├── buddy/ # Buddy/队友系统
├── coordinator/ # 多 Agent 协调
├── remote/ # 远程会话处理
├── server/ # 服务器实现
├── cli/ # CLI 参数解析
└── upstreamproxy/ # 上游代理设置
src/main.tsx主引导文件(约 1,400 行)。执行以下操作:
startupProfiler.ts 进行启动性能分析feature() 进行特性标志初始化,实现死代码消除replLauncher.tsx 启动 REPLsrc/entrypoints/)| 文件 | 用途 |
|---|---|
cli.tsx |
CLI 入口点,带 React/Ink UI 渲染 |
init.ts |
引导初始化、版本检查 |
mcp.ts |
Model Context Protocol 集成 |
agentSdkTypes.ts |
Agent SDK 的类型定义 |
sandboxTypes.ts |
沙箱执行环境类型 |
sdk/ |
SDK 相关实现 |
src/setup.ts负责编排:
src/QueryEngine.ts)应用的核心(约 46KB)。管理用户与 Claude 之间的对话循环:
src/context.ts、src/query.ts)准备系统提示词和用户上下文:
CLAUDE.md 文件(项目级、用户级、全局级)src/cost-tracker.ts)追踪每次会话的成本:
src/Tool.ts、src/tools.ts)每个工具都是一个自包含的模块,包含:
| 工具 | 用途 |
|---|---|
FileReadTool |
读取文件内容,支持行范围 |
FileWriteTool |
创建或覆盖文件 |
FileEditTool |
精确字符串替换编辑 |
GlobTool |
基于模式的文件匹配 |
GrepTool |
基于正则的内容搜索(基于 ripgrep) |
| 工具 | 用途 |
|---|---|
BashTool |
执行 Shell 命令,支持超时 |
PowerShellTool |
执行 PowerShell 命令(Windows) |
REPLTool |
执行 Python 代码(仅内部使用) |
NotebookEditTool |
Jupyter Notebook 单元格操作 |
| 工具 | 用途 |
|---|---|
WebFetchTool |
获取并解析网页内容 |
WebSearchTool |
互联网搜索 |
ToolSearchTool |
搜索可用的延迟加载工具 |
| 工具 | 用途 |
|---|---|
AgentTool |
生成子 Agent 进行并行工作 |
TaskCreateTool |
创建新的后台任务 |
TaskGetTool |
获取任务状态和结果 |
TaskUpdateTool |
更新任务状态或描述 |
TaskListTool |
列出所有任务及其状态 |
TaskStopTool |
终止正在运行的任务 |
TaskOutputTool |
流式读取任务输出 |
SendMessageTool |
向运行中的 Agent 发送消息 |
| 工具 | 用途 |
|---|---|
EnterPlanModeTool |
进入只读计划模式 |
ExitPlanModeTool |
退出计划模式并获得批准 |
EnterWorktreeTool |
创建隔离的 Git 工作树 |
ExitWorktreeTool |
从工作树返回并携带变更 |
| 工具 | 用途 |
|---|---|
MCPTool |
调用 MCP 服务器上的工具 |
McpAuthTool |
MCP 服务器认证 |
ListMcpResourcesTool |
列出 MCP 服务器资源 |
ReadMcpResourceTool |
读取特定 MCP 资源 |
| 工具 | 用途 |
|---|---|
ConfigTool |
读取/修改设置 |
SkillTool |
执行用户自定义技能 |
AskUserQuestionTool |
提示用户输入/确认 |
BriefTool |
生成会话摘要 |
TodoWriteTool |
管理待办事项列表 |
SleepTool |
暂停执行指定时长 |
| 工具 | 用途 |
|---|---|
TeamCreateTool |
创建 Agent 团队 |
TeamDeleteTool |
删除 Agent 团队 |
RemoteTriggerTool |
触发远程任务执行 |
ScheduleCronTool |
调度定时任务 |
LSPTool |
Language Server Protocol 集成 |
| 工具 | 用途 |
|---|---|
SyntheticOutputTool |
用于结构化响应的合成输出 |
src/commands.ts)命令是 src/commands/ 下的模块化目录,每个目录包含一个 index.ts(或类似文件),导出一个 Command 定义,包含名称、描述、处理函数和可选的别名。
commit、commit-push-pr、diff、branch、review、autofix-pr、pr_comments、teleport、rewind、tag
session、resume、clear、compact、export、share、summary、context
config、permissions、privacy-settings、theme、color、keybindings、vim、output-style、statusline、env
agents、tasks、brief
files、add-dir、diff、debug-tool-call、copy
doctor、heapdump、perf-issue、stats、bughunter、ctx_viz、ant-trace
login、logout、oauth-refresh
mcp、plugin、reload-plugins、skills
plan、sandbox-toggle、init
help、version、cost、usage、extra-usage、release-notes、status、insights
desktop、mobile、chrome、ide、install、install-github-app、install-slack-app
memory、good-claude
model、effort、fast、thinkback、thinkback-play、advisor
bridge、voice、remote-setup、remote-env、stickers、feedback、onboarding、passes、ultraplan、rename、exit
src/state/)| 文件 | 用途 |
|---|---|
AppState.tsx |
React Context 提供者,带 useAppState(selector) Hook |
AppStateStore.ts |
中心状态结构定义 |
store.ts |
Zustand 风格 Store 实现 |
{
settings: UserSettings // 来自 settings.json 的用户配置
mainLoopModel: string // 当前活跃的 Claude 模型
messages: Message[] // 对话历史
tasks: TaskState[] // 运行中/已完成的任务
toolPermissionContext: { // 每个工具的权限规则
rules: PermissionRule[]
bypassMode: 'auto' | 'block' | 'ask'
denialTracking: DenialTrackingState
}
kairosEnabled: boolean // 助手模式标志
remoteConnectionStatus: Status // 远程会话连接状态
replBridgeEnabled: boolean // 常驻桥接(CCR)状态
speculationState: Cache // 内联推测缓存/预览
}
src/Task.ts)| 类型 | 描述 |
|---|---|
local_bash |
本地 Shell 命令执行 |
local_agent |
本地子 Agent(通过 AgentTool 生成) |
remote_agent |
远程 Agent 执行 |
in_process_teammate |
进程内队友(共享内存空间) |
local_workflow |
本地多步骤工作流 |
monitor_mcp |
MCP 服务器监控任务 |
dream |
自动梦境后台任务 |
pending -> running -> completed
-> failed
-> killed
{
id: string // 带类型前缀的唯一 ID(例如 "b-xxx" 表示 bash)
type: TaskType
status: TaskStatus
description: string
startTime: number
endTime?: number
outputFile: string // 磁盘持久化输出
outputOffset: number // 当前读取位置
notified: boolean // 是否已报告完成
}
src/services/api/)| 文件 | 用途 |
|---|---|
client.ts |
Anthropic SDK 客户端,支持多提供商 |
claude.ts |
消息流式传输与工具调用处理 |
bootstrap.ts |
启动时获取引导数据 |
usage.ts |
Token 用量记录 |
errors.ts / errorUtils.ts |
错误分类与处理 |
logging.ts |
API 请求/响应日志 |
withRetry.ts |
指数退避重试逻辑 |
filesApi.ts |
文件上传/下载 |
sessionIngress.ts |
远程会话桥接 |
grove.ts |
Grove 集成 |
referral.ts |
推荐/通行证系统 |
支持的提供商:
src/services/mcp/)| 文件 | 用途 |
|---|---|
client.ts |
MCP 客户端实现 |
types.ts |
服务器定义与连接类型 |
config.ts |
配置加载与验证 |
auth.ts |
MCP 服务器的 OAuth/认证 |
officialRegistry.ts |
官方 MCP 服务器注册表 |
InProcessTransport.ts |
进程内 MCP 传输 |
normalization.ts |
URL/配置规范化 |
elicitationHandler.ts |
通过 MCP 提示用户 |
src/services/analytics/)| 文件 | 用途 |
|---|---|
index.ts |
事件日志 API |
growthbook.ts |
特性标志与 A/B 测试 |
sink.ts |
分析接收器配置 |
datadog.ts |
Datadog 集成 |
firstPartyEventLogger.ts |
第一方分析 |
metadata.ts |
事件元数据增强 |
src/services/compact/)| 文件 | 用途 |
|---|---|
compact.ts |
完整上下文窗口压缩 |
autoCompact.ts |
自动压缩触发器 |
microCompact.ts |
选择性消息修剪 |
compactWarning.ts |
压缩用户警告 |
sessionMemoryCompact.ts |
跨压缩的记忆持久化 |
| 目录/文件 | 用途 |
|---|---|
SessionMemory/ |
会话记忆持久化与转录 |
MagicDocs/ |
智能文档生成 |
AgentSummary/ |
Agent 执行摘要 |
PromptSuggestion/ |
建议的后续提示词 |
extractMemories/ |
从对话中提取学习内容 |
plugins/ |
插件生命周期管理 |
oauth/ |
OAuth 客户端流程 |
lsp/ |
Language Server Protocol 客户端 |
remoteManagedSettings/ |
远程配置同步 |
settingsSync/ |
设置同步 |
teamMemorySync/ |
团队记忆同步 |
policyLimits/ |
速率限制与配额 |
autoDream/ |
自动梦境后台功能 |
tips/ |
上下文提示系统 |
toolUseSummary/ |
工具使用分析 |
voice.ts / voiceStreamSTT.ts |
语音输入处理 |
UI 使用 React 构建,通过 Ink 渲染到终端。组件使用标准 React 模式(Hooks、Context、Props),但渲染为终端 ANSI 输出而非 DOM。
| 组件 | 文件 | 用途 |
|---|---|---|
App |
components/App.tsx |
根应用组件 |
REPL |
screens/REPL.tsx |
主 REPL 界面 |
Messages |
components/Messages.tsx |
对话消息列表 |
PromptInput |
components/PromptInput/ |
带自动补全的用户输入 |
StatusLine |
components/StatusLine.tsx |
底部状态栏 |
Message.tsx、MessageRow.tsx、MessageResponse.tsx、MessageModel.tsx、MessageTimestamp.tsx、MessageSelector.tsx、messages/(专用消息类型子目录)
TrustDialog/、AutoModeOptInDialog.tsx、BypassPermissionsModeDialog.tsx、CostThresholdDialog.tsx、BridgeDialog.tsx、ExportDialog.tsx、InvalidConfigDialog.tsx、InvalidSettingsDialog.tsx、ManagedSettingsSecurityDialog/、IdeAutoConnectDialog.tsx、IdleReturnDialog.tsx、WorktreeExitDialog.tsx、RemoteEnvironmentDialog.tsx
HighlightedCode/、StructuredDiff/、FileEditToolDiff.tsx
Settings/、ThemePicker.tsx、OutputStylePicker.tsx、ModelPicker.tsx、LanguagePicker.tsx
tasks/、teams/、agents/、CoordinatorAgentStatus.tsx、TaskListV2.tsx、TeammateViewHeader.tsx
GlobalSearchDialog.tsx、HistorySearchDialog.tsx、QuickOpenDialog.tsx、SearchBox.tsx
design-system/、Spinner/、CustomSelect/、LogoV2/、HelpV2/
permissions/(基于角色的访问对话框和提示)
src/utils/ 目录包含 300+ 文件,提供底层功能。主要分类:
| 文件/目录 | 用途 |
|---|---|
git.ts |
Git 命令封装 |
git/ |
扩展 Git 工具 |
gitDiff.ts |
Diff 生成与解析 |
gitSettings.ts |
Git 指令开关 |
github/ |
GitHub API 辅助工具 |
worktree.ts |
Git 工作树自动化 |
| 文件/目录 | 用途 |
|---|---|
Shell.ts |
Shell 执行封装 |
shell/ |
Shell 配置与辅助工具 |
bash/ |
Bash 专用工具 |
powershell/ |
PowerShell 工具 |
execFileNoThrow.ts |
安全进程启动 |
process.ts |
进程管理 |
| 文件/目录 | 用途 |
|---|---|
auth.ts |
API 密钥、OAuth、AWS/GCP 凭证管理 |
secureStorage/ |
钥匙串集成(macOS) |
permissions/ |
权限规则、文件系统沙箱 |
crypto.ts |
加密工具 |
sandbox/ |
沙箱环境 |
| 文件/目录 | 用途 |
|---|---|
config.ts |
.claude/config.json 管理 |
settings/ |
settings.json 验证与应用 |
env.ts |
静态环境变量 |
envDynamic.ts |
动态环境检测 |
envUtils.ts |
环境变量解析 |
managedEnv.ts |
托管环境配置 |
| 文件/目录 | 用途 |
|---|---|
claudemd.ts |
CLAUDE.md 自动发现与解析 |
fileStateCache.ts |
文件变更追踪 |
fileHistory.ts |
文件快照(用于撤销) |
filePersistence/ |
持久化文件存储 |
glob.ts |
Glob 模式匹配 |
ripgrep.ts |
Ripgrep 集成 |
| 文件/目录 | 用途 |
|---|---|
model/ |
模型选择与上下文窗口管理 |
modelCost.ts |
Token 定价表 |
thinking.ts |
扩展思考模式配置 |
effort.ts |
任务工作量级别管理 |
fastMode.ts |
速度优化模式 |
advisor.ts |
AI 顾问集成 |
tokens.ts |
Token 计数与估算 |
| 文件/目录 | 用途 |
|---|---|
swarm/ |
多 Agent 集群协调 |
teammate.ts |
队友/Agent 模式工具 |
forkedAgent.ts |
分叉 Agent 进程管理 |
agentContext.ts |
Agent 执行上下文 |
| 文件/目录 | 用途 |
|---|---|
startupProfiler.ts |
启动性能监控 |
headlessProfiler.ts |
运行时性能分析 |
fpsTracker.ts |
帧率指标 |
diagLogs.ts |
诊断日志(无 PII) |
debug.ts |
调试工具 |
| 文件/目录 | 用途 |
|---|---|
theme.ts |
主题管理 |
renderOptions.ts |
Ink 渲染配置 |
format.ts |
数字/时长格式化 |
markdown.ts |
Markdown 处理 |
cliHighlight.ts |
CLI 语法高亮 |
src/bridge/)通过基于 WebSocket 的会话入口与 Claude.ai 保持常驻连接。支持持久化后台会话和远程访问。
src/assistant/)企业助手功能:
KAIROS 标志进行功能门控src/coordinator/)多 Agent 编排:
COORDINATOR_MODE 标志进行功能门控src/voice/)语音输入/输出支持:
用于在编码前设计实现策略的只读模式:
.claude/plans/ 中创建计划文件EnterPlanModeTool / ExitPlanModeTool 管理用于安全实验的 Git 工作树隔离:
src/vim/)终端输入的 Vim 键绑定集成。
src/plugins/)plugins/bundled/ 中的内置插件(键盘快捷键、主题等)PluginInstallationManager 管理插件生命周期reload-plugins 命令支持热重载src/skills/)skills/bundled/ 中的内置技能(提交、审查、简化等)/skill-name 调用的命名提示词src/schemas/hooks.ts)通过 Zod 验证定义:
HookEvent — 执行前/执行后生命周期钩子PromptRequest / PromptResponse — 用户提示协议src/hooks/)| Hook | 用途 |
|---|---|
useSettings |
设置变更检测 |
useTerminalSize |
终端尺寸追踪 |
useExitOnCtrlC |
信号处理 |
useBlink |
光标闪烁动画 |
useDoublePress |
双按键检测 |
useCanUseTool |
工具权限验证 |
src/utils/hooks/)用于 Shell 配置、权限状态和工具行为的额外 Hooks。
| 分类 | 数量 |
|---|---|
| TypeScript 文件总数 | 1,884 |
| 命令模块 | 101 |
| 工具实现 | 41 |
| UI 组件 | 130+ |
| 工具函数文件 | 300+ |
| 服务模块 | 35+ |
| 顶层源文件 | 18 |
| 入口点 | 6 |
src/ 中的子目录 |
37 |
通过 require() 条件导入,由 Bun 的 feature() 标志门控。这使得在打包时可以对整个子系统(例如 KAIROS、COORDINATOR_MODE)进行 Tree-Shaking。
const assistantModule = feature('KAIROS')
? require('./assistant/index.js')
: null;
与外部世界的每次交互都通过已注册的 Tool 进行。工具具有:
斜杠命令是模块化目录,每个目录导出一个 Command 对象。commands.ts 中的注册表将它们聚合在一起,支持可选的特性门控条件。
对话是一系列类型化消息(UserMessage、AssistantMessage、SystemMessage、ProgressMessage 等),由 QueryEngine 管理。工具结果作为 ToolResultBlockParam 消息注入。
当对话上下文接近模型窗口限制时,系统自动压缩旧消息,同时保留关键上下文。提供多种策略:完整压缩、微压缩(选择性修剪)和会话记忆持久化。
每次工具执行都经过权限检查。模式包括:
整个 UI 是通过 Ink 渲染的 React 组件树。这使得以下特性成为可能:
欢迎贡献!如果你发现了额外的架构细节、发现了不准确之处,或想扩展特定子系统的覆盖范围:
git checkout -b fix/tool-system-details)请保持贡献的事实性和技术准确性。这是一份参考文档——推测内容应明确标注。
免责声明: 这是一份非官方的独立分析。Claude Code 是 Anthropic 的产品。所有商标归其各自所有者所有。
生成于 2025-03-31。基于对 Claude Code 源码树的分析。
更多【AI 工具与工作流-Claude Code — 源码文档与架构分析】相关视频教程:www.yxfzedu.com