第十三节 工具权限与审批
AVL Code 通过工具权限策略对每一次工具调用做精细化管控。
13.1 三态权限
每个工具都可以设置为:
- 启用:直接放行。
- 询问:每次调用前弹窗审批。
- 禁用:直接拒绝。
可按工作模式独立配置;常见做法:execute 模式启用写工具,plan 模式禁用所有写工具。三态对子代理同样生效(禁用工具在子代理侧一并拿不到),插件 / 外部服务卸载后残留的工具配置会被自动清理。
13.2 调用前审批
当一个被标记为「询问」的工具即将执行时:
- 桌面端弹出审批弹窗,展示工具名、入参与影响范围。
- 你可以选择:
- 允许(仅本次)
- 始终允许:把"工具+参数模式"加入白名单。
- 拒绝
- 弹窗带 30 秒倒计时,超时未响应按「拒绝」处理。
13.2.1 无限制模式(高级)
输入区模式滑块右侧有一个盾牌开关,专给清楚自己在做什么的高级用户用。开启前先过一道风险确认弹窗(含 5 秒冷静期 — 确认按钮先禁用并倒计时「请仔细阅读风险提示 5s…」,归零才能点,期间按 Enter 也不触发),开启后红色危险态常驻提醒,关闭即时生效。
作用域:按会话独立、纯内存、重启即清,不会悄悄留着。
开启后解除三类日常摩擦:
| 摩擦 | 开启后 |
|---|---|
| 工具批准 | 跳过批准弹窗(不再逐个 ask / 拒绝 / 延后),工具直接执行 |
| 命令白名单 | fs.exec 不再受命令白名单限制,任意命令可执行 |
| 网络访问 | web.fetch / web.bing 不再过滤内网 / 环回 / 链路本地地址 |
始终保留的硬底线(不受开关影响):
samples/沙箱隔离rm -rf等破坏性命令的参数校验- 危险注入黑名单(fork 炸弹 / 写
/etc/curl|sh/eval) http(s)协议白名单
斜杠命令快捷开关 — 也可在输入框直接敲:
/unrestricted(或中文别名/无限)— 切换当前会话的无限制模式。开启时同样过 5 秒冷静期的风险确认弹窗,关闭即时生效。中文别名在命令菜单与/help里隐藏(避免重复行),但键入回车仍可执行。
无护栏区间的消息标识:无限制模式期间产生的连续消息会以浅色边框整体圈出,起止一目了然,事后回看能一眼分辨哪些内容是在无护栏状态下生成的;关闭开关后边框当场收口,模式未结束时不会提前打「结束」界标。子代理可按需递归继承该模式,继承产生的消息同样带标识。
13.3 白名单匹配
「始终允许」的匹配粒度可在 设置 → Hooks → 自动批准 中调整:
- 仅本次(最严)
- 同工具同参数
- 同工具任何参数
- 整个工作区放行(最松)
13.4 多端审批
同一条审批请求会同时出现在桌面弹窗与已绑定的远程通道(如微信);首个应答生效,其余端的后续回复会被提示已应答。另有一条容易混淆的规则:拒绝 > 挂起 > 询问 > 允许 的优先级排序属于 Hook 层 — 同一次评估中多个 Hook 返回的权限决策按它合并,与多端应答无关。
13.5 远程审批
如果你已绑定微信通道,所有 询问 类审批都会同步推送到对应聊天,你可以在微信里用一行命令完成审批:
/approve <审批号> # 允许本次
/always <审批号> # 始终允许
/deny <审批号> # 拒绝
桌面侧弹窗会同步消失,整条任务自动续跑。
13.6 留痕
审批决策不落独立审计存储:仅「始终允许」写入工作区级授权文件 hook-approvals.yaml(记录授权指纹与决策时间),可在 设置 → Hooks 查看与撤销;「仅本次允许」与「拒绝」只作用于当次调用,不留存记录。
