权限模式
权限模式(Permission Mode)是 Claude Code 的「自动驾驶等级」——从全程问你,到放手让它自己开,分了 6 档。选哪一档,决定了你和 Claude 之间的信任边界。
6 种模式一览
Section titled “6 种模式一览”把权限模式想象成汽车的驾驶辅助等级,从 L0 到 L5,越往后越放手。
| 模式 | 像什么 | 行为 |
|---|---|---|
default |
L0 全程脚放在刹车上 | 每个敏感操作(编辑文件、跑命令)都问你 |
acceptEdits |
L2 自适应巡航 | 自动接受文件编辑,但跑 bash 命令仍问你 |
plan |
停车场低速巡游 | 只读模式,只规划不动手,不改文件不跑命令 |
auto |
L3 有条件自动驾驶 | 分类器模型判断风险:安全操作自动放行,危险操作仍问你 |
dontAsk |
L4 大部分场景不问 | 不弹权限提示,但仍受 allow/deny 列表约束 |
bypassPermissions |
L5 完全脱手 | 跳过所有权限检查(危险,仅沙箱/容器内用) |
何时用哪一档
Section titled “何时用哪一档”default:陌生项目、第一次让它碰生产代码。acceptEdits:信任它的代码风格,但不想它乱跑rm -rf。plan:探索阶段,先想清楚再动手。auto:日常开发主力档,平衡效率和安全。dontAsk:CI 流水线、已知安全的批处理。bypassPermissions:Docker 容器、一次性虚拟机、故意让它放飞。
切换权限模式
Section titled “切换权限模式”两种方式:启动时指定,或会话中循环切换。
# 用 plan 模式启动,先只读分析claude --permission-mode plan
# CI 里跑全自动化claude --permission-mode dontAsk -p "跑测试并修复失败的用例"会话中切换:Shift+Tab
Section titled “会话中切换:Shift+Tab”按 Shift+Tab 在 Auto / Plan / Normal 之间循环切换,状态栏会显示当前档位。这是日常最常用的切换方式,不用退出会话。
Auto Mode 的工作原理
Section titled “Auto Mode 的工作原理”auto 模式不是简单放行,它背后跑着一个分类器模型:每当 Claude 想执行一个工具调用,分类器先评估这条操作的风险,再决定是放行还是问你。
Claude 想执行 → 分类器评估风险 → ├─ 低风险(如 Read、安全 Edit)→ 自动放行 └─ 高风险(如 Bash 删除命令、改 CI 配置)→ 弹权限提示这就像一个副驾驶帮你判断「这个变道安全吗」——大多数情况它比你判断得快,但最终决定权还在你手里。
配置 Auto Mode 的默认行为:
claude auto-mode defaults查看与更新权限
Section titled “查看与更新权限”会话中输入 /permissions 可以查看当前的权限规则,并实时增删。
/permissions它会列出三张表(见下一节),你可以选择允许、询问或禁止某个工具或路径。
权限规则语法
Section titled “权限规则语法”权限规则由三部分组成:工具 + 参数 + 决策(allow/ask/deny)。
| 工具 | 规则写法 | 说明 |
|---|---|---|
| Bash | Bash(prefix:*) |
匹配命令前缀,如 Bash(npm:*) 允许所有 npm 子命令 |
| Read | Read(path) |
匹配文件路径 |
| Edit | Edit 或 Edit(path) |
文件编辑 |
| WebFetch | WebFetch(domain) |
抓取域名 |
| MCP 工具 | mcp__<server>__<tool> |
命名格式为 mcp__服务器名__工具名 |
| 斜杠命令 | SlashCommand(name) |
自定义命令 |
# 允许跑 npm 和 git 子命令Bash(npm:*) allowBash(git:*) allow
# 改 src 下的文件不用问,但改 .env 必须问Edit(src/*) allowEdit(.env) ask
# 禁止删数据库Bash(rm -rf /:*) deny
# 允许某个 MCP 工具mcp__github__create_issue allowallow / ask / deny 三张表
Section titled “allow / ask / deny 三张表”权限规则分三张表,按优先级 deny > ask > allow 匹配。
| 列表 | 含义 | 用途 |
|---|---|---|
| allow | 直接放行,不问 | 信任的安全操作 |
| ask | 每次都问 | 半信任操作 |
| deny | 直接拒绝,不弹 | 红线操作 |
匹配顺序:先查 deny,命中就拒;否则查 ask,命中就问;否则查 allow,命中就放;都没有则按当前权限模式决定。
deny > ask > allow > 当前模式默认权限规则可以写在多个层级:
- 项目级:
.claude/settings.json的permissions字段(提交到仓库,团队共享) - 用户级:
~/.claude/settings.json(个人偏好) - 本地项目级:
.claude/settings.local.json(不提交,个人覆盖)
权限模式用得好是提效,用不好是事故。几条硬规矩:
- 生产代码用
default或acceptEdits——别图省事上bypassPermissions。 bypassPermissions只在容器/虚拟机里用——给它一个能炸但炸不到你的环境。deny表里永远放着危险命令——rm -rf /、git push --force、DROP TABLE。- CI 用
dontAsk而非bypassPermissions——前者仍受 deny 表约束,后者完全脱缰。 - 敏感目录用
Edit(path)显式 ask——.env、terraform/、k8s/都该进 ask 表。
// .claude/settings.json 示例{ "permissions": { "allow": ["Bash(npm:*)", "Bash(git:*)", "Edit(src/*)"], "ask": ["Edit(.env)", "Edit(k8s/*)"], "deny": ["Bash(rm -rf /*:*)", "Bash(git push --force*:*)"] }}权限模式是信任的刻度盘:从「全程盯」到「完全放手」共 6 档,
Shift+Tab随时换挡,/permissions精修边界。日常用auto,敏感用plan,容器里才用bypass——把方向盘留在自己手里,把油门交给分类器。
继续看 模型配置 了解怎么给 Claude 选脑子。🧠