第十三节 工具权限与审批

AVL Code 通过工具权限策略对每一次工具调用做精细化管控。

13.1 三态权限

每个工具都可以设置为:

  • 启用:直接放行。
  • 询问:每次调用前弹窗审批。
  • 禁用:直接拒绝。

可按工作模式独立配置;常见做法:execute 模式启用写工具,plan 模式禁用所有写工具。三态对子代理同样生效(禁用工具在子代理侧一并拿不到),插件 / 外部服务卸载后残留的工具配置会被自动清理。

13.2 调用前审批

当一个被标记为「询问」的工具即将执行时:

  1. 桌面端弹出审批弹窗,展示工具名、入参与影响范围。
  2. 你可以选择:
    • 允许(仅本次)
    • 始终允许:把"工具+参数模式"加入白名单。
    • 拒绝
  3. 弹窗带 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.2.2 本地模式:一键断掉内置联网工具

与无限制模式正好相反的方向 —— 本地模式把这个会话的内置联网能力一次关掉,适合处理不宜外发的资料、或者本来就没网的环境。

开关位置:输入区的联网开关。默认是「联网工具已启用」,点击后弹确认框「禁用联网工具?」,确认即生效。

关掉的是哪些:

  • 网页抓取与搜索
  • GitHub 检索
  • VirusTotal / GTI 威胁情报云查
  • 漏洞库在线同步

不受影响的(这点很重要,别误以为"全断网了"):

  • shell 命令(比如 curl)的网络访问 —— 本开关不拦
  • 外接 MCP 工具的网络访问
  • 与模型服务本身的通信

对模型选择的影响:本地模式下,这个会话的数据只发给它自己所用的模型 ——

  • code.ask、sec.decompile、记忆自动提炼不再按路由策略选澜砥模型,一律用当前会话的模型;
  • 子任务一律用主会话的模型(忽略子任务的路由策略与子代理定义里的模型);
  • Hook 用触发它的会话自己的模型;确定不了时跳过这次 Hook 的模型调用,不改用别的会话的模型;
  • 发往本地模式会话的例行程序用该会话的模型。

作用域:按会话生效,重启后自动恢复联网;子代理同样受限。开启期间依赖联网检索的任务(查资料、云端威胁分析、拉最新漏洞数据)效果会明显受限,这是预期内的。

斜杠命令快捷开关:输入框直接敲 /local 即可切换。

13.3 白名单匹配

「始终允许」的匹配粒度可在 设置 → Hooks → 自动批准 中调整:

  • 仅本次(最严)
  • 同工具同参数
  • 同工具任何参数
  • 整个工作区放行(最松)

13.4 多端审批

同一条审批请求会同时出现在桌面弹窗与已绑定的远程通道(如微信);首个应答生效,其余端的后续回复会被提示已应答。另有一条容易混淆的规则:拒绝 > 挂起 > 询问 > 允许 的优先级排序属于 Hook 层 — 同一次评估中多个 Hook 返回的权限决策按它合并,与多端应答无关。

13.5 远程审批

如果你已绑定微信通道,所有 询问 类审批都会同步推送到对应聊天,你可以在微信里用一行命令完成审批:

/approve <审批号>      # 允许本次
/always  <审批号>      # 始终允许
/deny    <审批号>      # 拒绝

桌面侧弹窗会同步消失,整条任务自动续跑。

13.6 留痕

审批决策不落独立审计存储:仅「始终允许」写入工作区级授权文件 hook-approvals.yaml(记录授权指纹与决策时间),可在 设置 → Hooks 查看与撤销;「仅本次允许」与「拒绝」只作用于当次调用,不留存记录。