07.1 权限与 Sandbox 基座
关注源码
src/utils/permissions/permissionSetup.tssrc/utils/permissions/permissions.tssrc/utils/sandbox/*src/tools/BashTool/*src/tools/PowerShellTool/*
权限系统的输入来源
权限上下文会综合多种来源:
- 本地 settings
- 用户 settings
- policy settings
- CLI 参数
- session 临时更新
- mode 约束
permissionSetup.ts 负责把这些来源折叠成 ToolPermissionContext。
运行时判定不是简单 allow/deny
permissions.ts 会综合:
- rule 命中
- hook 结果
- permission mode
- classifier 决策
- working directory 限制
- sandbox override
- async agent 限制
最终得到:
- allow
- ask
- deny
以及精确的 decisionReason。
auto mode 的安全约束
permissionSetup.ts 明确识别危险规则,例如:
- 对 Bash/PowerShell 的过宽 allow
- 允许任意脚本解释器前缀
- AgentTool 的自动放行
这说明 auto mode 不是在普通权限上简单开“自动同意”,而是专门收窄了规则空间。
sandbox 的位置
sandbox 不是工具之外的外部容器,而是被接入 permission/runtime 体系:
SandboxManager- BashTool / PowerShellTool 的 shouldUseSandbox
- sandbox permission request UI
因此“是否出沙箱”本身是一次被建模的权限决策。
设计上的关键点
1. fail-closed
当规则匹配、shell 解析或安全检查不可靠时,系统倾向于 ask/deny,而不是静默放行。
2. permission reason 是结构化对象
这让 UI、telemetry、bridge/SDK 都能解释“为什么被拦”。
3. sandbox 与权限不是两套系统
sandbox 只是权限判定链上的一个重要分支。