Claude Code 权限模式决定每次操作前是否需要你批准。default 模式逐一询问,适合敏感工作;acceptEdits 自动接受文件编辑,方便快速迭代;plan 只读探索代码库不做修改;auto 用分类器自动判断安全性,减少打断;dontAsk 只允许预批准的工具,适合 CI;bypassPermissions 跳过全部检查,仅限隔离容器。切换方式:Shift+Tab 循环、--permission-mode 启动参数、settings.json 持久化默认值。

Claude Code 权限模式怎么配置、怎么切换

Claude Code 在每次编辑文件、运行 Shell 命令或发网络请求前,会暂停请求你审批。权限模式控制这个暂停的频率。default 模式逐一审批,较宽松的模式让 Claude 工作更长时间后再汇报。敏感工作多加管控,信任方向时少打断。

可用模式

模式 无需询问即可执行 适合场景
default 仅读操作 入门、敏感工作
acceptEdits 读操作、文件编辑、常见文件系统命令(mkdirtouchmvcp 等) 迭代代码、事后 git diff 审查
plan 仅读操作 改动前先探索代码库
auto 全部操作(后台安全检查) 长任务、减少询问疲劳
dontAsk 仅预批准的工具 锁定的 CI 和脚本
bypassPermissions 全部操作(仅限隔离环境) 容器、虚拟机、Dev Container

无论哪种模式,写受保护路径永远不会被自动批准(bypassPermissions 模式除外),防止意外损坏仓库状态和 Claude 自身配置。

模式设定基准,可在任何模式(bypassPermissions 除外)上叠加权限规则来预批准或拒绝特定工具。

怎么切换权限模式

在 CLI 中切换

会话中:按 Shift+Tab 循环 defaultacceptEditsplan。当前模式显示在状态栏。

特殊模式不在默认循环中:

  • auto:当你的账户满足 auto 模式条件 后,Shift+Tab 循环到 auto 会弹出确认提示,接受后 auto 模式加入循环;选择 No, don’t ask again 则从循环中移除
  • bypassPermissions:需要先使用 --permission-mode bypassPermissions--dangerously-skip-permissions--allow-dangerously-skip-permissions 启动,--allow- 变体将模式加入循环但不激活
  • dontAsk:永不进入循环,需通过 --permission-mode dontAsk 设置

启用的可选模式插入在 plan 之后,bypassPermissions 先于 auto。如果两者都启用,循环顺序为 defaultacceptEditsplanbypassPermissionsauto

启动时

claude --permission-mode plan

持久化默认值:在设置文件中设置 defaultMode

{
  "permissions": {
    "defaultMode": "acceptEdits"
  }
}

非交互模式(-p)同样支持 --permission-mode 标志。

在 VS Code 中切换

会话中:点击提示框底部的模式指示器。

持久化默认值:在 VS Code 设置中设置 claudeCode.initialPermissionMode,或使用扩展设置面板。

模式指示器 UI 标签与模式对应:

UI 标签 模式
Ask before edits default
Edit automatically acceptEdits
Plan mode plan
Auto mode auto
Bypass permissions bypassPermissions

Auto 模式需要先在扩展设置中启用 Allow dangerously skip permissions 才会出现在指示器菜单中,但仍需账户满足所有 auto 模式条件才可激活。claudeCode.initialPermissionMode 不接受 auto,要默认以 auto 模式启动,请在用户设置文件中设置 defaultMode: "auto"(项目或本地设置中 defaultMode: "auto" 会被忽略)。

Bypass permissions 同样需要 Allow dangerously skip permissions 开关才会出现在指示器中。

详见 VS Code 指南

在 JetBrains 中切换

JetBrains 插件将 Claude Code 运行在 IDE 终端中,切换方式与 CLI 相同:按 Shift+Tab 循环,或在启动时传递 --permission-mode

在 Desktop 中切换

在发送按钮旁的模式选择器中切换。Auto 和 Bypass permissions 需要先在 Desktop 设置中启用才会出现。详见 Desktop 指南

claude.ai 上切换

claude.ai/code 或移动应用的提示框旁使用模式下拉菜单。出现的模式取决于会话运行位置:

  • 云会话Claude Code on the web):提供 Auto accept edits 和 Plan mode。Ask permissions、Auto 和 Bypass permissions 不可用。
  • Remote Control 会话(在你的本地机器上):提供 Ask permissions、Auto accept edits 和 Plan mode。Auto 和 Bypass permissions 不可用。

对于 Remote Control,可以在启动宿主机时设置初始模式:

claude remote-control --permission-mode acceptEdits

acceptEdits:自动接受文件编辑

acceptEdits 模式让 Claude 无需询问即可在工作目录中创建和编辑文件。状态栏显示 ⏵⏵ accept edits on

除文件编辑外,还自动批准这些常见文件系统 Bash 命令:mkdirtouchrmrmdirmvcpsed。带安全环境变量前缀(如 LANG=CNO_COLOR=1)或进程包装器(如 timeoutnicenohup)的命令同样自动批准。

如果启用了 PowerShell 工具acceptEdits 模式也会自动批准 Set-ContentAdd-ContentClear-ContentRemove-Item 及其常见别名,但仅限作用域内路径,且受保护路径规则同样适用。

自动批准仅适用于工作目录或 additionalDirectories 内的路径。目录外的路径、向受保护路径的写入、其他所有 Bash 命令仍然询问。

适合场景:在编辑器或 git diff 里事后审阅变更,而不是内联逐一批准每次编辑。

从 default 模式按一次 Shift+Tab 进入,或直接启动:

claude --permission-mode acceptEdits

plan:只读规划不做修改

Plan 模式告诉 Claude 只研究和提案,不做修改。Claude 可以读取文件、运行 Shell 命令探索、写出方案,但不编辑源代码。权限提示与 default 模式相同。

Shift+Tab 进入,或用 /plan 前缀单条提示,也可以启动时指定:

claude --permission-mode plan

再按一次 Shift+Tab 退出 plan 模式而不批准方案。

审查和批准方案

方案完成后,Claude 弹出对话框询问如何继续:

  • 批准并以 auto 模式开始
  • 批准并接受编辑
  • 批准并逐一审阅每次编辑
  • 继续规划并提供反馈
  • Ultraplan 在浏览器中精化

批准方案会退出 plan 模式,切换到对应批准选项描述的权限模式,Claude 开始编辑。要再次规划,按 Shift+Tab 回到 plan 模式,或给下一条提示加 /plan 前缀。

Ctrl+G 可以在默认文本编辑器中打开方案,直接编辑后再让 Claude 继续。如果启用了 showClearContextOnPlanAccept,每个批准选项还提供先清除规划上下文的选项。

批准方案会自动将会话命名为方案内容,除非已经用 --name/rename 设置了名称。

将 plan 模式设为默认

.claude/settings.json 中设置 defaultMode

{
  "permissions": {
    "defaultMode": "plan"
  }
}

auto:消除询问提示

Auto 模式需要 Claude Code v2.1.83 或更高版本。

Auto 模式让 Claude 无需权限提示即可执行。一个独立的分类器模型在执行前审查操作,阻止任何超出请求范围、针对未知基础设施、或由 Claude 读取的恶意内容驱动的操作。

Auto 模式还会促使 Claude 继续工作而不停下来问澄清问题,但当你明确要求或某个技能要求时 Claude 仍会提问。如果想在保留权限提示的同时获得更强的自主行为,请设置主动输出风格

Auto 模式是一个研究预览版。它能减少提示,但不能保证安全。适合用于信任大致方向的场景,不能替代对敏感操作的人工审查。

可用条件

Auto 模式仅在满足以下所有条件时才可用:

  • 计划:所有计划(包括 Pro、Max、Team、Enterprise)。
  • 管理员:Team 和 Enterprise 上,管理员须先在 Claude Code 管理设置 中启用。管理员也可在托管设置中设置 permissions.disableAutoMode: "disable" 锁定关闭。
  • 模型:Claude Sonnet 4.6、Opus 4.6 或 Opus 4.7。旧型号(包括 Sonnet 4.5、Opus 4.5、Haiku、claude-3 系列)不支持。
  • 提供商:仅 Anthropic API。Bedrock、Vertex、Foundry 不支持。

如果 Claude Code 报告 auto 模式不可用,说明某个条件未满足,这不是临时故障。如果看到一条消息说 auto 模式“cannot determine the safety”并带有模型名称,那是分类器临时故障,参见错误参考

如果 settings.json 中设置了 defaultMode: "auto",但会话以 default 模式启动且没有报错,那么这个设置很可能位于 .claude/settings.json.claude/settings.local.json 中。Claude Code 会忽略这些文件中的 auto 设置,以防止仓库自行授权 auto 模式。请将其移到 ~/.claude/settings.json

分类器默认阻止什么

分类器信任你的工作目录和仓库配置的远程地址,其他一切视为外部,直到你配置信任的基础设施

默认阻止

  • 下载并执行代码(如 curl | bash
  • 向外部端点发送敏感数据
  • 生产环境部署和迁移
  • 云存储批量删除
  • 授予 IAM 或仓库权限
  • 修改共享基础设施
  • 不可逆地删除会话开始前就存在的文件
  • Force push 或直接推送到 main

默认允许

  • 工作目录内的本地文件操作
  • 安装 lock file 或 manifest 中声明的依赖
  • 读取 .env 并将凭证发送给匹配的 API
  • 只读 HTTP 请求
  • 推送到你启动时所在分支或 Claude 创建的分支
  • 沙箱网络访问请求(除非配置为阻止)

沙箱网络访问请求会路由到分类器而不是默认允许。运行 claude auto-mode defaults 查看完整规则。如果常规操作被阻止,管理员可通过 autoMode.environment 设置添加受信任的仓库、存储桶和服务:参见配置 auto 模式

对话中声明的边界

你在对话中声明的边界会被分类器视为阻止信号。例如告诉 Claude“不要推送”或“等我审阅后再部署”,分类器会阻止对应操作,即使默认规则允许。边界一直有效,直到你在后续消息中解除。Claude 自身判断某个条件已满足不会自动解除边界。

边界不作为规则存储。分类器每次检查时从对话记录中重新读取,因此如果上下文压缩移除了声明边界的消息,边界可能会丢失。对于硬性保证,请添加拒绝规则

自动模式回退

每次被拒绝的操作会显示通知,并出现在 /permissions 的“Recently denied”标签下,按 r 可手动审批后重试。

如果分类器连续阻止 3 次或总计阻止 20 次,auto 模式暂停并恢复询问(完全 prompting)。批准下一个被提示的操作后 auto 模式恢复。这些阈值不可配置。任何允许的操作会重置连续计数器,总计计数器在会话期间持续存在,仅在自身触发回退后重置。

在非交互模式(-p)下,连续阻止会中止会话,因为没有用户可以提示。

连续阻止通常意味着分类器缺少关于你基础设施的上下文。使用 /feedback 报告误报,或请管理员配置信任的基础设施

分类器如何评估动作

每个动作经过固定的决策顺序,第一个匹配的步骤胜出:

  1. 匹配你的允许或拒绝规则的动作立即决策
  2. 工作目录内的只读动作和文件编辑自动批准(受保护路径除外)
  3. 其他所有动作进入分类器
  4. 如果分类器阻止,Claude 收到原因并尝试替代方案

进入 auto 模式时,授予任意代码执行的宽泛允许规则会被丢弃:

  • 通配 Bash(*)PowerShell(*)
  • 通配解释器如 Bash(python*)
  • 包管理器运行命令
  • Agent 允许规则

狭窄规则如 Bash(npm test) 保留。丢弃的规则在退出 auto 模式时恢复。

分类器看到用户消息、工具调用和你的 CLAUDE.md 内容。工具结果被剥离,因此文件或网页中的恶意内容无法直接操纵分类器。一个单独的服务器端探针会扫描传入的工具结果,在 Claude 读取前标记可疑内容。更多关于这些层次如何协同工作,请参见 auto 模式博客工程深度分析

Auto 模式如何处理子代理

分类器在三个点检查子代理的工作:

  1. 子代理启动前,评估被委托的任务描述,因此看起来危险的任务在生成时就被阻止。
  2. 子代理运行时,它的每个动作经过与父会话相同的分类器规则,子代理的 permissionMode 被忽略。
  3. 子代理结束时,分类器审查其完整动作历史;如果返回检查标记了问题,子代理结果前会附加安全警告。

成本和延迟

分类器运行在独立于你 /model 选择的服务器配置模型上,因此切换模型不会改变分类器可用性。分类器调用计入 token 用量。每次检查发送部分对话记录加上待定动作,在执行前增加一次往返。读取和工作目录编辑(非受保护路径)跳过分类器,因此开销主要来自 shell 命令和网络操作。

dontAsk:只允许预批准的工具

dontAsk 模式自动拒绝每个会触发提示的工具调用。只有匹配 permissions.allow 规则和只读 Bash 命令的动作可以执行;显式的 ask 规则被拒绝而不是提示。这使得该模式对于 CI 管道或受限环境完全非交互式,你可以预先定义 Claude 能做什么。

启动时设置:

claude --permission-mode dontAsk

bypassPermissions:跳过所有检查

bypassPermissions 模式禁用权限提示和安全检查,工具调用立即执行。从 v2.1.126 开始,这包括对受保护路径的写入(旧版本仍会提示)。但针对文件系统根目录或主目录的删除操作(如 rm -rf /rm -rf ~)仍会提示,作为防止模型错误的断路器。

仅在隔离环境中使用,如没有互联网访问的容器、VM 或 Dev Container,确保 Claude Code 无法损坏宿主系统。

你不能从一个没有启用标志的会话中进入 bypassPermissions;需要重新启动并带上标志:

claude --permission-mode bypassPermissions

--dangerously-skip-permissions 标志等价。

在 Linux 和 macOS 上,Claude Code 拒绝以 root 或 sudo 权限在此模式下启动:

--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons

在识别到的沙箱中此检查自动跳过。要在容器中自主运行,请使用 dev container 配置,该配置以非 root 用户运行 Claude Code。

bypassPermissions 不提供对提示注入或意外操作的任何保护。如需无提示的后台安全检查,请改用 auto 模式。管理员可在托管设置中设置 permissions.disableBypassPermissionsMode: "disable" 来禁止此模式。

受保护路径

在除 bypassPermissions 之外的所有模式中,向以下路径写入永远不会自动批准。这防止意外损坏仓库状态和 Claude 自身配置。在 defaultacceptEditsplan 模式下这些写入会提示;auto 模式下路由到分类器;dontAsk 模式下被拒绝;bypassPermissions 模式下允许。

受保护目录

  • .git
  • .vscode
  • .idea
  • .husky
  • .claude(例外:.claude/commands.claude/agents.claude/skills.claude/worktrees 允许 Claude 常规创建内容)

受保护文件

  • .gitconfig.gitmodules
  • .bashrc.bash_profile.zshrc.zprofile.profile
  • .ripgreprc
  • .mcp.json.claude.json

常见问题

Shift+Tab 循环里没有 auto 模式,怎么加进去?

Auto 模式默认不在循环中,需要你的账户满足可用条件后,按 Shift+Tab 循环到 auto 模式时会出现 opt-in 提示,接受后 auto 模式就加入循环。如果选择 No, don’t ask again 会从循环中永久移除,后续需要重置设置。

acceptEdits 模式会自动执行所有 Bash 命令吗?

不会。只自动批准 mkdirtouchrmrmdirmvcpsed 这几个文件系统命令以及安全前缀变体,且仅限工作目录内的路径。其他 Bash 命令仍然询问。

bypassPermissions 模式为什么启动时报错 “cannot be used with root/sudo privileges”?

这是安全保护。如果你在 Linux 或 macOS 上以 root 或 sudo 运行,Claude Code 会拒绝此模式。解决方法:要么停止使用 root/sudo,要么使用 Dev Container 配置,它自动以非 root 用户运行。识别到的沙箱环境此检查自动跳过。