Claude Code 源码分析Claude Code 源码分析
首页
源码统计
系统架构
UML 图表
工具系统
CodeGraph
首页
源码统计
系统架构
UML 图表
工具系统
CodeGraph
  • 概览

    • Claude Code 源码分析
    • 源码统计
    • CodeGraph 图谱
  • 架构

    • 系统架构
    • UML 图表索引
    • 查询引擎
    • 核心流程
    • 消息系统
    • 状态管理
  • 功能模块

    • 工具系统
    • 斜杠命令
    • 服务层
    • MCP 协议
    • Skills 技能
    • 子代理系统
  • 分层深度

    • 入口层
    • UI / Ink 层
    • utils 基础设施
    • 桥接 / 远程
    • 上下文压缩
  • 原理与安全

    • 底层原理
    • 技术难点
    • 权限与安全
    • 内部机制
    • 遥测与分析
  • 深度专题

    • Hooks 系统
    • 插件系统
    • 记忆系统
    • API 通信层
    • Ink 终端 UI
    • 认证系统
    • 构建与发布
    • 术语表
  • 调用分析

    • 调用链分析
    • 核心文件索引
  • 模块详解

    • utils

      • 模块: utils
      • messages · 消息工厂与规范化
      • session-storage · JSONL 会话持久化
      • permissions · 工具权限决策
      • shell-hooks · 用户 Shell Hook 系统
    • components

      • 模块: components
      • REPL · 主屏编排
      • messages · 消息行渲染
      • PermissionRequest · 权限弹窗
      • PromptInput · 底部输入
    • services

      • 模块: services
      • api-claude · Anthropic API 流式与重试
      • mcp-client · MCP 连接与工具调用
      • compact · 上下文压缩与自动触发
      • analytics · GrowthBook、Datadog 与 1P 事件
    • tools

      • 模块: tools
      • tool-interface · Tool 契约与注册表
      • bash-tool · Shell 执行与权限
      • streaming-executor · 流式工具并发调度
      • agent-tool · 子 Agent 委派
    • commands

      • 模块: commands
      • command-registry · commands.ts 注册与分派
      • model-command · /model 模型选择
      • mcp-commands · /mcp 服务器管理
      • compact-memory-commands · /compact 与 /memory
    • ink

      • 模块: ink
      • Ink 渲染管线 · Screen 与终端输出
      • 终端事件 · resize、paste、stdin
      • Ink Hooks · 输入、搜索、终端状态
      • Ink 组件 · Box、Text、ScrollBox 原语
    • hooks

      • 模块: hooks
      • useCanUseTool · 权限 UI 接缝
      • 输入与快捷键 Hook
      • 合并态 Hook(MCP + 本地)
      • notifs 通知 Hook
    • bridge

      • 模块: bridge
      • repl-bridge · REPL 桥初始化与传输
      • bridge-messaging · 桥消息路由与入站处理
      • remote-bridge-core · env-less 核心与守护主循环
      • bridge-permissions-ui · 权限、API 与 TUI
    • cli

      • 模块: cli
      • Structured IO · NDJSON SDK 协议
      • CLI Transports · Session Ingress 传输层
      • CLI Handlers · 子命令懒加载实现
      • Update & Upload · 自更新与串行上传原语
    • screens

      • 模块: screens
      • REPL 屏 · Screen 类型与顶层路由
      • ResumeConversation · 会话恢复选择器
      • Doctor · 安装诊断全屏
    • entrypoints

      • 模块: entrypoints
      • cli-entrypoint · Bootstrap 与快路径
      • sdk-types · core / control / runtime 类型体系
      • mcp-entrypoint · MCP stdio 服务器
      • sandbox-types · 沙箱配置单一真相源
    • skills

      • 模块: skills
      • skills-loading · 磁盘加载与 bundled 注册表
      • bundled-skills · 内置 skill 与 initBundledSkills
      • mcp-skills · MCP prompt 转 skill
      • skill-tool-integration · SkillTool 与命令注册
    • types

      • 模块: types
      • message-types · Message 联合与 content blocks
      • tool-permission-types · Tool、Permission、Command 类型
      • api-sdk-types · API 与 Hooks 协议类型
      • misc-types · ids、plugin、generated 与其余类型
    • tasks

      • 模块: tasks
      • local-agent-task · 本地 Agent 与主会话后台化
      • remote-agent-task · 远程 CCR 与 In-Process Teammate
      • shell-workflow-tasks · Bash 后台、Workflow 与 stopTask
      • dream-monitor-tasks · Dream、Monitor MCP 与 pill 文案
    • keybindings

      • 模块: keybindings
      • keybinding-registry · 注册、Provider 与 useKeybinding
      • default-bindings · 默认键位表与平台差异
      • command-bindings · command:* 动态斜杠命令绑定
      • vim-bindings · Vim 模式与 keybindings 边界
    • memdir

      • 模块: memdir
      • memdir-core · 路径、加载与 MEMORY.md
      • memory-extraction · extractMemories 与 SessionMemory
      • memdir-commands · /memory、/remember 与命令集成
    • state

      • 模块: state
      • app-state-core · store、AppState 类型与 Provider
      • app-state-selectors · selectors 与 onChangeAppState
      • teammate-state · 队友视图与 swarm 状态
      • state-boundaries · bootstrap、sessionStorage、FileStateCache
    • query

      • 模块: query
      • query config 与 deps · 配置快照与依赖注入
      • query tokenBudget · +500k 自动续跑
      • query transitions · Continue / Terminal 状态机
      • query stopHooks · Stop 事件与 turn 结束编排
  • 模块详解(扩展)

    • messages · 消息工厂与规范化
    • session-storage · JSONL 会话持久化
    • permissions · 工具权限决策
    • shell-hooks · 用户 Shell Hook 系统
    • REPL · 主屏编排
    • messages · 消息行渲染
    • PermissionRequest · 权限弹窗
    • PromptInput · 底部输入
    • api-claude · Anthropic API 流式与重试
    • mcp-client · MCP 连接与工具调用
    • compact · 上下文压缩与自动触发
    • analytics · GrowthBook、Datadog 与 1P 事件
    • tool-interface · Tool 契约与注册表
    • bash-tool · Shell 执行与权限
    • streaming-executor · 流式工具并发调度
    • agent-tool · 子 Agent 委派
    • command-registry · commands.ts 注册与分派
    • model-command · /model 模型选择
    • mcp-commands · /mcp 服务器管理
    • compact-memory-commands · /compact 与 /memory
    • Ink 渲染管线 · Screen 与终端输出
    • 终端事件 · resize、paste、stdin
    • Ink Hooks · 输入、搜索、终端状态
    • Ink 组件 · Box、Text、ScrollBox 原语
    • useCanUseTool · 权限 UI 接缝
    • 输入与快捷键 Hook
    • 合并态 Hook(MCP + 本地)
    • notifs 通知 Hook
    • repl-bridge · REPL 桥初始化与传输
    • bridge-messaging · 桥消息路由与入站处理
    • remote-bridge-core · env-less 核心与守护主循环
    • bridge-permissions-ui · 权限、API 与 TUI
    • Structured IO · NDJSON SDK 协议
    • CLI Transports · Session Ingress 传输层
    • CLI Handlers · 子命令懒加载实现
    • Update & Upload · 自更新与串行上传原语
    • REPL 屏 · Screen 类型与顶层路由
    • ResumeConversation · 会话恢复选择器
    • Doctor · 安装诊断全屏
    • cli-entrypoint · Bootstrap 与快路径
    • sdk-types · core / control / runtime 类型体系
    • mcp-entrypoint · MCP stdio 服务器
    • sandbox-types · 沙箱配置单一真相源
    • skills-loading · 磁盘加载与 bundled 注册表
    • bundled-skills · 内置 skill 与 initBundledSkills
    • mcp-skills · MCP prompt 转 skill
    • skill-tool-integration · SkillTool 与命令注册
    • message-types · Message 联合与 content blocks
    • tool-permission-types · Tool、Permission、Command 类型
    • api-sdk-types · API 与 Hooks 协议类型
    • misc-types · ids、plugin、generated 与其余类型
    • local-agent-task · 本地 Agent 与主会话后台化
    • remote-agent-task · 远程 CCR 与 In-Process Teammate
    • shell-workflow-tasks · Bash 后台、Workflow 与 stopTask
    • dream-monitor-tasks · Dream、Monitor MCP 与 pill 文案
    • keybinding-registry · 注册、Provider 与 useKeybinding
    • default-bindings · 默认键位表与平台差异
    • command-bindings · command:* 动态斜杠命令绑定
    • vim-bindings · Vim 模式与 keybindings 边界
    • memdir-core · 路径、加载与 MEMORY.md
    • memory-extraction · extractMemories 与 SessionMemory
    • memdir-commands · /memory、/remember 与命令集成
    • app-state-core · store、AppState 类型与 Provider
    • app-state-selectors · selectors 与 onChangeAppState
    • teammate-state · 队友视图与 swarm 状态
    • state-boundaries · bootstrap、sessionStorage、FileStateCache
    • query config 与 deps · 配置快照与依赖注入
    • query tokenBudget · +500k 自动续跑
    • query transitions · Continue / Terminal 状态机
    • query stopHooks · Stop 事件与 turn 结束编排
  • 工具详解

    • tool-interface · Tool 契约与注册表
    • tool-permission-types · Tool、Permission、Command 类型
    • 工具: Bash
    • 工具: PowerShell
    • 工具: Agent
    • 工具: LSP
    • 工具: FileEdit
    • 工具: FileRead
    • 工具: Skill
    • 工具: WebFetch
    • 工具: MCP
    • 工具: SendMessage
    • 工具: FileWrite
    • 工具: Config
    • 工具: Grep
    • 工具: Brief
    • 工具: ExitPlanMode
    • 工具: ToolSearch
    • 工具: NotebookEdit
    • 工具: TaskOutput
    • 工具: WebSearch
    • 工具: ScheduleCron

本章总览

工具系统是 Agent 的双手:51 个内置工具 + MCP 动态工具,统一实现 Tool 接口。本章教你看工具分类、并发规则、注册表如何组装 prompt。

总览图

渲染图表中…

学完本章你应该能

  • 理解 Tool 接口各字段含义
  • 按类别记忆主要工具(文件/Shell/Web/Agent)
  • 知道 concurrency-safe 与 exclusive 的差异

核心概念(先读懂这些)

tool_use 是 Claude API 的扩展点

模型输出 tool_use block → 运行时找同名 Tool → call() → 结果以 tool_result 回传。Claude Code 的价值很大程度在「默认工具集」的质量与权限设计。

为什么 Bash 和 Read 并发策略不同

Read/Grep 无副作用可并行;Bash/Edit 可能改系统状态,必须独占或串行。StreamingToolExecutor 用 isConcurrencySafe() 分流队列。

建议学习步骤

  1. 浏览分类表
  2. 选一个工具进 tool-* 详解页
  3. 对照 Tool.ts 接口定义

Tool 生命周期(类图)

渲染图表中…

工具池组装流程

渲染图表中…

工具分类(思维导图式)

渲染图表中…

概览

共 51 个工具目录。工具通过 Tool.ts 接口统一,tools.ts 的 getAllBaseTools() 按 feature flag 组装。

文件操作

工具目录文件行数
FileEdittools/FileEditTool61,818
FileReadtools/FileReadTool51,607
FileWritetools/FileWriteTool3859
Greptools/GrepTool3798
NotebookEdittools/NotebookEditTool4591
Globtools/GlobTool3270

Shell

工具目录文件行数
Bashtools/BashTool1812,429
PowerShelltools/PowerShellTool148,973
TerminalCapturetools/TerminalCaptureTool12

Agent/任务

工具目录文件行数
Agenttools/AgentTool206,802
TaskOutputtools/TaskOutputTool2586
TaskUpdatetools/TaskUpdateTool3487
TodoWritetools/TodoWriteTool3303
TaskCreatetools/TaskCreateTool3198
TaskStoptools/TaskStopTool3182
TaskListtools/TaskListTool3169
TaskGettools/TaskGetTool3156

Web

工具目录文件行数
WebFetchtools/WebFetchTool51,136
WebSearchtools/WebSearchTool3572
WebBrowsertools/WebBrowserTool14

计划模式

工具目录文件行数
ExitPlanModetools/ExitPlanModeTool4609
EnterPlanModetools/EnterPlanModeTool4333
VerifyPlanExecutiontools/VerifyPlanExecutionTool12

MCP

工具目录文件行数
MCPtools/MCPTool41,090
ToolSearchtools/ToolSearchTool3596
ReadMcpResourcetools/ReadMcpResourceTool3213
ListMcpResourcestools/ListMcpResourcesTool3174

Skill

工具目录文件行数
Skilltools/SkillTool41,481
DiscoverSkillstools/DiscoverSkillsTool12

Worktree

工具目录文件行数
ExitWorktreetools/ExitWorktreeTool4390
EnterWorktreetools/EnterWorktreeTool4181

Team/Swarm

工具目录文件行数
SendMessagetools/SendMessageTool41,001
TeamCreatetools/TeamCreateTool4363
TeamDeletetools/TeamDeleteTool4179

交互

工具目录文件行数
Configtools/ConfigTool5814
Brieftools/BriefTool5615
AskUserQuestiontools/AskUserQuestionTool2311

Tool 接口

interface Tool {
  name: string
  inputSchema: ToolInputJSONSchema
  call(input, context): Promise<ToolResult>
  isConcurrencySafe(): boolean
  isEnabled(): boolean
  permissionType: PermissionType
}

工具注册流程

getTools(permissionContext)
  → getAllBaseTools()        // 51 基础工具
  → filterToolsByDenyRules() // 权限 deny 过滤
  → assembleToolPool()       // 合并 MCP 工具
  → getMergedTools()         // 最终工具池

完整工具列表

#工具行数文件
1Bash12,42918
2PowerShell8,97314
3Agent6,80220
4LSP2,0116
5FileEdit1,8186
6FileRead1,6075
7Skill1,4814
8WebFetch1,1365
9MCP1,0904
10SendMessage1,0014
11FileWrite8593
12Config8145
13Grep7983
14Brief6155
15ExitPlanMode6094
16ToolSearch5963
17NotebookEdit5914
18TaskOutput5862
19WebSearch5723
20ScheduleCron5485
21TaskUpdate4873
22ExitWorktree3904
23TeamCreate3634
24EnterPlanMode3334
25AskUserQuestion3112
26TodoWrite3033
27Glob2703
28McpAuth2161
29ReadMcpResource2133
30TaskCreate1983
31RemoteTrigger1953
32TaskStop1823
33EnterWorktree1814
34TeamDelete1794
35ListMcpResources1743
36TaskList1693
37SyntheticOutput1641
38TaskGet1563
39REPL872
40Tungsten552
41Sleep181
42Workflow124
43WebBrowser41
44DiscoverSkills21
45Monitor21
46OverflowTest21
47ReviewArtifact21
48SendUserFile21
49Snip21
50TerminalCapture21
51VerifyPlanExecution21

Top 10 工具详解

  • Bash — 12,429 行 · Builds a command segment, stripping output redirections to avoid
  • PowerShell — 8,973 行 · PowerShell Constrained Language Mode allowed types.
  • Agent — 6,802 行 · 核心 Agent 工具
  • LSP — 2,011 行 · Formats a URI by converting it to a relative path if possible.
  • FileEdit — 1,818 行 · 核心 Agent 工具
  • FileRead — 1,607 行 · Resolves macOS screenshot paths that may have different space characters.
  • Skill — 1,481 行 · 核心 Agent 工具
  • WebFetch — 1,136 行 · 核心 Agent 工具
  • MCP — 1,090 行 · Classify an MCP tool as a search/read operation for UI collapsing.
  • SendMessage — 1,001 行 · 核心 Agent 工具

本章小结与延伸

工具 = 名称 + schema + call + 权限。加新能力就是加新 Tool。 继续学习:

  • 工具: Bash
  • MCP 协议
Next
斜杠命令