Grok Build · 工具分类

ToolKind 提供默认只读语义

is_read_only() 是工具种类层的默认分类。具体工具可以覆盖它,最终是否执行还要经过规则、沙箱、Hook 与交互批准等控制。

课程目标准确识别真实 ToolKind 分支,记住 Task 返回 false、源码中没有 TaskOutput 这个 kind,并能解释只读分类与完整权限决策的边界。
核心视觉 · 教学化决策图
ToolKind语义分类 is_read_only()种类默认值 工具级覆盖ToolMetadata 环境控制规则 · 沙箱 · Hook 用户控制交互批准 最终执行决策允许 · 拒绝 · 询问
教学化决策图:表达多层控制关系,不代表单一函数调用链。
真实分类分支

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-maincrates/codegen/xai-grok-tools/src/types/tool.rstool_taxonomy.rs,核对日期 2026-07-17。节选中的注释明确标出了省略范围。
课堂练习
02

判断分类,再补齐权限上下文

分别分析 TaskExecuteWebFetch。先写出 kind 默认只读值与显示标签,再列出最终执行前还需要检查的四类控制信号。

Takeaway:ToolKind::is_read_only() 给出可复用的种类默认值。Task 为 false,源码没有 TaskOutput kind,Execute 的统一标签为 Run Command。完整权限判断需要继续读取运行环境与用户控制信号。