权限模式
助手动手之前要不要先问你,由权限模式决定。它是每个任务单独的设置:在输入框旁的选择器里选,或用 ⌘ + Shift + M(Windows 为 Ctrl + Shift + M)在四档之间循环。
四档梯子
四档按授权由紧到松排列,每一档恰好比上一档多放行一类东西(快捷键也按这个顺序循环):
计划模式 → 变更前确认 → 自动编辑(默认)→ 完全访问
| 模式 | 无需询问即可运行 | 仍会询问 |
|---|---|---|
| 计划模式 | 只读探索工具 | 一切写类工具被直接拒绝,不弹审批 |
| 变更前确认 | 只读工具、白名单内的只读命令(cat / ls / head / grep 等) | 一切文件改动、其余命令、网络请求、MCP 工具 |
| 自动编辑(默认) | 工作区内的文件编辑、只读命令、网络请求 | 危险命令、写到工作区外、敏感文件、MCP 与未识别的工具 |
| 完全访问 | 几乎全部 | 灾难性删除命令(见) |
计划模式
只读探索,先给出方案。这一档里写类工具是硬拦:不会弹审批让你放行,助手直接拿到拒绝结果;MCP 工具同样整类不可用。所以「本机工作区不会被修改」在这一档是一句承诺,而不是默认行为。
看完方案想让它动手,点开始执行回到原来的档位,或者手动切档。
变更前确认
改动落地前问你一句。放行的只有只读工具,以及一张很短的只读命令白名单 —— cat、ls、pwd、head、tail、wc、echo、which、type、grep。名单之外一律询问,包括:
git(哪怕是git status,首版不做子命令细分);rg、find;- 任何带
>、|、&&、;、$(...)的复合命令。
rg、find 看着是纯查询,实际都自带执行任意程序的入口(rg --pre=... 会对每个输入文件跑一遍指定命令,find -execdir ... 同理),所以不进白名单。要在这一档搜索代码,用助手自带的搜索工具,它们本来就放行。这一档还有两条配套约束:
- 长任务(Goal)模式的自动批准白名单在这一档不生效 —— 你选了逐个确认,就以逐个确认为准。
- 审批条上没有「本任务始终允许」;切进这一档时,之前在别的档位建立的任务级放行也会被清空。
自动编辑(默认)
工作区内的文件编辑不再打断你,其余照问:危险命令、写到工作区外的路径、敏感文件(密钥、证书等)、MCP 与未识别的工具都会弹审批。
完全访问
日常操作不再逐个确认。唯一仍会弹窗的是灾难性删除命令——那是防模型参数幻觉的断路器,不是一道完整的安全边界,它的覆盖面见下方。
切换时机
切档从下一次工具调用开始生效。已经批准或正在执行的操作,会按切换前的档位跑完。
已知边界
这一节讲的是这套机制做不到的事。
断路器覆盖不到 MCP 与任意代码执行
「完全访问」档下唯一仍会弹审批的是灾难性删除(rm -rf ~、rm -rf / 及其包装器与复合命令写法)。它匹配的是 shell 删除命令的字面形态,因此覆盖不到:
- MCP 工具:例如某个文件系统 MCP server 的「删除目录」工具,参数指向主目录 —— 没有任何东西会拦。
- 任意代码执行:
python -c "shutil.rmtree(...)"、node -e ...或一个脚本文件,效果等价但形态完全不同。
所以不要把它读成「只有删除主目录才会问你」。
「完全访问」不提供针对提示注入的保护
这一档会自动应答一切审批请求,包括模型被外部内容(网页、仓库里的文件、第三方工具的返回值)诱导而发起的操作。需要更强隔离时:
- 在 设置 → MCP 里按 server 声明信任范围(默认不信任,可逐个工具放行);
- 不要在来源不明的工作区里用「完全访问」。
装回旧版本客户端会让「变更前确认」扩权一级
权限档由客户端强制执行。「变更前确认」是较新版本引入的档位,旧版本客户端打开同一份本地数据时不认识这个取值,会回落到默认档(自动编辑)—— 原本每次都问的工作区内编辑,于是变成不再询问。