权限
Agent 发起的每次工具调用在运行前都要经过一道权限闸门。policy() 用 allow / ask / deny 规则集匹配调用——按工具名 glob,或按调用的实际入参——由你决定哪些动作静默放行、哪些需要人工确认、哪些永远不允许。优先级恒为 deny > ask > allow:写错顺序的 allow 永远不可能盖住 deny。这就是让自主 agent 守在你划定的边界内的方式,并附带审计记录作为证明。
开启
把策略(以及可选的审批处理器)传给 createLiteAgent:
名称匹配使用 glob(Task* 匹配 TaskCreate、TaskUpdate 等)。没有命中任何规则的调用落到 default(不设置时为 "allow")。SDK 默认对 bash、write_file、edit_file、delete_file 请求审批;没有处理器时拒绝。显式提供的自定义工具由宿主负责信任。传入 permission 会替换该默认策略;底层 core 仍由调用方显式配置。
内容级规则
除了工具名,policy({ rules }) 还可以通过 when 规范匹配调用入参——对 command、path 等点路径字段施加条件。SDK 为内置工具提供了现成的规则构造器:
规则即 PermissionRule:
Bash 命令匹配是尽力而为的——shell 引号和命令链可以绕过前缀规则。权限闸门只是纵深防御的一层;真正的隔离边界是 Sandbox。
审计与 dry-run
permissionAudit: true会为每个决定向会话日志追加一条脱敏的permission_decision事件,包括决策者(policy/user/auto)。工具入参中的密钥由defaultRedactor掩码(可用redact覆盖)。permissionMode: "dry-run"只计算并记录判定而不拦截任何调用——把候选策略对准真实流量,先看它会拒绝什么,再决定是否启用。
组合策略
composePolicies(...)以 deny 优先合并多个策略——托管层(例如组织基线)的 deny 无法被下游用户放松。strictPolicy({ allow })提供默认拒绝姿态:只有你列出的才被允许。
子代理继承父级权限、沙箱和工具限制,subagentPermission 只能收紧。所有审批共用根实例的串行队列。
选项
相关导出:policy、strictPolicy、composePolicies、bashCommand、filePath、permissionFilePolicy、defaultRedactor。
另请参阅
- Sandbox — 与闸门组合的 OS 级隔离。
- 可观测性 — 从事件流中读取
permission_decision事件。 - 子代理 —
subagentPermission如何约束子代理。 - Core 策略 —
PermissionPolicy策略接口。
路径与配置边界
SDK 内置文件工具的权限检查使用规范化后的工作区相对路径,覆盖绝对路径和符号链接别名;写操作拒绝符号链接。单独使用 core 策略时不会为任意自定义工具规范化路径。Bash 的 cwd 本身不提供沙箱隔离。
permissionFilePolicy 将项目规则视为宿主授权之上的限制:项目不能把默认拒绝变成允许。请在托管文件、用户文件或内联规则中授权。文件工具不能修改策略文件或删除其父目录;local 运行时也阻止 Shell 写入配置路径。任意自定义工具仍属于可信宿主代码。