第十四节 工具权限策略
[!ref] 详解见用户手册「工具权限与审批」节。
14.1 三态语义
| 状态 | 图标 | 行为 |
|---|---|---|
| 启用 | 直接放行,不弹窗 | |
| 询问 | 每次调用前弹窗审批(接入实际确认流程,批准前调用暂停) | |
| 禁用 | 直接拒绝,记录到错误抽屉 |
三态对子代理同样生效:「禁用」在主代理与子代理两侧一并生效(子代理侧 fail-closed,工具直接不可见);卸载插件 / 移除 MCP 后端时自动清理残留的工具配置键,盘上配置与实际可用工具保持一致。
14.2 决策聚合与多端应答
Hook 决策聚合:同一次评估中多个 Hook 返回的权限决策按下列优先级合并(前者胜):
deny > defer > ask > allow
多端应答:审批弹窗与远程通道(微信等)同时收到同一请求时,首个应答生效;其余端的后续回复会被提示已应答。
14.3 白名单匹配粒度
| 粒度 | 覆盖范围 | 适用场景 |
|---|---|---|
| 仅本次 | 单次调用 | 谨慎评估 |
| 同工具同参数 | 一组完全相同的入参 | 推荐默认 |
| 同工具任何参数 | 该工具任意调用 | 内部脚本 |
| 整工作区放行 | 该工作区所有工具 | 仅限隔离环境 |
14.4 远程审批回写
| 命令 | 等价桌面操作 |
|---|---|
/approve <审批号> |
允许(仅本次) |
/always <审批号> |
始终允许 |
/deny <审批号> |
拒绝 |
| 不回复 | 30 秒倒计时结束即超时拒绝 |
14.4.1 无限制模式(高级)
输入区模式滑块右侧盾牌开关;按会话独立、纯内存、重启即清。开启前有 5 秒冷静期。
| 解除 | 开启后行为 |
|---|---|
| 工具批准 | 跳过批准弹窗,直接执行 |
| 命令白名单 | fs.exec 不限命令 |
| 网络过滤 | web.fetch / web.bing 不过滤内网 / 环回 / 链路本地 |
始终保留的硬底线(不受开关影响):
| 硬底线 | 说明 |
|---|---|
samples/ 沙箱 |
不可解除 |
rm -rf 参数校验 |
仍校验 |
| 危险注入黑名单 | fork 炸弹 / 写 /etc / curl|sh / eval |
| 协议白名单 | 仅 http(s) 放行 |
消息标识:模式期间产生的连续消息以浅色边框整体圈出(起止界标),关闭后当场收口;模式未结束不打「结束」界标。子代理可按需递归继承该模式,继承产生的消息同样带标识。
14.5 审批请求字段与留痕
审批弹窗(hook:ask 事件)携带的字段:
| 字段 | 说明 |
|---|---|
request_id |
审批号 |
event |
触发的 Hook 事件名 |
fingerprint |
授权指纹,「始终允许」按它匹配 |
handler_type / handler_label |
处理器类型与显示名 |
matcher / match_target |
命中的匹配器与匹配目标 |
source_scope / source_id |
来源作用域(plugin / user / workspace)及其 ID |
session_id |
会话 ID |
timeout_sec |
倒计时秒数(30) |
决策取值:deny(拒绝)/ allow_once(仅本次允许)/ always_allow(始终允许)。
留痕:仅「始终允许」会持久化 — 写入工作区级授权文件 hook-approvals.yaml(记录授权指纹与决策时间),可在 设置 → Hooks 查看与撤销;「仅本次允许」「拒绝」与超时只作用于当次调用,不落盘。
