
grok-build 0.2.15 权限提示升级记住上次选择与 config.toml 首次提示默认值配置指南【免费下载链接】grok-buildSpaceXAIs coding agent harness and TUI. Fullscreen, mouse interactive, extensible.项目地址: https://gitcode.com/gh_mirrors/gr/grok-build导读本篇文章围绕grok-buildSpaceXAI 的编码 Agent 外壳与全屏 TUI0.2.15 版本的核心变更展开权限提示Permission prompts现在能够跨工具记住你上一次的选择并且首次提示的默认行为可以在 config.toml 中配置。读完本文你将掌握该版本的权限记忆机制如何在底层生效[ui] remember_tool_approvals开关、持久化规则、作用域算法理解[permission]、[ui] permission_mode、GROK_REMEMBER_TOOL_APPROVALS环境变量等配置项的完整取值与优先级从而在交互式 TUI 与 headless-p模式下精确控制 Agent 的工具审批体验。一、0.2.15 变更概述权限提示从每次询问到记住选择crates/codegen/xai-grok-shell/changelogs/0.2.15.md记录了本版本的唯一 FeaturePermission promptsnow remember your last choice across tools and let you configure the first-prompt default in config.toml.其结构化版本crates/codegen/xai-grok-shell/changelogs/0.2.15.json进一步标注该条目为category: features、breaking_change: false即这是一次非破坏性的行为增强不会破坏既有配置但会改变权限提示的交互方式。这条变更包含两个可拆解的能力跨工具记住上次选择当你在某个工具的权限提示中做出始终允许Always allow或永不Never allow选择后该选择会被持久化并在后续其他工具/命令的提示中作为记忆与默认候选出现首次提示默认值可在 config.toml 中配置控制记忆是否开启、首次出现提示时采用何种默认策略的开关均已下沉到配置文件层。二、底层机制remember_tool_approvals 门控记住上次选择并非无条件的。源码中将其实现为一个可配置的功能门控gate核心实现在 src/util/config/resolve/tool_approvals.rs。2.1 门控的默认值/// Default for the remember_tool_approvals gate when no layer sets it. pub const DEFAULT_REMEMBER_TOOL_APPROVALS: bool true;该门控默认开启true。也就是说不写任何配置0.2.15 的行为即为记住你的选择只有当你显式关闭时才退回每次询问的旧行为。2.2 门控的作用从源码注释看门控控制的是权限提示中细粒度 Always allow … 选项是否展示/// Resolve whether the granular per-tool Always allow … prompt options are /// shown. pub fn resolve_remember_tool_approvals( requirements: OptionTomlValue, user: OptionTomlValue, managed: OptionTomlValue, remote: OptionRemoteSettings, ) - crate::agent::config::Resolvedbool即当门控开启时权限提示会额外提供始终允许Always allow行让你能把选择固化为规则当门控关闭时提示退化为纯允许/拒绝的临时决策。2.3 触发点会话 spawn 时从磁盘读取在 src/session/acp_session_impl/spawn.rs 中每次会话创建时都会调用crate::util::config::remember_tool_approvals_from_disk(),remember_tool_approvals_from_disk()见 tool_approvals.rs会在 spawn 时刻重新加载各配置层requirements、user、managed、remote 缓存确保会话启动时拿到的是最新配置而非进程缓存。2.4 遥测记录该开关是否开启还会进入遥测数据实现在 src/session/telemetry/permission.rs字段为remember_tool_approvals: Optionbool用于在权限相关分析事件中区分用户开启了记忆功能与未开启两种场景。三、config.toml 配置详解首次提示默认值0.2.15 让你可以在 config.toml 中配置首次提示的默认值。与之直接相关的配置键为[ui]下的remember_tool_approvals。3.1 配置写法[ui] # 是否在权限提示中展示细粒度的 Always allow … 选项。 # 未配置时默认为 true记住选择设为 false 则每次提示都要求临时决策。 remember_tool_approvals true从源码remember_tool_approvals_from_toml可以看出该键的读取路径严格限定在[ui]表内fn remember_tool_approvals_from_toml(v: OptionTomlValue) - Optionbool { v?.get(ui)?.get(remember_tool_approvals)?.as_bool() }3.2 环境变量覆盖GROK_REMEMBER_TOOL_APPROVALS除了配置文件还提供进程级环境变量开关pub(crate) const ENV_REMEMBER_TOOL_APPROVALS: str GROK_REMEMBER_TOOL_APPROVALS;例如在 shell 中临时关闭记忆功能export GROK_REMEMBER_TOOL_APPROVALS0 grok3.3 配置解析优先级从高到低源码中通过BoolFlag链式解析优先级明确为requirements要求层 环境变量 GROK_REMEMBER_TOOL_APPROVALS [ui].remember_tool_approvals用户配置 managed托管配置 remote远程设置 默认值 true这一点被remember_tool_approvals_gate_tests中的测试逐条钉死见 tool_approvals.rs关键断言包括defaults_on_when_nothing_set什么都不设置时门控默认 ONeach_layer_can_turn_it_offrequirements、config、managed、remote 每一层都能单独关闭env_overrides_config_and_remote环境变量压过配置与远程requirement_beats_env要求层MDM/托管地板压过环境变量。3.4 首次提示默认值与权限模式的软默认与首次提示默认值相关的还有交互式启动时的**权限模式软默认soft default**机制。在 src/util/config/permissions.rs 中/// None when neither source set one, so callers pick their own fallback /// (headless keeps Ask; interactive launches soft-default to auto). pub fn selected_permission_mode( effective_ui: OptionTomlValue, remote_permission_mode: Optionstr, ) - OptionPermissionMode即当任何来源都没有显式选择权限模式时返回值是None此时调用方使用各自的回退策略——headless 保持ask而交互式 TUI 软默认到 auto自动分类。pager 侧对应字段为app.permission_mode_from_soft_default见 src/app/acp_handler/settings.rs测试覆盖见 src/app/acp_handler/tests/settings.rs。[ui] permission_mode的合法取值由parse_permission_mode_canonical定义permissions.rs配置值解析结果说明always-approveAlwaysApprove全部自动批准YOLO 语义autoAuto使用自动权限分类器askAsk每次询问defaultAsk显示为default实际强制执行等价 Ask未知字符串Ask安全回退绝不因乱填而静默放行同表还兼容两个遗留键approval_mode与yolo布尔。键的优先级为permission_modeapproval_modeyolo true。四、记住的选择如何落地持久化规则与作用域当你在权限提示中选择始终允许或永不时这个选择会被转译为一条持久化的权限规则PermissionRule写入配置并在此后生效。这是 0.2.15跨工具记住选择的最终形态你的选择成为规则规则对所有工具生效。4.1 规则类型定义规则类型在 src/permission/types.rs 中定义pub struct PermissionRule { pub action: RuleAction, // allow / deny / ask pub tool: ToolFilter, // any / bash / edit / read / grep / mcp / webfetch / websearch pub pattern: OptionString, // glob 或 domain:host pub pattern_mode: PatternMode, // glob / domain }其中RuleAction的默认值为Deny。源码注释明确这是出于CWE-1188的安全考量省略action字段的规则不会静默变成兜底放行catch-all allow而是默认拒绝。4.2 提示选项的默认作用域提示中Always allow与Never allow选项默认覆盖多宽的规则范围由工作区侧算法决定实现在 src/permission/manager/mod.rsdefault_always_allow_scope始终允许对安全前缀命令如ls、grep、git status、kubectl get等内置安全名单只作用到安全前缀本身避免把第一个路径参数一并固化成规则对其他命令默认取前两个词 后续 flags对危险动词dangerous verbs与执行载体exec vehicles如sudo git、python3只提供完整命令选项防止通过收窄作用域绕开安全审查default_always_deny_scope永不拒绝规则对所有命令都尊重前缀——Always deny: git push 阻止所有 push 正是设计意图因此不适用危险命令的完整命令锁定。4.3 配置中的规则形态[permission]配置段支持两种形态已知键声明见 src/agent/config.rs# 紧凑形态直接列出规则数组 [permission] allow [Bash(npm*), WebFetch(domain:docs.rs)] deny [Bash(rm*), Bash(sudo*)] ask [Edit(/etc/**)] # 或详细形态 [[permission.rules]] action allow tool bash pattern npm*注意[permission]的键以Optiontoml::Value承载配合未识别键扫描拼写错误如denny只会告警而不会导致配置加载失败见 config_tests.rs 中 malformed permission rules do not fail config load 的测试。4.4 CLI 侧的对等能力权限规则同样可以从命令行注入README.md# 拒绝所有匹配 rm* 的 shell 命令 grok -p Clean up this project --deny Bash(rm*) # 允许 npm 命令拒绝其他危险命令 grok -p Set up the project --allow Bash(npm*) --deny Bash(sudo*) # 拒绝 src/ 之外的编辑 grok -p Refactor the code --deny Edit(/etc/**) # 放行全部 bash自动批准不再提示 grok -p Build the project --allow Bash # 组合允许文档站点拒绝其余 URL grok --allow WebFetch(domain:docs.rs) --deny WebFetch(*)规则语法为ToolPrefix(glob_pattern)支持Bash、Edit、Write、Read、Grep、WebFetch、MCPTool前缀glob 支持*单层与**递归兼容 Claude Code 的Bash(cmd:*)写法等价于对cmd前缀匹配。--allow/--deny可重复添加deny 优先级高于 allow在 TUI 与 headless 模式下均生效。--permission-mode在两种模式下也都可用--tools/--disallowed-tools仅 headless 支持。CLI 注入的规则在 spawn 时会经过drop_cli_catchall_allows处理剥离与--yolo语义冲突的兜底放行规则见 src/session/acp_session_impl/spawn.rs。子代理场景下父会话的BypassPermissions/AcceptEdits/Auto模式会覆盖子代理自身模式其余模式保留子代理配置见 src/agent/config.rs。五、与其他权限能力的协同0.2.15 的记住选择并非孤立功能它嵌在完整的权限体系中权限模式Permission Modealways-approve/auto/ask决定全局默认策略remember_tool_approvals决定提示内是否给出可固化的选项权限规则Permission Rules--allow/--deny与[permission]段决定哪些调用自动放行/拒绝/询问是记住的选择的持久化载体自动分类器Auto Mode当权限模式为auto时由分类器判断请求当分类器超时或失败时回退为显示正常权限提示而不是静默拒绝见 changelogs/0.2.111.mdNever allow 的持久化Bash 权限提示中的 Never allow 选择会固化为 deny 规则见 CHANGELOG.md与 0.2.15 的记住选择属同一机制的不同方向展示细节当权限提示弹出时焦点会正确移动到提示上以便作答见 changelogs/0.2.111.md。六、验证与测试如果你希望验证该版本行为的正确性可以在仓库中找到以下测试与实现入口门控解析与优先级测试src/util/config/resolve/tool_approvals.rs 中的remember_tool_approvals_gate_tests含默认值、逐层关闭、env 覆盖、requirement 压制、remote 缓存往返等 8 个用例权限模式解析测试src/util/config/permissions.rs含selected_permission_mode、resolved_display_permission_mode、软默认回退等用例提示交互测试src/app/dispatch/tests/permissions.rsBash Always allow 提示推送与 src/app/acp_handler/tests/interactions.rsAlways allow 行必须开启才展示配置加载容错测试src/agent/config_tests.rs[[permission.rules]]合法/畸形形态。七、小结grok-build 0.2.15 通过一条看似简单的变更将权限交互从每次临时决策升级为可记忆、可配置、可持久化的体系交互式提示中做出的 Always allow / Never allow 选择被固化为权限规则并跨工具生效[ui] remember_tool_approvals与GROK_REMEMBER_TOOL_APPROVALS提供了从配置到环境变量的双层开关[ui] permission_mode的软默认机制则决定了首次提示采用何种策略。配合[permission]规则段与--allow/--denyCLI 参数你可以在保持安全默认缺省 action 即 deny、危险命令只提供完整命令选项的前提下把重复的审批负担交给规则引擎从而获得更顺滑的编码 Agent 使用体验。【免费下载链接】grok-buildSpaceXAIs coding agent harness and TUI. Fullscreen, mouse interactive, extensible.项目地址: https://gitcode.com/gh_mirrors/gr/grok-build创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考