7.5 KiB
7.5 KiB
工具系统分析
架构概述
工具系统是 Claude Code 的核心能力层,定义了 Agent 可以执行的所有操作。每个工具是一个自包含模块,包含输入 Schema、权限模型和执行逻辑。
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() 函数集中管理:
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 浏览器自动化 |
权限模型
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 子代理架构
flowchart TD
A[AgentTool] --> B[子代理类型选择]
B --> C[general-purpose<br/>通用代理]
B --> D[Explore<br/>代码探索]
B --> E[Plan<br/>架构规划]
B --> F[claude-code-guide<br/>使用指南]
C --> G[可用工具: 全部]
D --> H[可用工具: 只读<br/>Glob, Grep, Read, Agent]
E --> I[可用工具: 只读<br/>同 Explore]
A --> J{隔离模式}
J -->|worktree| K[Git Worktree 隔离]
J -->|默认| L[同目录执行]
A --> M[代理能力]
M --> N[并行代理启动]
M --> O[后台运行]
M --> P[消息传递]
M --> Q[内存管理]
BashTool 安全机制
flowchart TD
A[BashTool 命令执行] --> B{安全检查}
B --> C[路径验证<br/>pathValidation.ts]
B --> D[只读验证<br/>readOnlyValidation.ts]
B --> E[破坏性命令警告<br/>destructiveCommandWarning.ts]
B --> F[沙盒检查<br/>shouldUseSandbox.ts]
B --> G[sed 命令验证<br/>sedValidation.ts]
C --> H{在工作目录内?}
H -->|是| I[允许执行]
H -->|否| J[路径限制警告]
E --> K{破坏性命令?}
K -->|rm, git reset --hard| L[额外确认]
K -->|其他| I
F --> M{沙盒可用?}
M -->|是| N[沙盒执行]
M -->|否| I