工具系统是 Agent 的双手:51 个内置工具 + MCP 动态工具,统一实现 Tool 接口。本章教你看工具分类、并发规则、注册表如何组装 prompt。
学完本章你应该能
- 理解 Tool 接口各字段含义
- 按类别记忆主要工具(文件/Shell/Web/Agent)
- 知道 concurrency-safe 与 exclusive 的差异
模型输出 tool_use block → 运行时找同名 Tool → call() → 结果以 tool_result 回传。Claude Code 的价值很大程度在「默认工具集」的质量与权限设计。
Read/Grep 无副作用可并行;Bash/Edit 可能改系统状态,必须独占或串行。StreamingToolExecutor 用 isConcurrencySafe() 分流队列。
- 浏览分类表
- 选一个工具进 tool-* 详解页
- 对照 Tool.ts 接口定义
共 51 个工具目录。工具通过 Tool.ts 接口统一,tools.ts 的 getAllBaseTools() 按 feature flag 组装。
| 工具 | 目录 | 文件 | 行数 |
|---|
FileEdit | tools/FileEditTool | 6 | 1,818 |
FileRead | tools/FileReadTool | 5 | 1,607 |
FileWrite | tools/FileWriteTool | 3 | 859 |
Grep | tools/GrepTool | 3 | 798 |
NotebookEdit | tools/NotebookEditTool | 4 | 591 |
Glob | tools/GlobTool | 3 | 270 |
| 工具 | 目录 | 文件 | 行数 |
|---|
Bash | tools/BashTool | 18 | 12,429 |
PowerShell | tools/PowerShellTool | 14 | 8,973 |
TerminalCapture | tools/TerminalCaptureTool | 1 | 2 |
| 工具 | 目录 | 文件 | 行数 |
|---|
Agent | tools/AgentTool | 20 | 6,802 |
TaskOutput | tools/TaskOutputTool | 2 | 586 |
TaskUpdate | tools/TaskUpdateTool | 3 | 487 |
TodoWrite | tools/TodoWriteTool | 3 | 303 |
TaskCreate | tools/TaskCreateTool | 3 | 198 |
TaskStop | tools/TaskStopTool | 3 | 182 |
TaskList | tools/TaskListTool | 3 | 169 |
TaskGet | tools/TaskGetTool | 3 | 156 |
| 工具 | 目录 | 文件 | 行数 |
|---|
WebFetch | tools/WebFetchTool | 5 | 1,136 |
WebSearch | tools/WebSearchTool | 3 | 572 |
WebBrowser | tools/WebBrowserTool | 1 | 4 |
| 工具 | 目录 | 文件 | 行数 |
|---|
ExitPlanMode | tools/ExitPlanModeTool | 4 | 609 |
EnterPlanMode | tools/EnterPlanModeTool | 4 | 333 |
VerifyPlanExecution | tools/VerifyPlanExecutionTool | 1 | 2 |
| 工具 | 目录 | 文件 | 行数 |
|---|
MCP | tools/MCPTool | 4 | 1,090 |
ToolSearch | tools/ToolSearchTool | 3 | 596 |
ReadMcpResource | tools/ReadMcpResourceTool | 3 | 213 |
ListMcpResources | tools/ListMcpResourcesTool | 3 | 174 |
| 工具 | 目录 | 文件 | 行数 |
|---|
Skill | tools/SkillTool | 4 | 1,481 |
DiscoverSkills | tools/DiscoverSkillsTool | 1 | 2 |
| 工具 | 目录 | 文件 | 行数 |
|---|
ExitWorktree | tools/ExitWorktreeTool | 4 | 390 |
EnterWorktree | tools/EnterWorktreeTool | 4 | 181 |
| 工具 | 目录 | 文件 | 行数 |
|---|
SendMessage | tools/SendMessageTool | 4 | 1,001 |
TeamCreate | tools/TeamCreateTool | 4 | 363 |
TeamDelete | tools/TeamDeleteTool | 4 | 179 |
| 工具 | 目录 | 文件 | 行数 |
|---|
Config | tools/ConfigTool | 5 | 814 |
Brief | tools/BriefTool | 5 | 615 |
AskUserQuestion | tools/AskUserQuestionTool | 2 | 311 |
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() // 最终工具池
| # | 工具 | 行数 | 文件 |
|---|
| 1 | Bash | 12,429 | 18 |
| 2 | PowerShell | 8,973 | 14 |
| 3 | Agent | 6,802 | 20 |
| 4 | LSP | 2,011 | 6 |
| 5 | FileEdit | 1,818 | 6 |
| 6 | FileRead | 1,607 | 5 |
| 7 | Skill | 1,481 | 4 |
| 8 | WebFetch | 1,136 | 5 |
| 9 | MCP | 1,090 | 4 |
| 10 | SendMessage | 1,001 | 4 |
| 11 | FileWrite | 859 | 3 |
| 12 | Config | 814 | 5 |
| 13 | Grep | 798 | 3 |
| 14 | Brief | 615 | 5 |
| 15 | ExitPlanMode | 609 | 4 |
| 16 | ToolSearch | 596 | 3 |
| 17 | NotebookEdit | 591 | 4 |
| 18 | TaskOutput | 586 | 2 |
| 19 | WebSearch | 572 | 3 |
| 20 | ScheduleCron | 548 | 5 |
| 21 | TaskUpdate | 487 | 3 |
| 22 | ExitWorktree | 390 | 4 |
| 23 | TeamCreate | 363 | 4 |
| 24 | EnterPlanMode | 333 | 4 |
| 25 | AskUserQuestion | 311 | 2 |
| 26 | TodoWrite | 303 | 3 |
| 27 | Glob | 270 | 3 |
| 28 | McpAuth | 216 | 1 |
| 29 | ReadMcpResource | 213 | 3 |
| 30 | TaskCreate | 198 | 3 |
| 31 | RemoteTrigger | 195 | 3 |
| 32 | TaskStop | 182 | 3 |
| 33 | EnterWorktree | 181 | 4 |
| 34 | TeamDelete | 179 | 4 |
| 35 | ListMcpResources | 174 | 3 |
| 36 | TaskList | 169 | 3 |
| 37 | SyntheticOutput | 164 | 1 |
| 38 | TaskGet | 156 | 3 |
| 39 | REPL | 87 | 2 |
| 40 | Tungsten | 55 | 2 |
| 41 | Sleep | 18 | 1 |
| 42 | Workflow | 12 | 4 |
| 43 | WebBrowser | 4 | 1 |
| 44 | DiscoverSkills | 2 | 1 |
| 45 | Monitor | 2 | 1 |
| 46 | OverflowTest | 2 | 1 |
| 47 | ReviewArtifact | 2 | 1 |
| 48 | SendUserFile | 2 | 1 |
| 49 | Snip | 2 | 1 |
| 50 | TerminalCapture | 2 | 1 |
| 51 | VerifyPlanExecution | 2 | 1 |
Bash — 12,429 行 · Builds a command segment, stripping output redirections to avoidPowerShell — 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。 继续学习: