Claude Code 权限模式决定每次操作前是否需要你批准。default 模式逐一询问,适合敏感工作;acceptEdits 自动接受文件编辑,方便快速迭代;plan 只读探索代码库不做修改;auto 用分类器自动判断安全性,减少打断;dontAsk 只允许预批准的工具,适合 CI;bypassPermissions 跳过全部检查,仅限隔离容器。切换方式:Shift+Tab 循环、--permission-mode 启动参数、settings.json 持久化默认值。
Claude Code 权限模式怎么配置、怎么切换
Claude Code 在每次编辑文件、运行 Shell 命令或发网络请求前,会暂停请求你审批。权限模式控制这个暂停的频率。default 模式逐一审批,较宽松的模式让 Claude 工作更长时间后再汇报。敏感工作多加管控,信任方向时少打断。
可用模式
| 模式 | 无需询问即可执行 | 适合场景 |
|---|---|---|
default |
仅读操作 | 入门、敏感工作 |
acceptEdits |
读操作、文件编辑、常见文件系统命令(mkdir、touch、mv、cp 等) |
迭代代码、事后 git diff 审查 |
plan |
仅读操作 | 改动前先探索代码库 |
auto |
全部操作(后台安全检查) | 长任务、减少询问疲劳 |
dontAsk |
仅预批准的工具 | 锁定的 CI 和脚本 |
bypassPermissions |
全部操作(仅限隔离环境) | 容器、虚拟机、Dev Container |
无论哪种模式,写受保护路径永远不会被自动批准(bypassPermissions 模式除外),防止意外损坏仓库状态和 Claude 自身配置。
模式设定基准,可在任何模式(bypassPermissions 除外)上叠加权限规则来预批准或拒绝特定工具。
怎么切换权限模式
在 CLI 中切换
会话中:按 Shift+Tab 循环 default → acceptEdits → plan。当前模式显示在状态栏。
特殊模式不在默认循环中:
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。如果两者都启用,循环顺序为 default → acceptEdits → plan → bypassPermissions → auto。
启动时:
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 命令:mkdir、touch、rm、rmdir、mv、cp、sed。带安全环境变量前缀(如 LANG=C、NO_COLOR=1)或进程包装器(如 timeout、nice、nohup)的命令同样自动批准。
如果启用了 PowerShell 工具,acceptEdits 模式也会自动批准 Set-Content、Add-Content、Clear-Content、Remove-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 报告误报,或请管理员配置信任的基础设施。
分类器如何评估动作
每个动作经过固定的决策顺序,第一个匹配的步骤胜出:
进入 auto 模式时,授予任意代码执行的宽泛允许规则会被丢弃:
- 通配
Bash(*)或PowerShell(*) - 通配解释器如
Bash(python*) - 包管理器运行命令
Agent允许规则
狭窄规则如 Bash(npm test) 保留。丢弃的规则在退出 auto 模式时恢复。
分类器看到用户消息、工具调用和你的 CLAUDE.md 内容。工具结果被剥离,因此文件或网页中的恶意内容无法直接操纵分类器。一个单独的服务器端探针会扫描传入的工具结果,在 Claude 读取前标记可疑内容。更多关于这些层次如何协同工作,请参见 auto 模式博客和工程深度分析。
Auto 模式如何处理子代理
分类器在三个点检查子代理的工作:
- 子代理启动前,评估被委托的任务描述,因此看起来危险的任务在生成时就被阻止。
- 子代理运行时,它的每个动作经过与父会话相同的分类器规则,子代理的
permissionMode被忽略。 - 子代理结束时,分类器审查其完整动作历史;如果返回检查标记了问题,子代理结果前会附加安全警告。
成本和延迟
分类器运行在独立于你 /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 自身配置。在 default、acceptEdits、plan 模式下这些写入会提示;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 命令吗?
不会。只自动批准 mkdir、touch、rm、rmdir、mv、cp、sed 这几个文件系统命令以及安全前缀变体,且仅限工作目录内的路径。其他 Bash 命令仍然询问。
bypassPermissions 模式为什么启动时报错 “cannot be used with root/sudo privileges”?
这是安全保护。如果你在 Linux 或 macOS 上以 root 或 sudo 运行,Claude Code 会拒绝此模式。解决方法:要么停止使用 root/sudo,要么使用 Dev Container 配置,它自动以非 root 用户运行。识别到的沙箱环境此检查自动跳过。