Claude Code 权限模式:四种模式怎么选、bypass 怎么解锁
一、四种权限模式:四个档位
Claude Code 有四种权限模式,按 Shift+Tab 循环切换:
| 档位 | 模式 | 行为 | 一句话 |
|---|---|---|---|
| ① | default | 每次工具调用都弹窗确认 | 凡事都要问 |
| ② | acceptEdits | 文件编辑自动放行,Bash、网络仍要确认 | 改代码不问,跑命令要问 |
| ③ | plan | 只读操作放行,写操作需确认 | 看可以,动要问 |
| 🔓 | bypassPermissions | 全部跳过,直接执行 | 你办事,我放心 |
档位序号是 Shift+Tab 的实际循环顺序,不是信任度从低到高。plan 和 default 之间不是简单的”谁比谁高”——plan 读操作更松,但写操作和 default 一样严。bypass 默认不在循环中,除非启动时额外配置。
二、前三档覆盖大部分日常
一次典型的编码会话,plan 和 acceptEdits 基本够用:
探索讨论时用 plan。 读代码、看架构、讨论方案,只做读操作,思路不被打断。
开始写代码时切 acceptEdits。 编辑文件自动放行,跑命令前还是看一眼——大模型可能幻觉,rm -rf 不是闹着玩的。
到这里,大部分人、大部分时候不会觉得缺什么。
三、什么时候需要 bypass
bypass 和前三档有本质区别——不是”更信任一步”,而是把安全带解开了。大模型会犯错,bypass 模式下没有确认环节,错的会被直接执行。
所以切 bypass 是一个有意识的取舍,典型场景有三种:
- 你在盯着。 方案已定,接下来是大量重复执行。你一直盯着屏幕,看到不对劲随时 Ctrl+C。每步弹窗确认反而多余——你人就是最后一道安全网。
- 你要离开。 有事要忙,想让 agent 继续跑一段。你知道有风险,但比起卡在弹窗上等你回来点确认,跑偏了起码还有东西可以回滚。
- 沙盒环境。 Docker 容器、云开发环境,系统本身是隔离的,搞不坏。bypass 的风险几乎为零。
三种场景的共同点:你知道自己在干什么,也清楚后果。
场景想清楚了,自然想切过去。按 Shift+Tab 一试——循环里根本没有。这是刻意设计的。
四、bypass 为什么要加门禁
bypass 解开了所有安全检查,如果允许随时切过去,等于安全带能在你走神时自己解开。
还有一个容易被忽略的风险:第三方 API 代理。如果你用的不是官方 API 直连,中间人可以在模型响应里注入恶意指令。正常情况下弹窗确认是一道人为审核关,你能在确认时发现异常。但 bypass 模式下,注入的指令会直接被执行,没有人拦。
换句话说,bypass 不只是”信任 agent”,而是”信任整条链路”。模型提供商、API 代理、网络传输——每一个环节都得信得过。
所以 Claude Code 给 bypass 加了一道门禁:只有启动时带 --allow-dangerously-skip-permissions 参数,bypass 才会出现在 Shift+Tab 循环里。没带,整个会话期间都是锁着的。
护栏在出发前决定要不要,不能在行驶中随便卸。
但问题也在这里:你必须提前预判”这趟会话后面会不会用到 bypass”。
预判不了的话,流程就变成酱紫:你跟 agent 聊了半小时,方案敲定,准备放手跑。一按 Shift+Tab,切不过去。只能关终端、重启、加 flag,从头来过。前面的上下文和确认过的方案,全部归零。
五、两步搞定:解锁 + 设默认
理想状态是:默认不进 bypass,但保留随时切过去的能力;起步模式别太烦人。
第一步:CLI 解锁 bypass
1
claude --allow-dangerously-skip-permissions
每次手动打比较烦,~/.zshrc 里加个别名:
1
alias cc="claude --allow-dangerously-skip-permissions"
这条命令只是让 bypass 出现在 Shift+Tab 循环里,不会自动切过去。起步还是默认模式,安全基线不变。
第二步:修改默认模式
两种方式,选其一即可。
方式一:CLI 参数(推荐,和别名一起用)
1
alias cc="claude --allow-dangerously-skip-permissions --permission-mode acceptEdits"
--permission-mode 直接指定起步模式,跟第一步的别名合并,一行搞定。
方式二:settings.json
1
2
3
4
5
{
"permissions": {
"defaultMode": "acceptEdits"
}
}
放项目级(.claude/settings.json,提交到仓库团队共享)或用户级(~/.claude/settings.json,只影响自己)都行。
六、配好之后的节奏
- 启动 — 默认 acceptEdits,编辑文件自动放行,跑命令要确认。日常够用
- 探索讨论 — 切 plan,读操作不打断
- 开始写代码 — 切回 acceptEdits
- 需要放手时 — 切 bypass,明确知道风险、愿意承担
- 完事 — 切回 acceptEdits,恢复安全基线
四个模式全部可用,起步适中,按需换挡。
七、总结
四种权限模式是四个档位:前三档覆盖日常,bypass 是主动承担风险的选择。它默认被锁住是合理的安全设计——弹窗确认不只是防 agent,也是在防整条链路。
用 --allow-dangerously-skip-permissions 解锁切换能力,配合 defaultMode: "acceptEdits" 设好起步档位,bypass 就成了一个需要清醒确认的工具,而不是默认状态。