工具检索:几十把工具,按需取用
Claude Code 有 40 个内置工具(src/tools/ 目录下一一对应),按功能分组如下:
| 分组 | 工具 | 说明 |
|---|---|---|
| 文件操作 | FileReadTool、FileWriteTool、FileEditTool | 读、写、改文件 |
| 代码搜索 | GlobTool、GrepTool | 文件名匹配、内容搜索 |
| 命令执行 | BashTool、PowerShellTool | 执行 Shell 命令(跨平台) |
| Agent 协作 | AgentTool、SendMessageTool、TeamCreateTool、TeamDeleteTool | 启动子 Agent、团队协作 |
| 任务管理 | TaskCreateTool、TaskGetTool、TaskListTool、TaskOutputTool、TaskStopTool、TaskUpdateTool | 后台任务的全生命周期管理 |
| 计划模式 | EnterPlanModeTool、ExitPlanModeTool | 只规划、不执行 |
| 沙箱隔离 | EnterWorktreeTool、ExitWorktreeTool | 进入 / 退出 git worktree 隔离环境 |
| MCP 协议 | MCPTool、McpAuthTool、ListMcpResourcesTool、ReadMcpResourceTool | 连接外部 MCP 服务器及其资源 |
| 网络能力 | WebFetchTool、WebSearchTool | 抓取网页、搜索引擎查询 |
| Notebook | NotebookEditTool | 编辑 Jupyter Notebook |
| 开发辅助 | REPLTool、LSPTool、ToolSearchTool、SkillTool | 批量工具调用、语言服务、工具搜索、技能加载 |
| 交互与配置 | AskUserQuestionTool、ConfigTool、TodoWriteTool | 向用户提问、读写配置、任务清单 |
| 调度与触发 | ScheduleCronTool、RemoteTriggerTool、SleepTool | 定时任务、远程触发、等待 |
| 内部工具 | BriefTool、SyntheticOutputTool | 内部摘要生成、合成输出(不对外暴露) |
全部在第一轮就塞进 Claude 的上下文,会浪费 token。shouldDefer 和 alwaysLoad 解决了这个问题:
// src/Tool.ts
readonly shouldDefer?: boolean
// 当 true 时:工具只发送名称,不发送完整参数 schema
// Claude 需要先调用 ToolSearch 才能获取完整定义,再调用该工具
readonly alwaysLoad?: boolean
// 当 true 时:即使整体开启了延迟加载,这个工具也始终包含完整 schema
// 适合 Claude 在第一轮就需要的工具(如 ToolSearch 本身)
这套机制实现了"按需加载":常用工具(Bash、FileEdit)始终加载,冷门工具(如 CronCreate)先隐藏,Claude 用 ToolSearch 描述关键词后才拿到完整定义。