Grok Build · 도구 분류

ToolKind의 기본 읽기 전용 시맨틱

is_read_only()는 도구 종류(kind) 계층의 기본 분류입니다. 개별 도구가 이를 재정의할 수 있으며, 최종 실행 여부는 규칙·샌드박스·Hook·인터랙티브 승인 등 여러 제어 단계를 거칩니다.

학습 목표 실제 ToolKind 분기를 정확히 식별하고, Task가 false를 반환하며 소스 코드에 TaskOutput kind가 없다는 점을 기억합니다. 또한 읽기 전용 분류와 전체 권한 결정의 경계를 설명할 수 있습니다.
핵심 시각 자료 · 교육용 결정 다이어그램
ToolKind시맨틱 유형 is_read_only()종류 기본값 도구 재정의ToolMetadata 환경 제어규칙 · 샌드박스 · Hook 사용자 제어인터랙티브 승인 최종 실행 결정허용 · 거부 · 질문
교육용 결정 다이어그램: 다중 제어 계층 관계를 표현한 것으로, 단일 함수 호출 체인을 나타내지 않습니다.
실제 분류 분기

is_read_only() == true

ReadSearchLspListDirListMemorySearchMemoryGetWebSearchWebFetchEnterPlanExitPlanAskUser

이 kind들은 기본적으로 읽기 전용입니다. 개별 도구는 자체 메타데이터로 기본값을 재정의할 수 있습니다.

is_read_only() == false

EditDeleteWriteMoveExecutePlanTaskSkillSearchToolUseToolMonitorGoalUpdate

백그라운드 작업, 미디어 생성, 배포 등의 kind도 이 분기에 포함됩니다. 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

분류를 판단하고, 권한 컨텍스트를 완성하기

Task·Execute·WebFetch를 각각 분석합니다. 먼저 kind의 기본 읽기 전용 값과 표시 레이블을 작성한 뒤, 최종 실행 전에 확인해야 할 4가지 제어 신호를 나열하세요.

Takeaway: ToolKind::is_read_only()는 재사용 가능한 kind 기본값을 제공합니다. Task는 false이며, 소스 코드에 TaskOutput kind는 없고, Execute의 통일된 레이블은 Run Command입니다. 완전한 권한 판단을 위해서는 런타임 환경과 사용자 제어 신호를 추가로 확인해야 합니다.