Grok Build · 工具分类 ToolKind 提供默认只读语义 is_read_only() 是工具种类层的默认分类。具体工具可以覆盖它,最终是否执行还要经过规则、沙箱、Hook 与交互批准等控制。 一句话速览 从枚举与 is_read_only() 追踪只读默认值和能力过滤边界
课程目标 准确识别真实 ToolKind 分支,记住 Task 返回 false、源码中没有 TaskOutput 这个 kind,并能解释只读分类与完整权限决策的边界。
核心视觉 · 教学化决策图
ToolKind 语义分类
is_read_only() 种类默认值
工具级覆盖 ToolMetadata 环境控制 规则 · 沙箱 · Hook 用户控制 交互批准
最终执行决策 允许 · 拒绝 · 询问
教学化决策图:表达多层控制关系,不代表单一函数调用链。
真实分类分支
is_read_only() == true Read Search Lsp ListDir List MemorySearch MemoryGet WebSearch WebFetch EnterPlan ExitPlan AskUser 这些 kind 的种类默认值为只读。具体工具仍可通过自己的元数据覆盖默认结果。
is_read_only() == false Edit Delete Write Move Execute Plan Task Skill SearchTool UseTool Monitor GoalUpdate 此处还包含后台任务、媒体生成、部署等种类。 Task 明确位于 false 分支。
边界提醒: is_read_only 描述默认副作用语义,不能单独推出「自动执行」或「必须弹窗」。命令规则、工作区权限、沙箱、Hook 与用户批准都会影响最终结果。显示层中 Execute 的标签是 Run Command 。
真实源码证据
crates/codegen/xai-grok-tools/src/tool_taxonomy.rs · 第 37 至 113 行节选
pub fn presentation_name(self) -> &'static str {
match self {
ToolKind::Execute => "Run Command",
/* 其他 presentation_name 分支省略 */
}
}
pub fn is_read_only(self) -> bool {
match self {
ToolKind::Read
| ToolKind::Search
| ToolKind::Lsp
| ToolKind::ListDir
| ToolKind::List
| ToolKind::MemorySearch
| ToolKind::MemoryGet
| ToolKind::WebSearch
| ToolKind::WebFetch
| ToolKind::EnterPlan
| ToolKind::ExitPlan
| ToolKind::AskUser => true,
ToolKind::Edit
| ToolKind::Delete
| ToolKind::Write
| ToolKind::Move
| ToolKind::Execute
| ToolKind::Plan
| ToolKind::BackgroundTaskAction
| ToolKind::WaitTasksAction
| ToolKind::KillTaskAction
| ToolKind::Skill
| ToolKind::Task
| ToolKind::ImageGen
| ToolKind::VideoGen
| ToolKind::ImageToVideo
| ToolKind::ReferenceToVideo
| ToolKind::DeployApp
| ToolKind::SearchTool
| ToolKind::UseTool
| ToolKind::Monitor
| ToolKind::GoalUpdate
| ToolKind::Other => false,
}
}
源码快照说明: 依据本地仓库 grok-build-main 的 crates/codegen/xai-grok-tools/src/types/tool.rs 与 tool_taxonomy.rs ,核对日期 2026-07-17。节选中的注释明确标出了省略范围。
课堂练习
02 判断分类,再补齐权限上下文 分别分析 Task 、 Execute 、 WebFetch 。先写出 kind 默认只读值与显示标签,再列出最终执行前还需要检查的四类控制信号。
Takeaway: ToolKind::is_read_only() 给出可复用的种类默认值。 Task 为 false,源码没有 TaskOutput kind, Execute 的统一标签为 Run Command 。完整权限判断需要继续读取运行环境与用户控制信号。