Claude Code 源码泄露,逆向分析出ta的架构设计文档
Claude Code 架构设计文档
版本: v2.1.76 (Deobfuscated Source)来源:使用ClaudeCode解析ClaudeCode源码生成的文档更新日期: 2026-03-31
github源码仓库:https://github.com/instructkr/claude-code

目录
-
1. 系统概述[1] -
2. 整体架构[2] -
3. 核心模块详解[3] -
4. 工具系统[4] -
5. MCP 集成[5] -
6. 状态管理[6] -
7. 认证系统[7] -
8. 会话管理[8] -
9. 命令系统[9] -
10. 插件系统[10] -
11. 数据流分析[11] -
12. 技术栈[12] -
13. Claude Code 架构图解[13]
1. 系统概述
1.1 产品定位
Claude Code 是 Anthropic 官方的 AI 编程助手 CLI 工具,提供:
-
• 交互式对话: 基于 Terminal 的多轮对话界面 -
• 工具调用: 40+ 内置工具,支持文件操作、代码执行、网络请求等 -
• MCP 协议: 支持 Model Context Protocol 扩展 -
• 多平台认证: 支持 Claude.ai 订阅、API Key、AWS Bedrock、Azure Vertex AI -
• 插件系统: 可扩展的技能和插件机制
1.2 架构设计原则
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ┌─────────────────────────────────────────────────────────────────┐│ 架构设计原则 │├─────────────────────────────────────────────────────────────────┤│ ││ 1. 模块化设计 各功能模块独立,低耦合高内聚 ││ ││ 2. 插件化扩展 工具、命令、MCP 服务均可独立扩展 ││ ││ 3. 流式处理 所有 I/O 采用流式设计,支持实时响应 ││ ││ 4. 权限控制 细粒度权限系统,安全执行用户操作 ││ ││ 5. 特性开关 编译时特性门控,区分内外部版本 ││ ││ 6. 状态驱动 响应式状态管理,UI 自动更新 ││ │└─────────────────────────────────────────────────────────────────┘
2. 整体架构
2.1 系统架构图

2.2 目录结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 claudecode/├── src/│ ├── entrypoints/ # 入口点│ │ ├── cli.tsx # CLI 主入口 (处理多种模式)│ │ ├── sdk/ # SDK 入口│ │ └── mcp.ts # MCP 服务入口│ ││ ├── tools/ # 工具系统 (40+ 工具)│ │ ├── BashTool.ts # Shell 命令执行│ │ ├── FileEditTool.ts # 文件编辑│ │ ├── FileReadTool.ts # 文件读取│ │ ├── GlobTool.ts # 文件模式匹配│ │ ├── GrepTool.ts # 内容搜索│ │ ├── AgentTool.ts # 子代理│ │ └── ... # 其他工具│ ││ ├── commands/ # 命令系统 (88+ 命令)│ │ ├── commit/ # /commit 命令│ │ ├── review/ # /review 命令│ │ ├── compact/ # /compact 命令│ │ └── ... # 其他命令│ ││ ├── services/ # 服务层│ │ ├── api/ # API 客户端│ │ │ └── claude.ts # Claude API 封装│ │ ├── mcp/ # MCP 服务│ │ │ ├── client.ts # MCP 客户端│ │ │ └── config.ts # MCP 配置│ │ ├── analytics/ # 分析服务│ │ └── telemetry/ # 遥测服务│ ││ ├── state/ # 状态管理│ │ └── AppStateStore.ts # 应用状态存储│ ││ ├── components/ # React/Ink 组件│ │ ├── REPL.tsx # 主 REPL 组件│ │ ├── VirtualMessageList.tsx│ │ └── ... # 其他 UI 组件│ ││ ├── utils/ # 工具函数│ │ ├── config.ts # 配置管理│ │ ├── auth.ts # 认证处理│ │ ├── permissions.ts # 权限系统│ │ └── sessionStorage.ts # 会话存储│ ││ ├── context/ # 上下文管理│ │ └── systemPrompt.ts # 系统提示词│ ││ ├── hooks/ # 钩子系统│ │ └── hooks.ts # Pre/Post 钩子│ ││ ├── bridge/ # IDE 集成│ │ └── remote-control/ # 远程控制│ ││ ├── plugins/ # 插件系统│ │ ├── manifest.ts # 插件清单│ │ └── marketplace.ts # 插件市场│ ││ ├── coordinator/ # 多代理协调│ ││ ├── vim/ # Vim 模式│ ││ ├── voice/ # 语音输入│ ││ ├── ink/ # Ink 定制│ ││ ├── native-ts/ # 原生模块 TS 移植│ ││ ├── remote/ # 远程会话│ ││ ├── server/ # 直连服务器│ ││ ├── memdir/ # 自动记忆系统│ ││ ├── keybindings/ # 快捷键系统│ ││ ├── migrations/ # 版本迁移│ ││ ├── schemas/ # Zod 验证模式│ ││ ├── types/ # 类型定义│ ││ ├── query.ts # 查询核心│ ││ ├── QueryEngine.ts # 查询引擎│ ││ ├── Tool.ts # 工具接口定义│ ││ └── main.tsx # 主应用 (808KB)│├── package.json├── tsconfig.json└── bunfig.toml
2.3 分层架构详解

3. 核心模块详解
3.1 入口系统 (Entrypoints)

入口点类型:
|
|
|
|
|
|
|
|
|
|---|---|---|
|
|
cli.tsx |
|
|
|
sdk/index.ts |
|
|
|
mcp.ts |
|
CLI 入口模式处理流程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 // cli.tsx 核心逻辑async function main() { // 1. 快速路径:版本号输出(零导入) if (args.includes('--version')) { console.log(VERSION) return } // 2. 特殊模式路由 if (args.includes('--dump-system-prompt')) { // 输出渲染后的系统提示词 await dumpSystemPrompt() return } // 3. MCP 服务器模式 if (args.includes('--claude-in-chrome-mcp')) { await startChromeMCPServer() return } // 4. 远程控制模式 if (args.includes('remote-control') || args.includes('rc')) { await startBridgeMode() return } // 5. 默认:加载完整 CLI await import('./main.js')}
3.2 查询引擎 (QueryEngine)

QueryEngine 核心实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 export class QueryEngine { private config: QueryEngineConfig private mutableMessages: Message[] private abortController: AbortController private permissionDenials: SDKPermissionDenial[] private totalUsage: NonNullableUsage private readFileState: FileStateCache async *submitMessage(prompt: string): AsyncGenerator<SDKMessage> { // 1. 构建用户消息 const userMessage = await this.buildUserMessage(prompt) this.mutableMessages.push(userMessage) // 2. 获取系统提示词 const systemPrompt = await getSystemPrompt() // 3. 规范化消息 const normalizedMessages = normalizeMessagesForAPI( this.mutableMessages, this.config ) // 4. 调用 API const stream = streamMessages({ messages: normalizedMessages, system: systemPrompt, tools: this.getEnabledTools(), ...this.config }) // 5. 处理流式响应 for await (const event of stream) { yield* this.processStreamEvent(event) } }}
3.3 消息处理系统

4. 工具系统
4.1 工具接口定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 export type Tool<Input, Output, P> = { // 基础属性 name: string // 工具名称 aliases?: string[] // 别名列表 searchHint?: string // 搜索提示 // 模式定义 inputSchema: Input // Zod 输入模式 inputJSONSchema?: JSONSchema // JSON Schema // 核心方法 call(): Promise<ToolResult<Output>> // 执行工具 description(): Promise<string> // 获取描述 // 状态检查 isEnabled(): boolean // 是否启用 isReadOnly(): boolean // 是否只读 isDestructive?(): boolean // 是否破坏性 isConcurrencySafe(): boolean // 是否并发安全 // 权限 checkPermissions(): Promise<PermissionResult> // 验证 validateInput?(): Promise<ValidationResult> // 渲染 renderToolUseMessage(): React.ReactNode renderToolResultMessage(): React.ReactNode // 可选扩展方法 queueConcurrencyKey?(): string | undefined renderProgress?(): React.ReactNode updateProgress?(): void signal?(): AbortSignal formatResult?(): string shouldDeferToolUse?(): Promise<boolean> performNetworkRequest?(): Promise<unknown> updateEstimatedProgress?(): void getUnsafeToolUseMessage?(): string forcePromptCaching?(): boolean // ... 更多可选方法}
4.2 工具分类

4.3 工具执行流程

4.4 BashTool 示例分析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 // BashTool 核心实现export const BashTool = buildTool({ name: 'Bash', inputSchema: z.object({ command: z.string().describe('The command to execute'), timeout: z.number().optional(), description: z.string().optional(), dangerouslyDisableSandbox: z.boolean().optional(), run_in_background: z.boolean().optional(), }), async call() { const { command, timeout, run_in_background } = this.input // 1. 沙箱检查 if (!this.input.dangerouslyDisableSandbox) { const sandboxResult = await checkSandbox(command) if (sandboxResult.blocked) { return { error: sandboxResult.reason } } } // 2. 执行命令 const result = await executeCommand(command, { timeout: timeout ?? 120000, signal: this.signal, background: run_in_background, }) // 3. 返回结果 return { stdout: result.stdout, stderr: result.stderr, exitCode: result.exitCode, } }, isReadOnly() { // 根据命令判断是否只读 return isReadOnlyCommand(this.input.command) }, isDestructive() { // 检查是否破坏性命令 return isDestructiveCommand(this.input.command) }, checkPermissions() { return checkBashPermission(this.input.command) },})
5. MCP 集成
5.1 MCP 架构

5.2 MCP 服务器配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 // MCP 服务器配置类型type McpServerConfig = { command: string // 启动命令 args?: string[] // 命令参数 env?: Record<string, string> // 环境变量 cwd?: string // 工作目录 transport?: 'stdio' | 'sse' | 'http' | 'ws' url?: string // 远程服务器 URL headers?: Record<string, string> // HTTP 头 disabled?: boolean}// 配置示例const mcpServers = { 'filesystem': { command: 'mcp-server-filesystem', args: ['--root', '/home/user/projects'] }, 'github': { transport: 'http', url: 'https://mcp.github.com/api', headers: { 'Authorization': 'Bearer ${GITHUB_TOKEN}' } }}
5.3 MCP 客户端状态机

5.4 MCP 工具包装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 // MCP 工具包装器export class MCPTool { constructor( private serverName: string, private tool: MCPToolDefinition ) {} async call(input: unknown): Promise<ToolResult> { // 1. 获取 MCP 客户端 const client = await this.getMCPClient() // 2. 调用 MCP 工具 const result = await client.callTool({ name: this.tool.name, arguments: input }) // 3. 处理结果 return { content: result.content, isError: result.isError } } checkPermissions() { // MCP 工具权限检查 return checkMCPPermission(this.serverName, this.tool.name) }}
6. 状态管理
6.1 状态架构

6.2 状态类型定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 export type AppState = DeepImmutable<{ // 设置 settings: SettingsJson // 任务管理 tasks: { [taskId: string]: TaskState } // MCP mcp: { clients: Map<string, MCPClientState> tools: Map<string, MCPToolDefinition> commands: Map<string, MCPCommandDefinition> resources: Map<string, MCPResourceDefinition> } // 插件 plugins: { enabled: Set<string> disabled: Set<string> commands: Map<string, PluginCommand> errors: Map<string, string> } // 会话 session: { id: string messages: Message[] usage: Usage status: SessionStatus } // UI ui: { mode: 'normal' | 'vim' | 'voice' theme: ThemeName showHelp: boolean scrollPosition: number } // 工具 tools: { enabled: Set<string> permissions: Map<string, PermissionState> } // 缓存 cache: { fileContents: Map<string, string> fileHashes: Map<string, string> embeddings: Map<string, number[]> } // ... 100+ 状态字段}>
6.3 状态更新模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 // Zustand-like 状态更新const useAppState = create<AppState>((set, get) => ({ // 状态 settings: defaultSettings, tasks: {}, // ... // 更新方法 updateSettings: (partial: Partial<SettingsJson>) => { set(state => ({ settings: { ...state.settings, ...partial } })) }, createTask: (task: Task) => { set(state => ({ tasks: { ...state.tasks, [task.id]: task } })) }, updateTask: (taskId: string, update: Partial<TaskState>) => { set(state => ({ tasks: { ...state.tasks, [taskId]: { ...state.tasks[taskId], ...update } } })) }, // 选择器 getEnabledTools: () => { const state = get() return Array.from(state.tools.enabled) },}))
7. 认证系统
7.1 认证流程

7.2 认证源优先级
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 type AuthTokenSource = | 'ANTHROPIC_API_KEY' // 1. 直接 API Key | 'ANTHROPIC_AUTH_TOKEN' // 2. Auth Token | 'CLAUDE_CODE_OAUTH_TOKEN' // 3. OAuth Token | 'CLAUDE_CODE_OAUTH_TOKEN_FILE_DESCRIPTOR' // 4. 文件描述符 | 'CCR_OAUTH_TOKEN_FILE' // 5. CCR Token 文件 | 'apiKeyHelper' // 6. 自定义密钥助手 | 'keychain' // 7. 系统钥匙串 | 'none' // 8. 无认证// 认证检查顺序async function getAuthToken(): Promise<AuthToken> { // 1. 检查环境变量 if (process.env.ANTHROPIC_API_KEY) { return { source: 'ANTHROPIC_API_KEY', token: process.env.ANTHROPIC_API_KEY } } // 2. 检查 OAuth Token if (process.env.CLAUDE_CODE_OAUTH_TOKEN) { return { source: 'CLAUDE_CODE_OAUTH_TOKEN', token: process.env.CLAUDE_CODE_OAUTH_TOKEN } } // 3. 调用 apiKeyHelper const helperToken = await callApiKeyHelper() if (helperToken) { return { source: 'apiKeyHelper', token: helperToken } } // 4. 从钥匙串读取 const storedToken = await getFromKeychain() if (storedToken) { return { source: 'keychain', token: storedToken } } // 5. 发起 OAuth 流程 return await performOAuthFlow()}
7.3 多后端支持

8. 会话管理
8.1 会话生命周期

8.2 会话存储结构
1 2 3 4 5 6 7 8 9 10 11 12 ~/.claude/projects/<project-hash>/├── sessions/│ ├── session-20260331-001.jsonl # 会话记录│ ├── session-20260331-002.jsonl│ └── ...├── pastes/│ ├── paste-abc123.txt # 粘贴内容存储│ └── ...├── memory/│ ├── MEMORY.md # 项目记忆│ └── ...└── settings.json # 项目设置
8.3 会话存储格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 // JSONL 会话记录格式type SessionRecord = { timestamp: string type: 'message' | 'tool_use' | 'tool_result' | 'system' data: { role: 'user' | 'assistant' content: ContentBlock[] usage?: Usage toolCalls?: ToolCall[] toolResults?: ToolResult[] }}// 示例记录{"timestamp":"2026-03-31T10:00:00Z","type":"message","data":{"role":"user","content":[{"type":"text","text":"帮我分析代码"}]}}{"timestamp":"2026-03-31T10:00:05Z","type":"message","data":{"role":"assistant","content":[{"type":"text","text":"我来帮你分析..."}],"usage":{"input_tokens":100,"output_tokens":50}}}{"timestamp":"2026-03-31T10:00:10Z","type":"tool_use","data":{"name":"FileReadTool","input":{"file_path":"src/main.ts"}}}{"timestamp":"2026-03-31T10:00:12Z","type":"tool_result","data":{"content":"文件内容..."}}
8.4 上下文压缩策略

9. 命令系统
9.1 命令类型

9.2 命令定义结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 type Command = | { type: 'prompt' getPromptForCommand(): Promise<string> } | { type: 'local' handler(): Promise<LocalCommandResult> } | { type: 'jsx' component: React.FC }// 命令注册示例const commands: Record<string, Command> = { '/commit': { type: 'prompt', async getPromptForCommand() { // 获取 git diff const diff = await getGitDiff() return `请根据以下变更生成提交信息:\n${diff}` } }, '/help': { type: 'local', async handler() { return { output: generateHelpText(), exitCode: 0 } } }, '/stats': { type: 'jsx', component: StatsPanel }}
9.3 命令执行流程

10. 插件系统
10.1 插件架构

10.2 插件清单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 type PluginManifest = { name: string version: string description: string author: string // 入口点 main?: string // 主入口文件 skills?: string[] // 技能文件 tools?: string[] // 工具文件 commands?: string[] // 命令文件 // 依赖 dependencies?: string[] peerDependencies?: string[] // 权限 permissions?: { fileSystem?: boolean network?: boolean shell?: boolean } // 配置 config?: { [key: string]: ConfigSchema }}// 插件示例const examplePlugin: PluginManifest = { name: 'claude-code-git', version: '1.0.0', description: 'Git integration plugin', author: 'anthropic', skills: ['./skills/commit.md', './skills/review.md'], tools: ['./tools/gitTool.ts'], commands: ['./commands/branch.ts'], permissions: { fileSystem: true, shell: true }}
10.3 插件生命周期

11. 数据流分析
11.1 完整请求流程

11.2 Token 预算管理

11.3 权限检查流程

12. 技术栈
12.1 核心技术
|
|
|
|
|
|---|---|---|---|
| 运行时 |
|
|
|
| 打包器 |
|
|
|
| 语言 |
|
|
|
| UI 框架 |
|
|
|
| 终端 UI |
|
|
|
| API 客户端 |
|
|
|
| MCP SDK |
|
|
|
| 验证 |
|
|
|
| 状态管理 |
|
|
|
12.2 依赖关系图

12.3 特性门控系统
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 // 特性标志定义type FeatureFlag = | 'PROACTIVE' // 主动代理能力 | 'KAIROS' // 时机感知 | 'AGENT_TRIGGERS' // 调度/远程代理 | 'MONITOR_TOOL' // 实时监控 | 'DAEMON' // 后台守护进程 | 'BRIDGE_MODE' // 远程控制模式 | 'BG_SESSIONS' // 后台会话// 编译时特性检查import { feature } from 'bun:bundle'// 示例:条件编译if (feature('PROACTIVE')) { // 仅在内部版本包含 const proactive = require('./commands/proactive.js') commands.set('/proactive', proactive)}// 示例:功能差异const toolRegistry = { ...publicTools, ...(feature('PROACTIVE') ? proactiveTools : {}), ...(feature('MONITOR_TOOL') ? monitorTools : {}),}
12. Claude Code 架构图解
本文档包含 Claude Code 架构的 可视化图表
12.1 系统全景图

12.2 工具系统架构

12.3 数据流图

12.4 状态管理架构

12.5 认证流程图

图表生成日期: 2026-03-31基于 Claude Code v2.1.76 源码分析
附录
A. 关键文件大小参考
|
|
|
|
|
|---|---|---|---|
main.tsx |
|
|
|
sessionStorage.ts |
|
|
|
print.ts |
|
|
|
messages.ts |
|
|
|
claude.ts |
|
|
|
client.ts
|
|
|
|
hooks.ts |
|
|
|
attachments.ts |
|
|
|
B. 工具完整列表
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C. 命令完整列表
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
文档生成日期: 2026-03-31基于 Claude Code v2.1.76 反混淆源码分析
引用链接
[1] 系统概述: #1-系统概述[2] 整体架构: #2-整体架构[3] 核心模块详解: #3-核心模块详解[4] 工具系统: #4-工具系统[5] MCP 集成: #5-mcp-集成[6] 状态管理: #6-状态管理[7] 认证系统: #7-认证系统[8] 会话管理: #8-会话管理[9] 命令系统: #9-命令系统[10] 插件系统: #10-插件系统[11] 数据流分析: #11-数据流分析[12] 技术栈: #12-技术栈[13] Claude Code 架构图解: #13-ClaudeCode架构图解
夜雨聆风