权限与权限模式
- 三种权限裁决(allow / ask / deny)各自的含义
- 权限规则如何匹配某个工具加上一个模式
- 六种权限模式,以及各自的适用时机
- auto 模式如何用安全分类器取代询问
- 如何构建一份合理的初始允许清单,在不牺牲安全的前提下减少询问
- 项目级与个人级权限规则分别存放在哪里
权限决定了 Claude Code 在不停下来询问你的情况下能做什么。调好了,你既有顺畅的工作流又不失掌控;调坏了,你要么对一切机械地放行,要么被询问淹没。
三种裁决
每个潜在操作都会归结为以下三者之一:
1 / 3
规则通常匹配某个工具加上一个模式,例如允许 Bash(npm run test:*),或拒绝 Read(./.env)。
允许某个工具 + 模式
Bash(npm run test:*)
拒绝某个工具 + 模式
Read(./.env)
权限模式
模式为整个会话设定总体姿态。一共有六种。常用的几种可以用 Shift+Tab 循环切换,也可以在设置中指定 permissions.defaultMode。
| 模式 | 无需询问即可运行 | 适用场景 |
|---|---|---|
default(显示为 Manual) | 仅读取 | 日常工作、敏感改动 |
acceptEdits | 读取、文件编辑、常见文件系统命令 | 一个可信、范围明确的编辑会话 |
plan | 仅读取;只提方案,从不编辑 | 大型/有风险任务——见规划模式 |
auto | 一切操作,但由安全分类器把关 | 长任务,真正的风险是询问疲劳 |
dontAsk | 只有预先批准的工具;其余一律拒绝 | 受限的 CI 与脚本 |
bypassPermissions | 一切操作,不做任何检查 | 仅限沙箱/容器——绝不要在有密钥的机器上用 |
Auto 模式
auto 是"对一切都询问"与"关闭安全机制"之间的折中。它不再询问你,而是由一个独立的分类器模型在每个操作执行前进行审查,阻止那些超出你所要求范围的升级行为、触及它不认识的基础设施的行为,或者看起来是由 Claude 刚读到的恶意内容所驱动的行为。明确的 ask 规则仍然会停下来询问你。
它会阻止诸如 curl | bash、强制推送、生产环境部署与数据库迁移、以及把密钥发送到外部端点之类的操作——同时让常规工作(本地编辑、安装已声明的依赖、只读 HTTP 请求、推送到你自己的分支)畅通无阻。如果它反复阻止同一个操作,auto 模式会暂停,并把询问权交还给你。
Auto 模式并非安全保证——它减少询问,但并不免除你审查敏感操作的必要。它是否可用取决于你的套餐、模型,以及(在 Team/Enterprise 上)管理员的开关。
- bypassPermissions 只属于沙箱。在你的真实机器上关闭所有询问运行,正是智能体最终碰到它不该碰的东西的方式。请把它留给一次性环境——如果你真正想要的是更少的询问,那就改用 auto 模式。见“加固自主运行”:/docs/security/hardening-autonomous-runs。
一份合理的初始允许清单
目标:预先允许那些安全、重复的操作;把破坏性操作保持在 ask 或 deny。
Guided walkthrough1 of 3
- 读取文件,运行你的 test/lint/build 命令,git status/diff。
- 安装依赖,向项目外写文件,网络调用。
- 读取密钥文件(.env、密钥文件),强制推送,rm -rf。
把项目规则存到 settings.json(共享),把个人覆盖项存到 settings.local.json。
- 让它从你的批准中学习:对同一个安全命令批准几次之后,你就会清楚该往允许清单里加什么——把反复出现的询问变成一次性的规则。
- 三种裁决:allow(不询问)、ask(默认——暂停并确认)、deny(绝不执行)。
- 规则匹配某个工具加上一个模式,例如 Bash(npm run test:*) 或 Read(./.env)。
- 六种模式设定会话姿态:default(Manual)、acceptEdits、plan、auto、dontAsk、bypassPermissions。
- auto 模式用安全分类器筛查每个操作,而不是询问你——应对询问疲劳该用它,而不是 bypassPermissions。
- 构建允许清单:允许安全且重复的操作,对中等风险的操作询问,拒绝破坏性操作。
- 共享规则放进 settings.json;个人覆盖项放进 settings.local.json。
自测一下
0/5下一步
- settings.json:配置系统
- 钩子——以确定性方式强制规则,超越 allow/deny
- 安全与负责任使用