权限
Agent 发起的每次工具调用在运行前都要经过一道权限闸门。policy() 用 allow / ask / deny 规则集匹配调用——按工具名 glob,或按调用的实际入参——由你决定哪些动作静默放行、哪些需要人工确认、哪些永远不允许。优先级恒为 deny > ask > allow:写错顺序的 allow 永远不可能盖住 deny。这就是让自主 agent 守在你划定的边界内的方式,并附带审计记录作为证明。
开启
把策略(以及可选的审批处理器)传给 createLiteAgent:
名称匹配使用 glob(Task* 匹配 TaskCreate、TaskUpdate 等)。没有命中任何规则的调用落到 default(不设置时为 "allow")。不配策略时一切放行。
内容级规则
除了工具名,policy({ rules }) 还可以通过 when 规范匹配调用入参——对 command、path 等点路径字段施加条件。SDK 为内置工具提供了现成的规则构造器:
规则即 PermissionRule:
Tip
Bash 命令匹配是尽力而为的——shell 引号和命令链可以绕过前缀规则。权限闸门只是纵深防御的一层;真正的隔离边界是 Sandbox。
审计与 dry-run
permissionAudit: true会为每个决定向会话日志追加一条脱敏的permission_decision事件,包括决策者(policy/user/auto)。工具入参中的密钥由defaultRedactor掩码(可用redact覆盖)。permissionMode: "dry-run"只计算并记录判定而不拦截任何调用——把候选策略对准真实流量,先看它会拒绝什么,再决定是否启用。
组合策略
composePolicies(...)以 deny 优先合并多个策略——托管层(例如组织基线)的 deny 无法被下游用户放松。strictPolicy({ allow })提供默认拒绝姿态:只有你列出的才被允许。
Warning
子代理默认不带父级的权限闸门和 onApproval 处理器运行——交互式审批无法服务并行的子代理。sandbox 仍会包裹每条命令。传 subagentPermission(allow/deny 规则,不支持 ask)来约束子代理运行。见 子代理。
选项
相关导出:policy、strictPolicy、composePolicies、bashCommand、filePath、permissionFilePolicy、defaultRedactor。