Claude Code 的权限模式决定了哪些操作无需询问就能执行。default(显示为 Manual)在编辑文件和执行 shell 命令前都会询问。acceptEdits 还会放行文件编辑和常见文件命令。plan 让 Claude 只读代码并提出方案,不做修改。auto 由后台分类器代替你批准操作。dontAsk 会拒绝所有需要询问的操作。bypassPermissions(由 --dangerously-skip-permissions 开启)几乎完全跳过询问,只适合在隔离的容器或虚拟机中使用。按 Shift+Tab 可循环切换模式,也可以用 claude --permission-mode <mode> 启动。
本指南基于 Anthropic 的权限模式文档。Claude Code 更新频繁,请以你所用版本的文档为准。
01六种模式一览
default(Manual)仅读取需要逐一审核每个操作、处理敏感工作acceptEdits读取、编辑文件,以及在工作目录内执行 mkdir、touch、mv、cp 等常见文件系统命令在你盯着的情况下迭代代码plan读取;批准计划前禁止编辑动手修改前先摸清情况auto所有操作,但每个操作执行前都会先经过分类器检查长任务,减少 prompt 次数dontAsk读取工作目录和预先批准的工具;其余一律拒绝CI 和受限脚本bypassPermissions所有操作,少数例外仅限隔离的容器和虚拟机default 是在设置、hook 和 --permission-mode 参数中使用的名称。CLI、IDE 扩展和桌面应用里显示为 Manual,CLI 也接受 manual 作为别名。
02如何切换模式
在 terminal 中按 Shift+Tab。切换顺序为 default、acceptEdits、plan,然后是当前会话允许的其他可选模式。dontAsk 不会出现在循环中,只能通过参数设置。
以指定模式启动会话:
claude --permission-mode plan
要把某个模式设为默认,在 ~/.claude/settings.json 中设置:
{
"permissions": {
"defaultMode": "acceptEdits"
}
}
参数优先于设置,设置优先于内置默认值。有一条限制值得注意:auto 和 bypassPermissions 在项目的 .claude/settings.json 或 .claude/settings.local.json 中设置不会生效。也就是说,仓库无法悄悄把你切到 bypass 模式。这两个模式请在用户设置中配置,或者通过参数传入。
新会话的初始模式
较新版本的 Claude Code(v2.1.283 及以上)在 auto 模式可用时,交互式 terminal 和 VS Code 会话默认以 auto 启动,除非你的设置另有指定。claude -p 和 Agent SDK 则以 default 启动。如果你从没选过模式,却发现 prompt 很少,原因就在这里。
03各模式详解
default(Manual)
Claude 可以直接读取文件。编辑、shell 命令和网络访问都会弹出 prompt。在 Bash prompt 中选择“Yes, and don't ask again”,会在 .claude/settings.local.json 中保存一条 allow 规则,之后在这个仓库里该命令就不会再询问。文件编辑的批准在会话结束前一直有效。
acceptEdits
工作目录内的编辑和简单文件命令(mkdir、touch、rm、rmdir、mv、cp、sed)无需 prompt 直接执行,其他 shell 命令仍会询问。如果你会实时盯着 diff,这是个不错的折中选择。
plan
Claude 通过读取和只读命令进行探索,然后给出计划。在你批准之前,源码不会有任何改动。适合陌生代码或高风险修改。
auto
每个操作执行前都会由一个独立模型审查,超出你请求范围、指向它不认识的基础设施,或疑似受恶意内容驱使的操作会被拦截。显式的 ask 规则仍会弹出 prompt。如果分类器连续拦截 3 次,或单个会话累计拦截 20 次,auto 模式会暂停,恢复正常的 prompt 流程。Anthropic 官方的说法是:auto 模式“减少权限 prompt,但不保证安全”。
dontAsk
凡是需要 prompt 的操作一律拒绝,只执行 allow 规则允许的操作和本就无需批准的操作。它是为脚本和 CI 准备的,因为那里没人能回应 prompt。
bypassPermissions 与 --dangerously-skip-permissions
--dangerously-skip-permissions 等同于 --permission-mode bypassPermissions。所有 prompt 都会跳过,包括写入 .git、.claude 等受保护路径。少数情况在任何模式下都会询问或被拒绝,包括显式的 ask 规则、AskUserQuestion 以及某些危险的 rm 命令。deny 规则依然生效。
Anthropic 建议只在无网络访问的容器、虚拟机或 dev container 中使用。在 Mac 和 Linux 上,如果不在可识别的沙箱中,Claude Code 会拒绝以 root 或 sudo 身份在此模式下启动。如果只想让 bypass 可选而不直接开启,可以用 --allow-dangerously-skip-permissions,它会把该模式加入 Shift+Tab 循环,但不会切换过去。
04规则叠加在模式之上
模式决定基线,设置中的权限规则用于微调:
{
"permissions": {
"allow": ["Bash(npm run test *)"],
"ask": ["Bash(git push *)"],
"deny": ["Read(./.env)"]
}
}
规则按 deny、ask、allow 的顺序检查,第一条匹配的规则生效。deny 规则在所有模式下都会拦截,包括 bypassPermissions。allow 规则在 bypassPermissions 下不起作用,因为那里本来就全部放行。运行 /permissions 可以查看所有规则及其来源文件。
hook 也可以参与进来。PreToolUse hook 能在任何模式下拦截工具调用。PermissionRequest hook 可以替你回应 prompt,但无法覆盖 deny 规则。具体做法见 PermissionRequest 指南。
05离开电脑时该选哪种模式
大家想用 --dangerously-skip-permissions,通常是想让 Claude 自己跑着,回来时不会发现会话卡在某个 prompt 上。这个问题确实存在,但 bypass 模式的解法是在你自己的机器上彻底取消你的把关。
几种更安全的组合:
- 给无聊的命令加 allow 规则。把测试、lint 和构建命令加到
allow,git push和部署保留ask,模式保持default或acceptEdits。 - auto 模式:适合长任务,前提是你愿意让分类器来判断常规操作。
- 让 prompt 找到你。保留会询问的模式,在手机上回应那几个真正重要的 prompt。
最后一种正是 Claude Code Notifier 的做法。它是独立工具,并非 Anthropic 出品。它的命令行工具 ccn 以 Claude Code hook 的形式运行在 Mac、Windows 和 Linux 上。当 Claude Code 要请求权限而你不在键盘前时,请求会发到你配对的 iPhone 或 Android 手机上,你可以选择允许一次、本会话内允许或拒绝。它只会收到 Claude Code 本来就要显示的 prompt,所以哪些操作需要询问仍由模式和你的规则决定。在 auto 模式下请求会少一些;在 bypassPermissions 下则完全没有,不过“Claude 已完成”提醒和提问仍会送达。设置方法见手机审批指南,风险分析见在手机上审批安全吗?。
06常见问题
default 和 acceptEdits 有什么区别?
default 在每次编辑文件和执行 shell 命令前都会询问。acceptEdits 则允许在工作目录内直接编辑文件,以及运行 mkdir、mv、cp 等常见文件命令,无需询问。其他 shell 命令在两种模式下都会弹出 prompt。
--dangerously-skip-permissions 和 bypassPermissions 是一回事吗?
是的。这个 flag 等同于 --permission-mode bypassPermissions。Anthropic 建议只在隔离的容器或虚拟机中使用,最好断开网络。
怎样让 Claude Code 对某条命令不再请求权限?
在 prompt 上选择“Yes, and don't ask again”,或者在设置的 permissions.allow 下添加一条 allow 规则,例如 "Bash(npm test)"。这比切换整个模式更安全。
项目设置能把我切到 bypassPermissions 模式吗?
不能。写在 .claude/settings.json 或 .claude/settings.local.json 里的 bypassPermissions 和 auto 不会生效。它们只能通过用户设置、托管设置或命令行 flag 启用。
bypassPermissions 模式下 hook 还会运行吗?
会。hook 在所有模式下都会运行,即使在 bypassPermissions 下,拒绝工具调用的 PreToolUse hook 也能拦截它。PermissionRequest hook 只在有 prompt 需要回应时才运行,所以在 bypass 模式下很少触发。