Grok Build · 工具分类
ToolKind 提供默认只读语义
is_read_only() 是工具种类层的默认分类。具体工具可以覆盖它,最终是否执行还要经过规则、沙箱、Hook 与交互批准等控制。
课程目标准确识别真实
ToolKind 分支,记住 Task 返回 false、源码中没有 TaskOutput 这个 kind,并能解释只读分类与完整权限决策的边界。
核心视觉 · 教学化决策图
教学化决策图:表达多层控制关系,不代表单一函数调用链。
真实分类分支
is_read_only() == true
ReadSearchLspListDirListMemorySearchMemoryGetWebSearchWebFetchEnterPlanExitPlanAskUser
这些 kind 的种类默认值为只读。具体工具仍可通过自己的元数据覆盖默认结果。
is_read_only() == false
EditDeleteWriteMoveExecutePlanTaskSkillSearchToolUseToolMonitorGoalUpdate
此处还包含后台任务、媒体生成、部署等种类。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。完整权限判断需要继续读取运行环境与用户控制信号。