工具系统的核心入口是 src/tools.ts,抽象定义在 src/Tool.ts。
命令系统负责“用户怎么进入能力”,工具系统负责“模型真正能执行什么动作”。这也是 Claude Code 这类 agent 型 CLI 的核心层。
-
src/Tool.ts定义工具模型、权限上下文、工具执行上下文和工具查找机制。 -
src/tools.ts汇总所有基础工具,并按权限、环境、feature flag、模式进行筛选。 -
src/utils/toolPool.ts负责 REPL 路径中的工具合并、MCP 工具注入和 coordinator 模式过滤。 -
src/hooks/useMergedTools.ts在交互式 REPL 中组装最终工具池。
src/tools.ts 的逻辑可以概括为四步:
- 收集所有基础工具定义
- 根据 feature flag 和环境决定哪些工具可见
- 根据权限上下文做 blanket deny 过滤
- 在 REPL 里再与 MCP 工具池合并,形成最终可调用工具集合
也就是说,工具系统不是固定集合,而是一个“分阶段收缩和扩展”的工具池。
FileReadToolFileEditToolFileWriteToolGlobToolGrepToolNotebookEditTool
这类工具负责:
- 读取文件
- 修改文件
- 写入新文件
- 文件匹配
- 内容搜索
- Notebook 编辑
这是最核心的一组本地代码操作工具。
BashToolPowerShellToolTerminalCaptureTool(条件启用)REPLTool(特定环境启用)
这类工具负责:
- 执行系统命令
- 读取命令输出
- 捕获终端上下文
- 在特定模式下访问更底层的交互执行能力
这是风险最高、能力最强的一组工具。
WebFetchToolWebSearchToolWebBrowserTool(条件启用)
这类工具负责:
- 抓取网页内容
- 做搜索查询
- 在更高级模式下与浏览器能力联动
AgentToolTaskCreateToolTaskGetToolTaskUpdateToolTaskListToolTaskOutputToolTaskStopToolSendMessageToolTeamCreateToolTeamDeleteToolRemoteTriggerTool
这类工具负责:
- 创建子代理
- 管理任务对象
- 获取任务输出
- 停止任务
- 进行代理间通信
- 创建团队/协作结构
这是 Claude Code 从“单次问答工具”变成“任务型 agent 系统”的关键。
EnterPlanModeToolExitPlanModeV2ToolEnterWorktreeToolExitWorktreeToolSleepToolBriefToolSyntheticOutputTool
这类工具负责:
- 模式切换
- 工作树切换
- 计划模式控制
- brief 输出控制
- 睡眠/等待
- 结构化输出包装
ListMcpResourcesToolReadMcpResourceToolMCPToolMcpAuthTool
这类工具负责:
- 枚举 MCP 资源
- 读取 MCP 资源
- 对接 MCP 能力
- 处理 MCP 鉴权
SkillToolToolSearchToolConfigToolTodoWriteToolLSPToolTestingPermissionToolTungstenTool
这类工具负责:
- 技能调用
- 工具搜索
- 配置查看或修改
- TODO 写入
- LSP 集成
- 测试环境权限模拟
- 特定环境下的实验能力
| 工具 | 类别 | 默认/条件 | 核心能力 | 风险面 |
|---|---|---|---|---|
AgentTool |
代理协作 | 默认 | 生成或调用子代理 | 高 |
AskUserQuestionTool |
交互 | 默认 | 向用户发起补充提问 | 低 |
BashTool |
系统执行 | 默认 | 执行 shell 命令 | 高 |
BriefTool |
输出控制 | 默认 | 控制 brief 模式输出 | 低 |
ConfigTool |
配置 | 条件 | 配置读取与修改 | 中 |
EnterPlanModeTool |
模式控制 | 默认 | 进入计划模式 | 中 |
ExitPlanModeV2Tool |
模式控制 | 默认 | 退出计划模式 | 中 |
EnterWorktreeTool |
工作区控制 | 条件 | 进入 worktree 模式 | 中 |
ExitWorktreeTool |
工作区控制 | 条件 | 退出 worktree 模式 | 中 |
FileEditTool |
文件操作 | 默认 | 定点编辑现有文件 | 高 |
FileReadTool |
文件操作 | 默认 | 读取文件内容 | 中 |
FileWriteTool |
文件操作 | 默认 | 新建/覆盖文件 | 高 |
GlobTool |
搜索 | 默认 | 文件路径匹配 | 中 |
GrepTool |
搜索 | 默认 | 内容搜索 | 中 |
ListMcpResourcesTool |
MCP | 默认 | 列出 MCP 资源 | 中 |
LSPTool |
IDE/LSP | 条件 | 调用 LSP 信息 | 中 |
NotebookEditTool |
文件操作 | 默认 | 修改 notebook | 高 |
PowerShellTool |
系统执行 | 条件 | PowerShell 命令执行 | 高 |
ReadMcpResourceTool |
MCP | 默认 | 读取 MCP 资源 | 中 |
RemoteTriggerTool |
远程/调度 | 条件 | 触发远程任务 | 高 |
REPLTool |
终端控制 | 条件 | 特定环境下的 REPL 能力 | 高 |
ScheduleCronTool |
调度 | 条件 | 创建/列出/删除 cron 任务 | 高 |
SendMessageTool |
代理协作 | 条件 | 给代理/协作者发消息 | 中 |
SkillTool |
扩展能力 | 默认 | 调用技能系统 | 中 |
SleepTool |
模式控制 | 条件 | 等待/挂起型动作 | 低 |
SyntheticOutputTool |
输出包装 | 内部 | 结构化输出工具 | 低 |
TaskCreateTool |
任务 | 条件 | 创建任务 | 中 |
TaskGetTool |
任务 | 条件 | 获取任务详情 | 低 |
TaskListTool |
任务 | 条件 | 枚举任务 | 低 |
TaskOutputTool |
任务 | 默认 | 输出任务产物 | 中 |
TaskStopTool |
任务 | 默认 | 停止任务 | 中 |
TaskUpdateTool |
任务 | 条件 | 更新任务状态 | 中 |
TeamCreateTool |
多代理 | 条件 | 创建团队协作结构 | 中 |
TeamDeleteTool |
多代理 | 条件 | 删除团队结构 | 中 |
TodoWriteTool |
规划辅助 | 默认 | 写入 todo | 低 |
ToolSearchTool |
元能力 | 条件 | 在工具池里搜索工具 | 低 |
TungstenTool |
实验/内部 | 条件 | 特定环境实验能力 | 中 |
WebFetchTool |
Web | 默认 | 拉取网页内容 | 中 |
WebSearchTool |
Web | 默认 | 发起搜索查询 | 中 |
WebBrowserTool |
Web/浏览器 | 条件 | 浏览器级交互 | 高 |
tools.ts 中大量工具不是默认全开,而是受以下因素控制:
feature('...')process.env.USER_TYPEisTodoV2Enabled()isWorktreeModeEnabled()isAgentSwarmsEnabled()isPowerShellToolEnabled()isToolSearchEnabledOptimistic()
这说明:
- 工具系统是分发行形态和运行模式裁剪的
- 外部构建看到的工具集合,并不一定等于内部环境的工具集合
- 真正提供给模型的工具清单,是“环境相关结果”
在 main.tsx 中直接调用:
getTools(toolPermissionContext)
然后在 headless 模式下直接进入主流程。
在 screens/REPL.tsx 中:
- 先调用
getTools(toolPermissionContext)得到本地基础工具 - 再将本地工具与 MCP 工具集合并
- 通过
useMergedTools与mergeAndFilterTools做最终过滤 - 若主线程代理定义存在,再通过
resolveAgentTools进一步裁剪
因此 REPL 路径中的最终工具集,比 main.tsx 里的初始工具集更动态、更依赖运行态。
工具系统体现出几个非常明显的设计取向:
- 工具是第一等公民,不是命令的附属品
- 权限控制是工具池裁剪的一部分,而不是事后补丁
- 模式切换本身也被抽象成工具
- 多代理、任务、MCP、计划模式都建立在工具抽象之上
如果要继续深入工具系统,优先级最高的通常是:
src/tools/AgentTool/src/tools/BashTool/src/tools/FileEditTool/src/tools/PowerShellTool/src/tools/WebSearchTool/src/tools/ListMcpResourcesTool/src/tools/TaskCreateTool/src/tools/EnterPlanModeTool/