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