工具系统总览
工具系统是 Claude Code 的核心能力载体。每个工具都是一个自包含的能力单元,拥有独立的输入 Schema(Zod 定义)、权限规则和执行逻辑。Claude 模型通过 Anthropic API 的 Tool Use 机制调用这些工具。
工具架构
┌──────────────────────────────────────┐
│ Claude LLM 模型 │
│ (决定调用哪个工具,传入参数) │
├──────────────────────────────────────┤
│ 工具注册表 (tools.ts) │
│ (维护所有可用工具的列表和元数据) │
├──────────────────────────────────────┤
│ 权限系统 (Permission) │
│ (检查工具调用是否被允许) │
├──────────────────────────────────────┤
│ Schema 校验 (Zod v4) │
│ (校验 LLM 传入的参数是否合法) │
├──────────────────────────────────────┤
│ 工具执行器 (Tool Runner) │
│ (执行具体工具逻辑,返回结果) │
└──────────────────────────────────────┘
工具定义结构
每个工具遵循统一的接口定义(Tool.ts,792 行):
interface Tool {
name: string; // 工具名称
description: string; // 工具描述(给 LLM 看的)
inputSchema: ZodSchema; // 输入参数 Schema
isReadOnly?: boolean; // 是否为只读操作
isBuiltIn?: boolean; // 是否为内置工具
requiresPermission?: boolean; // 是否需要用户授权
execute(input: ToolInput): Promise<ToolResult>;
}
工具分类总览
| 类别 | 工具数 | 说明 |
|---|---|---|
| 文件操作 | 5 | 读、写、编辑、Notebook、目录操作 |
| 搜索分析 | 4 | Glob、Grep、WebSearch、WebFetch |
| Agent 编排 | 6 | 子 Agent、消息传递、团队、计划模式 |
| MCP 工具 | 3 | MCP 工具调用、资源读取 |
| 执行与自动化 | 5 | Bash、Cron、RemoteTrigger、Sleep |
| 任务管理 | 4 | 创建、更新、查询、停止任务 |
| 模式切换 | 4 | 计划模式、Worktree、用户提问 |
| 其他 | 12+ | Skill、Config、PowerShell 等 |
工具执行流程
1. LLM 决定调用工具
↓
2. 提取工具名称和参数
↓
3. 在注册表中查找工具
↓
4. Zod Schema 校验输入参数
↓
5. 权限系统检查(是否需要用户确认)
↓
6. 执行工具逻辑
↓
7. 返回结果给 LLM
↓
8. LLM 根据结果继续推理或输出
权限模式
工具调用支持多种权限模式:
| 模式 | 行为 |
|---|---|
default | 危险操作需要用户确认 |
plan | 只允许只读操作 |
bypassPermissions | 跳过所有权限检查 |
auto | 智能判断是否需要确认 |
acceptEdits | 自动接受文件编辑 |
dontAsk | 不询问,直接执行 |
工具注册
工具通过 tools.ts (354 行) 统一注册:
// 工具注册表
const allTools = [
BashTool,
FileReadTool,
FileWriteTool,
FileEditTool,
GlobTool,
GrepTool,
AgentTool,
MCPTool,
// ...更多工具
];
注册时会为每个工具生成:
- API 格式的工具描述(供 LLM 使用)
- 权限规则映射
- 输入/输出类型定义