机制专题 · 08

权限审核机制

工具调用前的权限决策链路、规则来源、路径/Bash 安全检查,以及 ask 后的多路审批竞态。deny/ask/safetyCheck 始终优先于 bypass。

1. 决策主链路#

工具执行前调用 useCanUseTool(),核心顺序是:

useCanUseTool()
  -> hasPermissionsToUseTool()
     -> hasPermissionsToUseToolInner()
        1. deny/ask rules
        2. tool.checkPermissions(input, context)
        3. bypass/acceptEdits/default/auto/dontAsk 等模式
        4. allow rules
        5. passthrough => ask
  -> allow: 直接执行
  -> deny: 记录并返回拒绝
  -> ask: 进入 interactive / coordinator / swarm / bridge / channel / hook / classifier 竞态

Tool 自己的 checkPermissions() 是安全第一道业务门,比如:

2. 权限规则来源与语法#

utils/permissions/permissions.ts 把 allow/deny/ask 规则按来源合并:

规则值经过 permissionRuleValueFromString() 解析,支持工具级规则、内容级规则,例如:

deny 优先级最高;ask 规则可强制弹窗;allow 在工具自身安全检查之后才生效。

3. 路径权限的重点安全点#

utils/permissions/filesystem.ts 的路径检查非常重:

4. Bash 权限#

tools/BashTool/bashPermissions.ts 做了多层判断:

5. ask 后的"竞态"处理#

hooks/toolPermission/handlers/interactiveHandler.ts 中,一个 ask 请求会同时等待多个可能结果:

所有路径用 claim()/resolve-once 保证只有第一个结果生效,并会取消其他 pending prompt。

6. permission modes#

主要模式: