# 工具系统分析 ## 架构概述 工具系统是 Claude Code 的核心能力层,定义了 Agent 可以执行的所有操作。每个工具是一个自包含模块,包含输入 Schema、权限模型和执行逻辑。 ```mermaid classDiagram class Tool { +string name +string description +ToolInputJSONSchema inputSchema +isEnabled() boolean +getDescription() string +getPrompt() string +execute(input, context) ToolResult +validateInput(input) ValidationResult } class BashTool { +name = "Bash" +execute() 运行 Shell 命令 +沙盒支持 +安全验证 } class FileReadTool { +name = "Read" +支持图片/PDF/Notebook +行号范围读取 } class FileWriteTool { +name = "Write" +完整文件写入 +读取前置检查 } class FileEditTool { +name = "Edit" +字符串替换编辑 +replace_all 模式 } class GlobTool { +name = "Glob" +文件模式匹配 +基于 ripgrep } class GrepTool { +name = "Grep" +内容正则搜索 +ripgrep 集成 } class AgentTool { +name = "Agent" +子代理生成 +worktree 隔离 +代理类型选择 } class MCPTool { +MCP 服务器工具调用 } class LSPTool { +LSP 操作 +goToDefinition 等 } class WebFetchTool { +URL 内容获取 } class WebSearchTool { +Web 搜索 } Tool <|-- BashTool Tool <|-- FileReadTool Tool <|-- FileWriteTool Tool <|-- FileEditTool Tool <|-- GlobTool Tool <|-- GrepTool Tool <|-- AgentTool Tool <|-- MCPTool Tool <|-- LSPTool Tool <|-- WebFetchTool Tool <|-- WebSearchTool ``` ## 工具注册机制 工具注册在 `src/tools.ts` 中,通过 `getAllBaseTools()` 函数集中管理: ```mermaid flowchart TD A[getAllBaseTools] --> B{环境判断} B -->|默认| C[核心工具集] B -->|USER_TYPE=ant| D[内部工具集] B -->|feature flag| E[特性开关工具] C --> F[AgentTool, BashTool, FileReadTool, FileEditTool, FileWriteTool, GlobTool, GrepTool, NotebookEditTool, WebFetchTool, WebSearchTool, AskUserQuestionTool, SkillTool, BriefTool, TaskStopTool, TodoWriteTool, ExitPlanModeV2Tool, ListMcpResourcesTool, ReadMcpResourceTool] D --> G[ConfigTool, TungstenTool, REPLTool, SuggestBackgroundPRTool] E --> H[SleepTool PROACTIVE/KAIROS] E --> I[CronCreateTool/CronDeleteTool/CronListTool AGENT_TRIGGERS] E --> J[RemoteTriggerTool AGENT_TRIGGERS_REMOTE] E --> K[EnterWorktreeTool/ExitWorktreeTool] E --> L[TeamCreateTool/TeamDeleteTool] E --> M[SendMessageTool] E --> N[ToolSearchTool] E --> O[WorkflowTool WORKFLOW_SCRIPTS] E --> P[WebBrowserTool WEB_BROWSER_TOOL] E --> Q[MonitorTool MONITOR_TOOL] E --> R[PowerShellTool] ``` ## 工具分类 ### 文件操作类 | 工具 | 名称 | 功能 | |------|------|------| | FileReadTool | Read | 读取文件(支持图片、PDF、Jupyter Notebook) | | FileWriteTool | Write | 创建或覆盖文件 | | FileEditTool | Edit | 部分文件修改(字符串替换) | | GlobTool | Glob | 文件模式匹配搜索 | | GrepTool | Grep | 基于 ripgrep 的内容搜索 | | NotebookEditTool | NotebookEdit | Jupyter Notebook 编辑 | ### 执行类 | 工具 | 名称 | 功能 | |------|------|------| | BashTool | Bash | Shell 命令执行(含沙盒) | | PowerShellTool | PowerShell | Windows PowerShell 命令 | ### 网络类 | 工具 | 名称 | 功能 | |------|------|------| | WebFetchTool | WebFetch | 获取 URL 内容 | | WebSearchTool | WebSearch | Web 搜索 | ### 代理和协调类 | 工具 | 名称 | 功能 | |------|------|------| | AgentTool | Agent | 生成子代理(支持 worktree 隔离) | | SendMessageTool | SendMessage | 代理间消息传递 | | TeamCreateTool | TeamCreate | 创建代理团队 | | TeamDeleteTool | TeamDelete | 删除代理团队 | | TaskCreateTool | TaskCreate | 创建任务 | | TaskGetTool | TaskGet | 获取任务详情 | | TaskUpdateTool | TaskUpdate | 更新任务状态 | | TaskListTool | TaskList | 列出所有任务 | | TaskOutputTool | TaskOutput | 获取后台任务输出 | | TaskStopTool | TaskStop | 停止后台任务 | ### 交互类 | 工具 | 名称 | 功能 | |------|------|------| | AskUserQuestionTool | AskUserQuestion | 向用户提问获取输入 | | EnterPlanModeTool | EnterPlanMode | 进入计划模式 | | ExitPlanModeV2Tool | ExitPlanMode | 退出计划模式 | | EnterWorktreeTool | EnterWorktree | 进入 Git Worktree | | ExitWorktreeTool | ExitWorktree | 退出 Git Worktree | ### 集成类 | 工具 | 名称 | 功能 | |------|------|------| | MCPTool | (动态) | MCP 服务器工具调用 | | ListMcpResourcesTool | ListMcpResources | 列出 MCP 资源 | | ReadMcpResourceTool | ReadMcpResource | 读取 MCP 资源 | | LSPTool | LSP | Language Server Protocol 集成 | | SkillTool | Skill | 技能执行 | ### 特殊类 | 工具 | 名称 | 功能 | |------|------|------| | BriefTool | Brief | 附件处理和上传 | | ConfigTool | Config | 设置管理(仅内部) | | ToolSearchTool | ToolSearch | 延迟工具发现 | | TodoWriteTool | TodoWrite | 待办事项管理 | | SleepTool | Sleep | 主动模式等待 | | SyntheticOutputTool | SyntheticOutput | 结构化输出生成 | | ScheduleCronTool | CronCreate/CronDelete/CronList | 定时任务 | | RemoteTriggerTool | RemoteTrigger | 远程触发 | | REPLTool | REPL | REPL 模式(仅内部) | | WorkflowTool | Workflow | 工作流脚本执行 | | WebBrowserTool | WebBrowser | Web 浏览器自动化 | ## 权限模型 ```mermaid flowchart TD A[工具调用请求] --> B{权限检查} B -->|auto 模式| C[自动允许] B -->|default 模式| D{规则匹配} B -->|plan 模式| E[只读操作允许] B -->|bypassPermissions| C D -->|允许规则| F[执行工具] D -->|拒绝规则| G[拒绝执行] D -->|无规则| H[提示用户] H -->|用户允许| F H -->|用户拒绝| G H -->|用户允许本次| I[临时允许并执行] G --> J[getDenyRuleForTool 过滤] J --> K[从工具列表中移除] ``` ## AgentTool 子代理架构 ```mermaid flowchart TD A[AgentTool] --> B[子代理类型选择] B --> C[general-purpose
通用代理] B --> D[Explore
代码探索] B --> E[Plan
架构规划] B --> F[claude-code-guide
使用指南] C --> G[可用工具: 全部] D --> H[可用工具: 只读
Glob, Grep, Read, Agent] E --> I[可用工具: 只读
同 Explore] A --> J{隔离模式} J -->|worktree| K[Git Worktree 隔离] J -->|默认| L[同目录执行] A --> M[代理能力] M --> N[并行代理启动] M --> O[后台运行] M --> P[消息传递] M --> Q[内存管理] ``` ## BashTool 安全机制 ```mermaid flowchart TD A[BashTool 命令执行] --> B{安全检查} B --> C[路径验证
pathValidation.ts] B --> D[只读验证
readOnlyValidation.ts] B --> E[破坏性命令警告
destructiveCommandWarning.ts] B --> F[沙盒检查
shouldUseSandbox.ts] B --> G[sed 命令验证
sedValidation.ts] C --> H{在工作目录内?} H -->|是| I[允许执行] H -->|否| J[路径限制警告] E --> K{破坏性命令?} K -->|rm, git reset --hard| L[额外确认] K -->|其他| I F --> M{沙盒可用?} M -->|是| N[沙盒执行] M -->|否| I ```