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-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。完整權限判斷需要繼續讀取執行環境與使用者控制訊號。