Chapter 03
工具系统
Claude Code 拥有 54 个内置工具,每个工具都有独立的目录、输入 Schema、执行逻辑和可选的 React 渲染组件。
工具系统概览
Tool 接口定义
每个工具都实现 Tool 接口(src/Tool.ts):
interface Tool { name: string // 唯一标识 (如 "Bash", "Read") searchHint: string // 工具搜索描述 description: string // 发送给模型的工具描述 inputSchema: JSONSchema // Zod 验证的 JSON Schema call(input, context): ToolResult // 执行逻辑 userFacingName(): string // UI 显示名称 getToolUseSummary(): string // 活动描述 isReadOnly(): boolean // 只读操作? isConcurrencySafe(): boolean // 线程安全? isEnabled(): boolean // 运行时启用/禁用 shouldDefer: boolean // 延迟加载 (ToolSearch) maxResultSizeChars: number // 结果截断阈值 (~100,000) // 可选:React 渲染组件 renderResult?(result): JSX.Element }
工具注册 & 条件加载
工具在 src/tools.ts 中注册,部分工具根据 feature flag 或环境条件有选择地加载:
// src/tools.ts — 工具组装 function assembleToolPool(): Tool[] { const tools = [ // 始终可用 AgentTool, BashTool, FileReadTool, FileEditTool, FileWriteTool, WebFetchTool, WebSearchTool, SkillTool, AskUserQuestionTool, ... // 条件加载 ...(!hasEmbeddedSearchTools() ? [GlobTool, GrepTool] : []), ...(feature('AGENT_TRIGGERS') ? [CronCreateTool, ...] : []), ...(USER_TYPE === 'ant' ? [ConfigTool, REPLTool] : []), ...(isTodoV2Enabled() ? [TaskCreateTool, ...] : [TodoWriteTool]), ]; return tools; }
完整工具目录
| 工具名称 | 分类 | 描述 | 关键参数 |
|---|---|---|---|
| FileReadTool | 文件 | 读取文件内容,支持 PDF、图片、Jupyter Notebook | file_path, limit, offset, pages |
| FileEditTool | 文件 | 字符串替换编辑文件,保留缩进和引号风格 | file_path, old_string, new_string, replace_all |
| FileWriteTool | 文件 | 创建或完整覆盖文件 | file_path, content |
| NotebookEditTool | 文件 | 编辑 Jupyter Notebook 单元格 | notebook_path, cell_id, new_source, edit_mode |
| GlobTool | 搜索 | 文件名模式匹配,支持 glob 通配符 | pattern, path |
| GrepTool | 搜索 | 基于 ripgrep 的文件内容正则搜索 | pattern, path, glob, output_mode, -A/-B/-C |
| LSPTool | 搜索 | Language Server Protocol 操作 (定义跳转、引用查找等) | operation, filePath, line, character |
| ToolSearchTool | 搜索 | 搜索延迟加载的工具 | query, max_results |
| BashTool | Shell | 执行 Bash 命令,支持后台运行、超时控制 | command, timeout_ms, continue_on_error |
| PowerShellTool | Shell | Windows PowerShell 命令执行 | command, timeout_ms |
| WebFetchTool | Web | 抓取 URL 内容并用 AI 处理,HTML 转 Markdown | url, prompt |
| WebSearchTool | Web | 执行网络搜索,返回结构化结果 | query, allowed_domains, blocked_domains |
| AgentTool | Agent | 生成专用子 Agent 处理复杂任务 | prompt, description, subagent_type, model, isolation |
| SkillTool | Agent | 执行技能/命令 (如 /commit, /review-pr) | skill, args |
| SendMessageTool | Agent | 向队友或广播发送消息 | to, message, summary |
| TeamCreateTool | Agent | 创建多 Agent 协作团队 | team_name, description, agent_type |
| EnterPlanModeTool | Agent | 进入计划模式,规划复杂任务 | (无参数) |
| ExitPlanModeTool | Agent | 退出计划模式并执行 | allowed_prompts, plan_overrides |
| TaskCreateTool | 任务 | 创建任务 | subject, description, activeForm, metadata |
| TaskListTool | 任务 | 列出所有任务及状态 | (无参数) |
| TaskUpdateTool | 任务 | 更新任务状态和依赖关系 | taskId, status, addBlocks, addBlockedBy |
| TaskOutputTool | 任务 | 获取任务输出(支持阻塞等待) | task_id, block, timeout |
| TaskStopTool | 任务 | 终止后台运行的任务 | task_id |
| ListMcpResourcesTool | MCP | 列出 MCP Server 可用资源 | server |
| ReadMcpResourceTool | MCP | 读取 MCP 资源内容 | server, uri |
| MCPTool | MCP | MCP 工具代理(透传执行 MCP 工具) | (透传 MCP 工具的 schema) |
| AskUserQuestionTool | 交互 | 向用户提问(支持多选、预览) | questions, answers, annotations |
| BriefTool | 交互 | 向用户发送消息(支持附件) | message, attachments, status |
| EnterWorktreeTool | 隔离 | 创建 Git Worktree 隔离环境 | name |
| ExitWorktreeTool | 隔离 | 退出 Worktree 会话 | action (keep/remove), discard_changes |
| CronCreateTool | 调度 | 创建定时任务(cron 表达式) | cron, prompt, recurring, durable |
| RemoteTriggerTool | 调度 | 管理远程 Agent 触发器 | action, trigger_id, body |
| SleepTool | Agent | 暂停执行指定时间 | duration_ms |
| MonitorTool | Agent | 系统监控和进程检查 | (feature-gated) |
| WebBrowserTool | Web | 浏览器自动化导航 | (feature-gated) |
| ConfigTool | 配置 | 读取/设置 Claude Code 配置 | setting, value |
| REPLTool | Shell | 交互式 REPL 环境 | (ant-only) |
| TodoWriteTool | 任务 | Legacy 任务清单管理 | todos (array) |
| TeamDeleteTool | Agent | 删除多 Agent 协作团队 | team_name |
| DiscoverSkillsTool | Agent | 发现可用技能/命令 | (无参数) |
| ReviewArtifactTool | Agent | 审查生成的产物 | (artifact info) |
| VerifyPlanExecutionTool | Agent | 验证计划执行完成度 | (env-gated) |
| WorkflowTool | Agent | 执行工作流脚本 | (feature-gated) |
| SnipTool | 交互 | 剪切/管理对话历史 | (feature-gated) |
| TerminalCaptureTool | Shell | 捕获终端输出 | (feature-gated) |
| PushNotificationTool | 通知 | 发送推送通知 | (KAIROS feature-gated) |
| TestingPermissionTool | 测试 | 测试环境权限工具 | (NODE_ENV=test only) |
条件加载矩阵
工具的加载受多种条件控制:
| 条件类型 | 工具 | 说明 |
|---|---|---|
| 始终可用 | BashTool, FileReadTool, FileEditTool, FileWriteTool, AgentTool, WebFetchTool, WebSearchTool, SkillTool | 核心工具,无条件加载 |
| Feature Flag | CronTool, SleepTool, MonitorTool, WebBrowserTool, TerminalCaptureTool | 由 feature() 控制,当前全部禁用 |
| 用户类型 | ConfigTool, REPLTool, TungstenTool, SuggestBackgroundPRTool | 仅 Anthropic 内部员工 (USER_TYPE === 'ant') |
| 运行时检查 | TaskCreateTool, GlobTool, GrepTool, LSPTool, WorktreeTool | 取决于运行时配置和环境变量 |
| 平台限制 | PowerShellTool | 仅 Windows 平台 |