用法
Claude Code 权限模式详解:default、acceptEdits、plan、auto 和 bypassPermissions
搜“跳过权限确认”的人,多半是被一个接一个的确认弹窗烦到了。这一页按 Anthropic 官方的 Choose a permission mode 文档,把每种权限模式能免确认的操作、切换方法和限制讲清楚,并说明 bypassPermissions 为什么只适合隔离环境。模式名、参数、设置项和行为都取自这份文档,2026 年 10 月 30 日核对。
- 权限模式决定 Claude 在一次会话里哪些操作可以不先问你。
default在 CLI 里显示为 Manual,只有读取不用确认。 - 按文档,Claude Code v2.1.283 或更高版本里,auto 模式是交互式终端和 VS Code 会话的内置起始模式。弹窗多,先看看自己是不是已经在 auto 模式里。
- 想少点确认又不想裸奔:用
acceptEdits,或者用auto,由另一个分类器模型代你审查操作。官方说bypassPermissions对提示注入和意外操作没有任何保护。 bypassPermissions只该在容器、虚拟机这类隔离环境里用;deny 规则在所有模式下都生效,包括它。- 用
Shift+Tab切换模式,用--permission-mode或permissions.defaultMode设置起始模式。
有哪些权限模式
官方文档说,权限模式决定 Claude 在会话里不用先问你就能做哪些事。Manual 模式下,Claude Code 在大多数编辑文件、运行 shell 命令或访问网络的操作前停下来问你。下表是文档里“每种模式不弹确认就能做什么”的表,Manual 模式在配置里的值是 default。
| 模式 | 不问就能做的事 | 适合 |
|---|---|---|
default | 只读取 | 自己审查每个操作、敏感工作 |
acceptEdits | 读取、文件编辑,以及常见的文件系统命令(mkdir、touch、mv、cp 等) | 迭代你正在审查的代码 |
plan | 读取;auto 模式可用时,还包括分类器批准的命令 | 改代码之前先摸清代码库 |
auto | 所有操作,后台做安全检查 | 长任务、减轻确认疲劳 |
dontAsk | 工作目录内的文件读取和预先批准的工具;其他会弹窗的操作一律拒绝 | 锁死的 CI 和脚本 |
bypassPermissions | 所有操作 | 只用于隔离的容器和虚拟机 |
审查每个操作的那个模式,在 CLI、claude --help、VS Code 和 JetBrains 扩展以及桌面应用里叫 Manual,配置值是 default,hooks 和 SDK 集成用的也是这个值。CLI 在你输入值的地方都接受别名 manual,例如 claude --permission-mode manual 或 "defaultMode": "manual"。
怎么切换模式
会话中:按 Shift+Tab 轮换权限模式。从 auto 出发,第一次按会切到 default,之后的顺序是 default → acceptEdits → plan,可选的模式排在 plan 之后。状态栏会显示当前模式:
| 模式 | 状态栏显示 |
|---|---|
default | 灰色的 ⏸ manual mode on |
acceptEdits | ⏵⏵ accept edits on |
plan | ⏸ plan mode on |
auto | ⏵⏵ auto mode on |
dontAsk | ⏵⏵ don't ask on |
bypassPermissions | ⏵⏵ bypass permissions on |
不是每个模式都在默认的轮换里:
auto:auto 模式可用时出现;轮换到它时,切换权限模式不会弹确认。bypassPermissions:用--permission-mode bypassPermissions、--dangerously-skip-permissions、--allow-dangerously-skip-permissions启动,或在用户、--settings或托管设置里设置permissions.defaultMode: "bypassPermissions"之后才出现。--allow-这个变体只把该模式加进轮换,不会激活它。dontAsk:永远不在轮换里,用--permission-mode dontAsk设置。
可用的可选模式排在 plan 之后,bypassPermissions 在前、auto 在最后;两个都开了,轮换到 auto 的路上会经过 bypassPermissions。
从 Bash 权限提示里:在 Manual 和 acceptEdits 模式下,auto 模式可用时,Bash 命令的权限提示里会多一个 Yes, and switch to auto mode,选它会批准这条命令并把会话切到 auto 模式。PowerShell 工具的提示没有这个选项,需要 Claude Code v2.1.247 或更高版本。被你的 ask 规则或 hook 强制出现的提示里不会加这个选项,因为 auto 模式仍然会把这些提示展示给你,切过去也去不掉它们。
启动时:用参数指定模式,同一个 --permission-mode 参数也能配合 -p 用于非交互运行:
claude --permission-mode plan
设成默认:在想要的作用范围里设置 permissions.defaultMode。VS Code 里点提示框底部的模式指示器,也可以用 claudeCode.initialPermissionMode 固定起始模式。
会话从哪个模式开始
在终端里开新会话时,Claude Code 按下面的先后顺序取第一个适用的:
--permission-mode参数,或--dangerously-skip-permissions- 某个设置文件里的
permissions.defaultMode - 内置默认值
内置默认值在 Claude Code v2.1.283 或更高版本里是 auto(在终端或 VS Code 扩展里);早期版本中,auto 只在 Pro、Max 或 Team 套餐、且会获取 feature flag 的会话里生效,其余是 default。claude -p 和 Agent SDK 的内置默认值是 default。如果有设置文件把 disableAutoMode 设成 "disable",起始模式也是 default。选中了 auto 但会话不满足 auto 模式的可用条件时,会话改在 Manual 下启动。
设置位置要注意,文档写得很具体:
| 想设置起始模式的范围 | 做法 |
|---|---|
| 即将开始的一次会话 | 传参数,例如 claude --permission-mode default |
| 这台机器上每个终端会话 | 在 ~/.claude/settings.json 里设置 permissions.defaultMode |
| 一个项目里每个终端会话 | 在项目的 .claude/settings.json 里设置 permissions.defaultMode。终端会话认可除 auto 和 bypassPermissions 之外的每个值 |
| 组织里每个终端会话 | 在托管设置里设置 permissions.defaultMode |
如果在 .claude/settings.json 或 .claude/settings.local.json 里写 "auto",这个值不生效;写 "bypassPermissions" 也不生效,会话会在 Manual 下启动。让每个终端会话都从 Manual 模式开始,把下面存进 ~/.claude/settings.json:
{
"permissions": {
"defaultMode": "default"
}
}
下一个会话的状态栏会显示 ⏸ manual mode on。
acceptEdits:自动批准文件编辑
acceptEdits 模式让 Claude 在工作目录里创建和编辑文件时不弹确认,激活期间状态栏显示 ⏵⏵ accept edits on。除了文件编辑,它还自动批准常见的文件系统 Bash 命令:mkdir、touch、rm、rmdir、mv、cp 和 sed。和文件编辑一样,自动批准只适用于工作目录或 additionalDirectories 之内的路径。
这些情况仍然会弹窗:
- 超出上述范围的路径
- 对受保护路径的写入
- 被识别为关键路径的
rm和rmdir删除 - 带有选项、通配符或前缀(如
timeout 5、LANG=C)的touch - 除内置只读命令集之外的所有其他 Bash 命令
文档建议:想事后在编辑器里或用 git diff 审查改动,而不是逐条批准时,用 acceptEdits。从 Manual 模式按一次 Shift+Tab 进入,或者直接启动:
claude --permission-mode acceptEdits
plan:先研究,不改代码
plan 模式让 Claude 研究并提出改动方案,但不实际改动。Claude 会读文件、运行探索用的 shell 命令、写出一份计划,但不编辑你的源码。在没有“可用的绕过权限”的情况下,编辑会一直被拦住,直到你批准计划。
规划期间 shell 命令怎么处理,取决于会话,按第一个匹配的情况算:
- 交互式终端会话且绕过权限可用:规划命令既不经分类器,也不弹窗。
- auto 模式可用,且
useAutoModeDuringPlan设置开启(默认就是开启):分类器审查除关键路径删除之外的 shell 命令,代替弹窗问你。批准的命令运行,被拒绝的被拦下。 - auto 模式不可用,或
useAutoModeDuringPlan关闭:内置只读命令集之外的命令会弹窗要求批准。
按 Shift+Tab 或在单条提示前加 /plan 进入 plan 模式,也可以从 CLI 直接启动:
claude --permission-mode plan
再按一次 Shift+Tab 可以不批准计划就退出 plan 模式。计划就绪后,Claude 会呈现计划并问你怎么继续,可选:
- Yes, and use auto mode:批准并在 auto 模式下开始。如果 auto 模式对当前会话不可用,这一项会显示为 Yes, auto-accept edits;如果会话是以启用绕过权限的方式启动的,则显示为 Yes, and switch to BYPASS PERMISSIONS (no further prompts) for this session。
- Yes, manually approve edits:批准,并逐条审查每次编辑。
- No, keep planning:留在 plan 模式,告诉 Claude 要改什么。
按 Ctrl+G 可以在默认文本编辑器里打开计划,在 Claude 继续之前直接修改。想让项目的终端会话默认进入 plan 模式,在 .claude/settings.json 里把 defaultMode 设为 plan。
auto:由分类器代你审查
auto 模式让 Claude 执行时不再有例行的权限弹窗。一个独立的分类器模型会在操作运行前审查它,拦下超出你请求范围的操作、指向不认识的基础设施的操作,以及看起来是被 Claude 读到的恶意内容驱动的操作。明确的 ask 规则仍然会强制弹窗。
文档里有一条明确的警告:
官方警告(原文)
Auto mode reduces permission prompts but does not guarantee safety. Use it for tasks where you trust the general direction, not as a replacement for review on sensitive operations.
意思是:auto 模式减少权限弹窗,但不保证安全;适合你信任大方向的任务,不能代替对敏感操作的审查。
auto 模式只有在账号满足以下全部条件时可用:
- 套餐:所有套餐。
- 组织:Team 和 Enterprise 上默认可用;管理员可以在托管设置里把
permissions.disableAutoMode设为"disable",为整个组织关掉它。 - 模型:在 Anthropic API 和 Claude Platform on AWS 上,是 Claude Opus 4.6 或更高、Sonnet 4.6 或更高、Haiku 5.5,或 Fable 模型。在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 和已登录的 Claude apps gateway 会话上,只支持 Claude Sonnet 5 或更高、Opus 4.7 或更高、Haiku 5.5 和 Fable 模型。包括 Sonnet 4.5、Opus 4.5、Haiku 4.5 和 claude-3 模型在内的旧模型,在任何提供商上都不支持。
- 提供商:在 Anthropic API、Claude Platform on AWS、Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 和已登录的 Claude apps gateway 会话上默认可用。
默认被拦下的操作包括(文档的列表更长):下载并执行代码(如 curl | bash)、把敏感数据发到外部端点、生产环境部署和迁移、force push、授予 IAM 或仓库权限,以及不可逆地销毁会话开始前就存在的文件。默认允许的包括:工作目录内的本地文件操作、安装 lock 文件或清单里声明的依赖、只读 HTTP 请求。运行 claude auto-mode defaults 可以把完整规则列表以 JSON 打印出来。
你在对话里说的边界会被分类器当成拦截信号:告诉 Claude“don't push”,分类器会拦下匹配的操作,即使默认规则允许。但边界不会存成规则,上下文压缩可能把写下边界的那条消息删掉;文档说,要硬性保证,请加一条 deny 规则。
回退:被拦下的操作会显示通知,并列在 /permissions 的 Recently denied 标签下,按 r 可以改用人工批准重试。如果分类器连续拦截 3 次或累计拦截 20 次,auto 模式会暂停,Claude Code 恢复弹窗;批准弹出的操作后,auto 模式恢复。这两个阈值不可配置。
成本和延迟:文档说,分类器请求可能运行在与 /model 所选不同的模型上;在 Enterprise 套餐,以及使用 Claude API、Claude Platform on AWS、Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 的账号上,分类器调用计入 token 用量。每次检查会发送一部分对话记录加上待执行的操作,在执行前多一次往返。读取和工作目录内(受保护路径之外)的编辑会跳过分类器,所以开销主要来自 shell 命令和网络操作。如果服务端在会话本身的模型请求里一并审查这些操作,就没有单独的分类器调用;把 ANTHROPIC_BASE_URL 指向网关或代理时,Claude Code v2.1.278 起默认会请服务端审查,但网关或代理丢掉审查请求或结果时,Claude Code 会回退到自己的分类器请求。/status 里 Auto mode server 显示 Enabled,说明分类器请求只用于服务端审查范围之外的调用。费用上的考虑见我们的 怎么少花 token。
bypassPermissions:跳过所有检查
bypassPermissions 模式关闭权限提示和安全检查,工具调用立即执行,包括对受保护路径的写入。这就是大多数人搜“跳过权限确认”想找的那个模式,但官方的警告很重:
官方警告(原文)
Only use this mode in isolated environments like containers, VMs, or dev containers without internet access, where Claude Code cannot damage your host system.
只在容器、虚拟机或没有网络的 dev container 这类隔离环境里使用,这样 Claude Code 不会损坏你的宿主系统。
官方警告(原文)
bypassPermissions offers no protection against prompt injection or unintended actions. For background safety checks with far fewer permission prompts, use auto mode instead.
意思是:bypassPermissions 对提示注入和意外操作没有任何保护;想要弹窗少得多、同时有后台安全检查,请改用 auto 模式。管理员可以在托管设置里把 permissions.disableBypassPermissionsMode 设为 "disable" 来禁止这个模式。
启用方式和限制:
- 不能从一个没启用它的会话里进入
bypassPermissions。要在启动时启用,用permissions.defaultMode: "bypassPermissions"或claude --permission-mode bypassPermissions;--dangerously-skip-permissions参数与它等价。 - 第一次以这个模式启动交互式会话时,Claude Code 会弹出警告对话框,要求你接受对无权限检查下所做操作的责任。接受后,Claude Code 在
~/.claude/settings.json里把skipDangerousModePermissionPrompt设为true,之后的会话跳过这个对话框;拒绝则 Claude Code 退出。 - 在 Linux 和 macOS 上,以 root 或
sudo运行时,Claude Code 拒绝以bypassPermissions启动。在已识别的沙箱里会自动跳过这项检查。要在容器里自主运行,使用 dev container 配置,它以非 root 用户运行 Claude Code。 - VS Code 里需要在扩展设置里打开 Allow dangerously skip permissions 开关,否则这个模式不出现在指示器里。
- 云端会话不认设置文件里的
defaultMode: "bypassPermissions"或"dontAsk",所以仓库里提交的设置没法让云端会话进入绕过权限模式。
即使在这个模式下,也有“任何模式都不自动批准”的操作,会弹窗或被拒绝:明确的 ask 规则匹配的工具、AskUserQuestion 这类需要用户交互的工具,以及被识别的 rm 和 rmdir 关键路径删除(例如 rm -rf /、rm -rf ~)。文档同时说明,关键路径检查可能漏掉一些命令,所以它不能替代沙箱这类操作系统层面的控制。
dontAsk:只允许预先批准的工具
设为 dontAsk 模式后,Claude Code 自动拒绝所有本来会弹窗的工具调用。工作目录内的文件读取、只读 Bash 命令、匹配你 permissions.allow 规则的操作,以及被 PreToolUse hook 批准的调用照常运行。文档的说法是,这个模式用于预先定义好 Claude 能做什么的 CI 流水线或受限环境,会话永远不会等待输入。hook 的写法见 Claude Code hooks 入门。启动参数:
claude --permission-mode dontAsk
CI 里配合精确白名单的例子(取自文档的 Common setups 表):
claude -p "run the test suite" --permission-mode dontAsk --allowedTools "Bash(npm test)" "Read"
用规则代替整体放开
文档说,模式设定的是基线,可以在上面叠加权限规则,预先批准或拦截具体的工具:
- deny 规则在每个模式下都拦截,包括
bypassPermissions。 - allow 规则在
bypassPermissions下没有效果。 - 在 auto 模式里,要在保持 auto 模式的同时给某些命令加人工检查点,加
permissions.ask规则。 - 进入 auto 模式时,授予任意代码执行的宽泛 allow 规则会被丢弃,例如
Bash(*)、PowerShell(*)、带通配符的解释器(如Bash(python*))、包管理器的 run 命令和Agentallow 规则;像Bash(npm test)这样范围窄的规则继续有效,离开 auto 模式时被丢弃的规则会恢复。 - 文档里“不弹窗又不用分类器”的另一种做法:Manual 模式加 Bash 沙箱的 auto-allow 模式,即
claude --permission-mode default,然后运行/sandbox并选择 auto-allow。要求内置 Bash 沙箱,支持 macOS、Linux 和 WSL2。
规则的具体语法见 Anthropic 的 Permissions 文档;/permissions 命令的用法见 Claude Code 常用命令大全。
受保护路径
对一小部分路径的写入永远不会被自动批准,只有 bypassPermissions 模式例外(以及绕过权限可用的交互式终端 plan 模式)。这是为了防止仓库状态和 Claude 自身配置被意外破坏。default 和 acceptEdits 下会弹窗,auto 下交给分类器,dontAsk 下直接拒绝。受保护的目录包括 .git、.vscode、.idea、.husky 和 .claude(有少数例外);受保护的文件包括 .gitconfig、.bashrc、.zshrc、.npmrc、.mcp.json 和 .claude.json 等,完整列表在文档的 Protected paths 一节。settings 文件里的 permissions.allow 规则不会预先批准对受保护路径的写入。
我该选哪个模式
下面几条是按上面的内容整理的建议,不是官方的决策树:
- 不熟悉的代码、敏感工作:
default(Manual)。 - 在自己盯着的代码上反复改:
acceptEdits,事后用git diff看改动。 - 要动手前先看懂代码库:
plan。 - 长任务、不想被弹窗打断,但又希望有安全检查:
auto,并记住官方说它不保证安全。 - CI 和脚本:
dontAsk加--allowedTools白名单。 - 真的要完全无人值守:
bypassPermissions,而且只在容器、虚拟机这类隔离环境里,并以非 root 用户运行。
常见问题
怎么让 Claude Code 别再弹权限确认?
先看当前模式:状态栏会显示,按 Shift+Tab 可以轮换。想少弹窗,文档里按风险从低到高的选择是 acceptEdits(只免文件编辑和常见文件系统命令的确认)、auto(分类器代你审查)和 bypassPermissions(关闭所有检查,只适合隔离环境)。官方明确说 bypassPermissions 对提示注入没有保护,想要弹窗少又有安全检查,用 auto 模式。
auto 模式为什么用不了,或者启动后变成了 Manual?
文档给出的常见原因:会话不满足可用条件(模型不受支持,或设置文件里有 disableAutoMode),或者 Anthropic 暂时在服务端关闭了它。另一个容易忽略的点:把 defaultMode: "auto" 写在 .claude/settings.json 或 .claude/settings.local.json 里不生效,终端会话会在 Manual 下无报错地启动,要把它移到 ~/.claude/settings.json。VS Code 里 claudeCode.initialPermissionMode 也不接受 auto,要在模式指示器里选一次 Auto。
bypassPermissions 下 Claude 真的什么都不会问吗?
不是。文档说,即使在这个模式下,明确的 ask 规则、AskUserQuestion 这类需要用户交互的工具、被识别的 rm 和 rmdir 关键路径删除仍然会弹窗或被拒绝;deny 规则也照常拦截。不过这不等于安全:文档同样说,这个模式对提示注入和意外操作没有保护,所以只该放在隔离环境里用。
来源
- Claude Code:Choose a permission mode(本文所有模式、参数、设置项、快捷键和限制)
- Claude Code:Permissions(allow、ask、deny 规则,上述文档指向的页面,本文未逐条引用)
- Claude Code:Configure auto mode(auto 模式可信基础设施配置,上述文档指向的页面,本文未逐条引用)