Files
openclaude/docs/Claude_Code_Source_Analysis.md

17 KiB
Raw Permalink Blame History

Claude Code v2.1.88 源码分析报告

分析日期2026-03-31 源码版本anthropic-ai-claude-code-2.1.88 总文件数1,884 个源文件(.ts/.tsx 总代码行数:约 512,664 行


一、项目概览

Claude Code 是 Anthropic 官方的 CLI 交互式编程助手。它基于 Bun 运行时 构建,使用 React + Ink 渲染终端 UI通过 Anthropic API 与 Claude 模型交互,为用户提供代码编写、调试、文件操作等软件工程任务支持。

技术栈

类别 技术
运行时 Bun
语言 TypeScript / TSX
CLI 框架 Commander.js (@commander-js/extra-typings)
终端 UI React + Ink自定义 fork
AI SDK @anthropic-ai/sdk (Beta Messages API)
协议 MCP (Model Context Protocol)
构建 Bun bundlerbun:bundle feature flags

二、整体架构

┌─────────────────────────────────────────────────────┐
│                  entrypoints/cli.tsx                 │  ← 入口
├─────────────────────────────────────────────────────┤
│                     main.tsx                         │  ← CLI 参数解析 + 初始化
├─────────────────────────────────────────────────────┤
│                  screens/REPL.tsx                    │  ← 主交互界面React 组件)
├──────────┬──────────┬───────────┬───────────────────┤
│ query.ts │ tools.ts │commands.ts│  QueryEngine.ts   │  ← 核心调度层
├──────────┴──────────┴───────────┴───────────────────┤
│  services/api/claude.ts  │  services/mcp/client.ts  │  ← API 通信层
├──────────────────────────┴──────────────────────────┤
│         tools/  │  skills/  │  hooks/  │  tasks/     │  ← 功能实现层
├─────────────────────────────────────────────────────┤
│    utils/  │  state/  │  constants/  │  types/       │  ← 基础设施层
└─────────────────────────────────────────────────────┘

三、核心模块详解

3.1 入口与启动流程

文件: src/entrypoints/cli.tsx

启动经过精心优化的多阶段引导:

  1. 快速路径Fast Path: --version 直接输出版本号,零模块加载
  2. 特殊模式检查: --dump-system-prompt, --claude-in-chrome-mcp, --chrome-native-host
  3. 主路径: 动态导入 main.tsx,进入完整 CLI 初始化

文件: src/main.tsx4,683 行,最核心文件之一)

主函数负责:

  • 并行预取MDM 配置、Keychain 凭证、OAuth、GrowthBook 特性开关
  • Commander.js 命令行参数解析
  • 初始化分析analytics、策略限制policy limits、远程托管设置
  • 加载 MCP 服务器、工具列表、技能系统、插件系统
  • 启动 React/Ink 渲染 → REPL 组件

3.2 REPL 主界面

文件: src/screens/REPL.tsx5,005 行)

核心交互组件,包含:

  • 消息列表渲染(虚拟滚动)
  • 用户输入处理(含 Vim 模式)
  • 权限请求对话框
  • 成本追踪与显示
  • Agent/Teammate 管理
  • 会话持久化与恢复

3.3 查询引擎Query Loop

文件: src/query.ts — 单次对话轮次的核心循环 文件: src/QueryEngine.ts — 高级查询引擎SDK/非交互模式)

对话流程:

用户输入 → System Prompt 构建 → API 调用(streaming) → 解析响应
    ↓
  tool_use → 权限检查 → 工具执行 → 结果返回 → 继续 API 调用
    ↓
  end_turn → 展示结果给用户

关键机制:

  • Auto Compact: 上下文接近限制时自动压缩对话历史
  • Reactive Compact: 更智能的上下文折叠feature flag 控制)
  • Token Budget: 工具结果的 token 预算管理
  • Fingerprint: 消息去重与缓存优化

3.4 API 通信层

文件: src/services/api/claude.ts3,419 行)

  • 使用 Anthropic SDK 的 Beta Messages API(支持 streaming
  • 支持多 providerAnthropic 直连、AWS Bedrock、GCP Vertex
  • 处理 Betas 特性extended thinking、tool use 等)
  • 请求指纹计算(用于 prompt cache
  • 重试与错误处理策略

四、工具系统Tools

4.1 工具接口

文件: src/Tool.ts

核心类型 ToolUseContext 定义了工具执行的完整上下文,包括:

  • 可用工具列表、命令、MCP 客户端
  • AbortController 中断控制
  • AppState 读写
  • 文件状态缓存、权限上下文
  • Agent/子代理相关状态

4.2 工具注册

文件: src/tools.ts

所有工具在此文件中集中注册。支持条件加载(通过 bun:bundle feature flags

工具 功能
BashTool 执行 shell 命令
FileReadTool 读取文件
FileEditTool 编辑文件(精确替换)
FileWriteTool 写入文件
GlobTool 文件模式匹配搜索
GrepTool 内容正则搜索(基于 ripgrep
WebFetchTool 抓取网页内容
WebSearchTool 网页搜索
AgentTool 启动子代理
SendMessageTool 向子代理发送消息
NotebookEditTool 编辑 Jupyter Notebook
AskUserQuestionTool 向用户提问
EnterPlanModeTool 进入计划模式
ExitPlanModeTool 退出计划模式
EnterWorktreeTool 创建 Git Worktree
ExitWorktreeTool 退出 Git Worktree
TaskCreateTool 创建任务
TaskUpdateTool 更新任务
TaskGetTool 获取任务详情
TaskListTool 列出任务
TaskOutputTool 获取任务输出
TaskStopTool 停止任务
SkillTool 执行技能
TodoWriteTool 写入待办事项
LSPTool Language Server Protocol 交互
MCPTool 调用 MCP 工具
ToolSearchTool 搜索可用工具
ConfigTool 配置管理
BriefTool 简洁模式
ScheduleCronTool 定时任务CronCreate/Delete/List
ListMcpResourcesTool 列出 MCP 资源
ReadMcpResourceTool 读取 MCP 资源

内部/实验性工具feature flag 控制):

  • REPLTool — 仅内部用户
  • SleepTool — 主动等待
  • RemoteTriggerTool — 远程触发
  • MonitorTool — 监控工具
  • SendUserFileTool — 发送文件给用户KAIROS
  • PushNotificationTool — 推送通知
  • SubscribePRTool — PR 订阅
  • TeamCreateTool / TeamDeleteTool — 团队/多代理管理
  • TungstenTool — 内部工具

4.3 Bash 工具安全系统

文件: src/tools/BashTool/bashSecurity.ts2,592 行) 文件: src/tools/BashTool/bashPermissions.ts2,621 行)

Bash 工具有最复杂的安全系统:

  • 命令白名单/黑名单
  • 破坏性命令检测rm -rf, git push --force 等)
  • 沙箱模式
  • Bash AST 解析器(bashParser.ts 4,436 行)用于静态分析命令安全性

五、权限系统

5.1 权限模式

文件: src/types/permissions.ts

三种权限模式:

  • default: 默认模式,危险操作需要用户确认
  • plan: 计划模式,只读操作
  • bypass: 跳过权限检查(需用户明确启用)

5.2 权限规则

type ToolPermissionContext = {
  mode: PermissionMode
  alwaysAllowRules: ToolPermissionRulesBySource  // 始终允许
  alwaysDenyRules: ToolPermissionRulesBySource   // 始终拒绝
  alwaysAskRules: ToolPermissionRulesBySource    // 始终询问
  isBypassPermissionsModeAvailable: boolean
}

权限规则可在多个层级配置:

  • 全局设置 (~/.claude/settings.json)
  • 项目设置 (.claude/settings.json)
  • 命令行参数
  • 运行时用户选择

六、任务系统Tasks

文件: src/Task.ts

支持的任务类型:

类型 说明
local_bash 本地 Shell 后台命令
local_agent 本地子代理
remote_agent 远程代理
in_process_teammate 进程内协作者(多代理)
local_workflow 本地工作流
monitor_mcp MCP 监控
dream Dream 任务(后台推理)

任务状态机:pending → running → completed/failed/killed


七、MCP 集成

文件: src/services/mcp/client.ts3,348 行) 文件: src/services/mcp/auth.ts2,465 行)

MCP (Model Context Protocol) 深度集成:

  • 支持 stdio 和 SSE 传输
  • OAuth 2.0 认证流程
  • 工具、资源、提示的完整支持
  • 官方 MCP 服务器注册表(officialRegistry.ts
  • 连接生命周期管理(MCPConnectionManager.tsx
  • 通道权限控制(channelPermissions.ts

八、技能系统Skills

文件: src/skills/

技能是更高级的命令抽象:

  • bundled/ — 内置技能
  • loadSkillsDir.ts — 从目录加载自定义技能
  • mcpSkillBuilders.ts — 从 MCP 构建技能
  • 支持用户通过 /skill-name 快捷调用

九、UI 系统

9.1 Ink 终端渲染

文件: src/ink/96 个文件)

自定义的 Ink (React for CLI) 框架:

  • layout/ — 布局引擎(基于 Yoga layout
  • components/ — 基础 UI 组件
  • hooks/ — React hooks终端尺寸、焦点、搜索等
  • termio/ — 终端 I/O 和 DEC 控制序列
  • events/ — 事件系统

9.2 主要组件

文件: src/components/389 个文件)

关键组件包括:

  • PromptInput/ — 用户输入框支持多行、Vim 模式)
  • VirtualMessageList — 虚拟滚动消息列表
  • Spinner — 加载动画
  • permissions/ — 权限请求 UI
  • mcp/ — MCP 相关 UI
  • MessageSelector — 消息选择器
  • CostThresholdDialog — 成本阈值对话框

十、命令系统

文件: src/commands/207 个文件)

Slash 命令系统(用户通过 /command 触发):

分类 命令示例
Git /commit, /branch, /diff, /pr_comments, /review
会话 /resume, /session, /compact, /clear, /exit
配置 /config, /model, /theme, /permissions, /vim
工具 /mcp, /plugin, /skills, /hooks
调试 /doctor, /debug-tool-call, /cost, /stats, /perf-issue
AI 模式 /plan, /fast, /effort, /brief, /thinkback
协作 /agents, /tasks, /teleport, /remote-setup
其他 /memory, /export, /help, /feedback, /version

十一、服务层

文件: src/services/130 个文件)

服务 说明
api/ Anthropic API 通信claude.ts, bootstrap.ts, filesApi.ts
mcp/ MCP 协议客户端和服务器管理
oauth/ OAuth 2.0 认证
analytics/ 分析追踪GrowthBook 特性开关)
compact/ 对话压缩autoCompact, reactiveCompact
policyLimits/ 策略限制管理
remoteManagedSettings/ 远程托管设置
plugins/ 插件加载与管理
SessionMemory/ 会话记忆
tips/ 使用提示
lsp/ LSP 服务
tools/ 工具相关服务
extractMemories/ 自动记忆提取
voice/ 语音交互

十二、状态管理

文件: src/state/

  • AppState.tsx — 全局应用状态类型定义
  • AppStateStore.ts — 状态存储实现
  • store.ts — 状态存储工厂
  • selectors.ts — 状态选择器
  • onChangeAppState.ts — 状态变更监听

状态包含消息列表、任务状态、权限上下文、MCP 连接、成本追踪等。


十三、辅助系统

13.1 记忆系统

文件: src/memdir/8 个文件) 管理 MEMORY.md 和持久化记忆目录,跨会话保持上下文。

13.2 Vim 模式

文件: src/vim/5 个文件) 终端输入框支持 Vim 键绑定。

13.3 语音交互

文件: src/services/voice.ts, voiceStreamSTT.ts 语音输入支持STT

13.4 代理群集Agent Swarms

文件: src/utils/swarm/ 支持多代理协作leader/worker 权限同步、team 管理、沙箱权限请求。

13.5 插件系统

文件: src/services/plugins/, src/utils/plugins/

  • pluginLoader.ts3,302 行)— 插件加载器
  • marketplaceManager.ts2,643 行)— 插件市场管理
  • 支持内置插件和第三方插件

十四、Feature Flags 系统

通过 bun:bundlefeature() 函数实现编译时特性开关:

Flag 功能
ABLATION_BASELINE A/B 测试基线
DUMP_SYSTEM_PROMPT 导出系统提示
PROACTIVE 主动模式
KAIROS Assistant 模式
AGENT_TRIGGERS 定时任务
AGENT_TRIGGERS_REMOTE 远程触发
MONITOR_TOOL 监控工具
COORDINATOR_MODE 协调器模式
REACTIVE_COMPACT 响应式压缩
CONTEXT_COLLAPSE 上下文折叠
KAIROS_GITHUB_WEBHOOKS GitHub Webhook
KAIROS_PUSH_NOTIFICATION 推送通知

外部构建通过 DCEDead Code Elimination移除内部功能。


十五、关键文件索引

文件 行数 功能
cli/print.ts 5,594 非交互式输出/打印模式
utils/messages.ts 5,512 消息创建与处理
utils/sessionStorage.ts 5,105 会话持久化存储
utils/hooks.ts 5,022 Hooks 系统实现
screens/REPL.tsx 5,005 主 REPL 界面
main.tsx 4,683 主入口/初始化
utils/bash/bashParser.ts 4,436 Bash 命令解析器
utils/attachments.ts 3,997 附件处理
services/api/claude.ts 3,419 API 通信
services/mcp/client.ts 3,348 MCP 客户端
utils/plugins/pluginLoader.ts 3,302 插件加载器
commands/insights.ts 3,200 洞察命令
bridge/bridgeMain.ts 2,999 Bridge 主进程
utils/bash/ast.ts 2,679 Bash AST
tools/BashTool/bashPermissions.ts 2,621 Bash 权限
tools/BashTool/bashSecurity.ts 2,592 Bash 安全

十六、架构亮点

1. 启动性能优化

  • 多阶段懒加载:快速路径零导入,主路径并行预取
  • startupProfiler.ts 追踪每个启动阶段耗时
  • MDM、Keychain、OAuth 凭证并行预取

2. 安全设计

  • Bash 命令 AST 级静态分析
  • 多层权限控制(白名单、黑名单、始终询问)
  • 沙箱模式隔离
  • 破坏性操作自动检测与拦截

3. 多代理架构

  • 子代理AgentTool支持并发执行
  • 团队协作TeamCreate/TeamDelete
  • 进程内协作者InProcessTeammate
  • 远程代理RemoteAgent
  • Leader/Worker 权限同步

4. 上下文管理

  • Auto Compact 自动压缩历史
  • Reactive Compact 智能压缩
  • Context Collapse 上下文折叠
  • Token Budget 精细控制
  • 文件状态缓存 LRU

5. 可扩展性

  • 插件系统 + 插件市场
  • MCP 协议集成
  • 自定义技能
  • Hooks 系统
  • Feature Flags 编译时裁剪

十七、数据流图

User Input
    │
    ▼
┌─────────────┐     ┌──────────────┐
│ PromptInput │────▶│  REPL.tsx    │
└─────────────┘     └──────┬───────┘
                           │
                    ┌──────▼───────┐
                    │  query.ts    │ ◄── System Prompt (constants/prompts.ts)
                    │  (主循环)     │ ◄── Memory (memdir/)
                    └──────┬───────┘ ◄── CLAUDE.md
                           │
                    ┌──────▼───────┐
                    │ claude.ts    │ ── Anthropic Beta Messages API (streaming)
                    │ (API 调用)    │
                    └──────┬───────┘
                           │
              ┌────────────┼────────────┐
              ▼            ▼            ▼
         text_delta   tool_use    end_turn
              │            │            │
              ▼            ▼            ▼
         渲染文本     ┌─────────┐   返回结果
                     │权限检查  │
                     └────┬────┘
                          │
                     ┌────▼────┐
                     │工具执行  │ → BashTool / FileReadTool / AgentTool / ...
                     └────┬────┘
                          │
                     tool_result → 继续 API 调用(循环)

报告生成完毕。源代码已还原至 package/source/src/ 目录。