UP | HOME

权限模式

Table of Contents

控制 Claude 在编辑文件或运行命令前是否需要征求您的同意

当 Claude 想要编辑文件、运行 shell 命令或发起网络请求时,它会暂停并要求您批准该操作

权限模式控制暂停发生的频率

您选择的模式决定了会话的流程:

对于敏感工作选择更多的监督,或在您信任工作方向时选择更少的中断

可用模式

每种模式在便利性和监督之间做出不同的权衡。下表显示了在每种模式下 Claude 无需权限提示即可执行的操作

Table 1: 权限模式
模式 无需询问即可运行 最适合
default 仅读取 入门、敏感工作
acceptEdits 读取、文件编辑和常见文件系统命令(mkdir、touch、mv、cp 等) 迭代审查的代码
plan 仅读取 在更改前探索代码库
auto 所有操作,带有后台安全检查 长任务、减少提示疲劳
dontAsk 仅预先批准的工具 锁定的 CI 和脚本
bypassPermissions 所有操作 仅限隔离容器和虚拟机

在 CLI 中、claude –help 中、VS Code 和 JetBrains 扩展中以及桌面应用中,审查每个操作的模式被命名为 Manual 。其配置值为 default

这是 hooks 和 SDK 集成使用的值

CLI 在任何地方都接受 manual 作为别名,例如 claude --permission-mode manual 或 "defaultMode": "manual"

Manual 标签和 manual 别名需要 Claude Code v2.1.200 或更高版本。桌面应用的标签不依赖于您的 CLI 版本

在除 bypassPermissions 之外的每种模式中,对受保护路径的写入永远不会自动批准,保护存储库状态和 Claude 自己的配置免受意外损坏

  • 拒绝规则和显式询问规则适用于每种模式,包括 bypassPermission
  • 允许规则在该模式中无效,因为其他所有内容都已被批准

切换权限模式

可以在会话中途、启动时或作为持久默认值切换模式。模式通过这些控件设置,而不是通过在聊天中询问 Claude。选择下面的界面以查看如何更改它

CLI

在会话期间:按 Shift+Tab 循环切换 default → acceptEdits → plan。当前模式显示在状态栏中

手动模式(该循环中的 default)显示灰色的 ⏸ manual mode on 徽章

在 v2.1.203 之前,状态栏在手动模式下不显示徽章

并非每个模式都在默认循环中:

  • auto:当您的账户满足 auto 模式要求 时出现
    • 循环切换到它会在没有确认提示的情况下切换模式
  • bypassPermissions:在使用 –permission-mode bypassPermissions、–dangerously-skip-permissions 或 –allow-dangerously-skip-permissions 启动后出现
    • –allow- 变体会将模式添加到循环中而不激活它
  • dontAsk:永远不会在循环中出现
    • 使用 –permission-mode dontAsk 设置它

启用的可选模式在 plan 之后插入,bypassPermissions 优先,auto 最后

如果同时启用了两者,将在循环到 auto 的途中循环通过 bypassPermissions

在启动时:将模式作为标志传递

claude --permission-mode plan

作为默认值:在 设置 中设置 defaultMode

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

相同的 –permission-mode 标志适用于 -p 用于 非交互式运行

VS Code

在会话期间:点击提示框底部的模式指示器

  • 作为默认值:在 VS Code 设置中设置 claudeCode.initialPermissionMode,或使用 Claude Code 扩展设置面板

模式指示器显示这些标签,映射到每个标签应用的模式:

UI 标签 模式
Manual default
Edit automatically acceptEdits
Plan plan
Auto auto
Bypass permissions bypassPermissions
在 v2.1.205 之前,扩展将 plan 标记为 Plan mode,将 auto 标记为 Auto mode
  • 当您的账户满足 auto 模式部分 中列出的每项要求时,Auto 模式会在模式指示器中出现
    • claudeCode.initialPermissionMode 设置不接受 auto
    • 要默认以 auto 模式启动,请改为在您的 用户设置 中设置 defaultMode

      Claude Code 忽略项目和本地设置中的 defaultMode: "auto"
      
  • 绕过权限需要扩展设置中的 Allow dangerously skip permissions 切换,然后才能在模式指示器中出现
有关扩展特定的详细信息,请参阅 VS Code 指南

https://code.claude.com/docs/zh-CN/vs-code

Jetbrains

JetBrains 插件在 IDE 终端中运行 Claude Code,因此切换模式的工作方式与 CLI 中相同

按 Shift+Tab 循环切换,或在启动时传递 –permission-mode

使用 acceptEdits 模式自动批准文件编辑

acceptEdits 模式让 Claude 在工作目录中创建和编辑文件,无需提示

当此模式处于活动状态时,状态栏显示 accept edits on

除了文件编辑外,acceptEdits 模式还自动批准常见的文件系统 Bash 命令:mkdir、touch、rm、rmdir、mv、cp 和 sed

当这些命令带有安全环境变量(如 LANG=C 或 NO_COLOR=1)或

进程包装器(如 timeout、nice 或 nohup)作为前缀时,也会自动批准

与文件编辑一样,自动批准仅适用于工作目录或 additionalDirectories 内的路径

超出该范围的路径、对受保护路径的写入以及所有其他 Bash 命令(除了内置只读集合)仍然会提示

当启用 PowerShell tool 时,acceptEdits 模式还会自动批准 Set-Content、Add-Content、Clear-Content 和 Remove-Item 在范围内路径上的操作,以及它们的常见别名。相同的范围和受保护路径规则适用

当你想在编辑器中或通过 git diff 事后查看更改,而不是逐个批准每个编辑时,使用 acceptEdits

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

claude --permission-mode acceptEdits

使用 plan mode 在编辑前进行分析

Plan mode 告诉 Claude 研究并提议更改,但不进行实际编辑

  • Claude 读取文件、运行 shell 命令进行探索并编写计划,但不编辑您的源代码
  • 权限提示的应用方式与手动模式相同,除非 auto mode 可用且 useAutoModeDuringPlan 已启用(这是默认设置)

    启用 auto mode 后,分类器会批准只读命令(如搜索和文件读取)而无需提示
    
    无论哪种方式,编辑都会保持阻止状态,直到您批准计划
    

通过按 Shift+Tab 或在单个提示前加上 /plan 来进入 plan mode。也可以从 CLI 启动 plan mode:

claude --permission-mode plan

再次按 Shift+Tab 以退出 plan mode 而不批准计划

审查并批准计划

当计划准备好时,Claude 会呈现它并询问如何继续。从该提示中,可以:

  • 批准并在 auto mode 中启动
  • 批准并接受编辑
  • 批准并手动审查每个编辑
  • 继续规划并提供反馈
  • 使用 Ultraplan 进行基于浏览器的审查

批准计划会退出 plan mode 并将会话切换到每个批准选项描述的权限模式

因此 Claude 开始编辑。要再次规划,使用 Shift+Tab 循环回到 plan mode,或在下一个提示前加上 /plan

按 Ctrl+G 在默认文本编辑器中打开建议的计划并在 Claude 继续之前直接编辑它

  • 当启用 showClearContextOnPlanAccept 时,每个批准选项也会提供在首先清除规划上下文的选项

接受计划也会根据计划内容自动命名会话,除非您已经使用 –name 或 /rename 设置了名称

将 plan mode 设置为默认值

要使 plan mode 成为项目的默认值,请在 .claude/settings.json 中设置 defaultMode:

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

使用自动模式消除权限提示

自动模式让 Claude 无需例行权限提示即可执行。一个独立的分类器模型在操作运行前审查它们,阻止任何超出您请求范围、针对无法识别的基础设施或看起来由 Claude 读取的恶意内容驱动的操作

显式的询问规则仍然会强制显示提示

+针对文件系统根目录或主目录的删除操作,如 rm -rf / 和 rm -rf ~,会提示批准而不是进入分类器
+
当命令包含带有 $(...) 或反引号的命令替换,或带有 <(...) 的进程替换时,此提示也会触发

无论删除是在替换内部(如 echo "$(rm -rf ~)"),还是在同一命令的其他地方

在 v2.1.208 之前,包含这些形式的命令进入分类器而不是提示

自动模式还会促使 Claude 继续工作而不停下来提出澄清问题,尽管当您的提示或技能明确依赖它时,Claude 仍然会询问。为了获得更强的自主行为同时保持权限提示,请改为设置 主动 输出风格

自动模式减少权限提示,但不保证安全

将其用于您信任总体方向的任务,而不是作为敏感操作审查的替代品

如果 Claude Code 报告自动模式不可用,则其中一个要求未满足;这不是暂时性中断

一条单独的消息,其中命名了一个模型并说自动模式”无法确定”操作的安全性,是暂时性分类器中断

请参阅错误参考 https://code.claude.com/docs/zh-CN/errors#auto-mode-cannot-determine-the-safety-of-an-action

如果在设置中设置 defaultMode: "auto",并且会话以 default 模式启动且没有错误,则该设置可能在 .claude/settings.json 或 .claude/settings.local.json 中

Claude Code v2.1.142 及更高版本忽略来自这些文件的 auto

因此存储库无法授予自己自动模式,将其移至 ~/.claude/settings.json

Bedrock、Agent Platform 或 Foundry 上的自动模式

在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 和已登录的 Claude apps gateway 会话上,自动模式默认出现在 Shift+Tab 循环中。出现在循环中不会改变会话启动的模式:会话仍然以您的 defaultMode 启动,除非您更改它,否则为 Manual

这些提供商上仅支持 Claude Sonnet 5、Opus 4.7 和 Opus 4.8

要使自动模式成为默认启动模式,请在用户或托管设置中设置

"permissions": {"defaultMode": "auto"}

要防止开发人员使用自动模式,请在托管设置中将 disableAutoMode 设置为 "disable"。这会从 Shift+Tab 循环中移除 auto,并在启动时拒绝 –permission-mode auto

在 v2.1.158 到 v2.1.206 中,自动模式在这些提供商上是关闭的,直到设置 CLAUDE_CODE_ENABLE_AUTO_MODE=1,并且 Claude Code 在这些提供商上忽略 defaultMode: "auto",除非也设置了该变量

该变量仍然被接受以保持兼容性,从 v2.1.207 开始没有效果

分类器默认阻止的内容

分类器信任您的工作目录和为其配置的远程,这些远程在会话启动时被配置

在会话期间使用 git remote add 或 git remote set-url 添加或重新指向的远程不受信任

其他所有内容都被视为外部,直到您配置受信任的基础设施

在 v2.1.200 之前,中途添加的远程也受信任

默认阻止:

  • 下载和执行代码,如 curl | bash
  • 向外部端点发送敏感数据
  • 生产部署和迁移
  • 云存储上的大规模删除
  • 授予 IAM 或存储库权限
  • 修改共享基础设施
  • 不可逆地销毁会话前存在的文件
  • 强制推送
  • 当推送包含敏感内容(如秘密或个人或受托数据)、包含相对于您要求的隐藏或描述错误的更改、包含从存储库外部移植或首次读取的内容,或绕过您要求的拉取请求、审查或检查时,推送到存储库的默认分支

    普通推送到默认分支本身不会被阻止,清除标记的推送需要命名标记的内容或绕过的审查,而不仅仅是推送
    
    分类器是一个层:permissions.deny 规则在每种模式下都适用,可以完全阻止推送到默认分支,远程自己的分支保护仍然适用
    
    在 v2.1.203 之前,任何直接推送到默认分支都被阻止
    
  • git reset –hard、git checkout – .、git restore .、git clean -fd、git stash drop 或 git stash clear,分类器假设会丢弃未提交的更改
  • 当 HEAD 处的提交不是在此会话中创建的时,git commit –amend
  • 从 v2.1.198 开始,当 HEAD 处的提交已经被推送时,git commit –amend。仅消息重述不被阻止:–amend -m,没有新暂存的内容,在 Claude 在此会话期间创建的提交上
  • terraform destroy、pulumi destroy、cdk destroy 或 terragrunt destroy,以及应用销毁资源的计划

您在对话中陈述的边界

分类器将您在对话中陈述的边界视为阻止信号

如果您告诉 Claude”不要推送”或”等待我审查后再部署”,分类器会阻止匹配的操作,即使默认规则会允许它们

边界保持有效,直到您在后续消息中解除它

Claude 自己的判断条件已满足不会解除它

边界不作为规则存储。分类器在每次检查时从记录中重新读取它们,因此如果上下文压缩移除陈述它的消息,边界可能会丢失

为了获得硬保证,请改为添加拒绝规则

https://code.claude.com/docs/zh-CN/permissions#permission-rule-syntax

自动模式何时回退

每个被拒绝的操作显示通知并出现在 /permissions 下的”最近拒绝”选项卡中

您可以按 r 使用手动批准重试它

如果分类器连续 3 次或总共 20 次阻止操作,自动模式暂停,Claude Code 恢复提示

批准提示的操作恢复自动模式。这些阈值不可配置

任何允许的操作重置连续计数器,而总计数器在会话期间持续

仅当其自己的限制触发回退时重置

在非交互模式中使用 -p 标志,重复阻止会中止会话,因为没有用户可以提示

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

分类器如何评估操作

每个操作都经过固定的决策顺序。第一个匹配的步骤获胜:

  1. 与您的 允许、询问或拒绝规则 匹配的操作立即解决
    • 写入 受保护路径 的操作即使允许规则匹配也会路由到分类器
    • 组织设置为 ask 的连接器工具和标记为 requiresUserInteraction 的 MCP 工具即使允许规则匹配也会直接提示您

      内容范围的询问规则回退到权限提示
      
  2. 只读操作和工作目录中的文件编辑被自动批准,除了 受保护路径的写入
  3. 其他所有内容都进入分类器
    • 组织设置为 ask 的连接器工具跳过分类器并直接提示您,因此组织要求的批准从不被自动批准

      从 v2.1.199 开始,标记有 _meta["anthropic/requiresUserInteraction"] 的 MCP 工具也跳过分类器并直接提示您
      
      因此同意步骤从不代表工具作者自动批准
      
  4. 如果分类器阻止,Claude 接收原因并尝试替代方案

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

  • 笼统的 Bash* 或 PowerShell*
  • 通配符解释器,如 Bash(python *)
  • 包管理器运行命令
  • Agent 允许规则
窄规则如 Bash(npm test) 保留。丢弃的规则在您离开自动模式时恢复

分类器看到用户消息、工具调用和您的 CLAUDE.md 内容。工具结果被剥离,因此文件或网页中的恶意内容无法直接操纵它

一个单独的服务器端探针扫描传入的工具结果,并在 Claude 读取之前标记可疑内容

有关这些层如何协同工作的更多信息,请参阅自动模式公告和工程深潜

https://claude.com/blog/auto-mode

https://www.anthropic.com/engineering/claude-code-auto-mode

自动模式如何处理子代理

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

  1. 在子代理启动前,委托的任务描述被评估,因此危险看起来的任务在生成时被阻止
  2. 当子代理运行时,其每个操作都通过分类器,使用与父会话相同的规则,子代理前言中的任何 permissionMode 被忽略
  3. 当子代理完成时,分类器审查其完整操作历史;如果该返回检查标记了关注,安全警告被前置到子代理的结果
步骤 1 需要 Claude Code v2.1.178 或更高版本

较早的版本在步骤 2 和 3 应用分类器,但在子代理启动前没有评估任务描述

成本和延迟

分类器在独立于您的 /model 选择的服务器配置模型上运行,因此切换模型不会改变分类器可用性,分类器调用计入您的令牌使用

  • 每次检查发送记录的一部分加上待处理操作,在执行前添加往返
  • 受保护路径外的读取和工作目录编辑跳过分类器,因此开销主要来自 shell 命令和网络操作
从 v2.1.198 开始,主机和端口的沙箱网络判决被重用,而不是在每次连接时重新分类

因此到同一主机的重复连接不会各自添加检查

分类器默认阻止的内容描述允许和拒绝持续多长时间

使用 dontAsk 模式仅允许预先批准的工具

如果设置 dontAsk 模式,Claude Code 会自动拒绝所有原本会提示的工具调用。Claude 仅运行与 permissions.allow 规则、 只读 Bash 命令 匹配的操作,以及由 PreToolUse hook 批准的调用。当此模式处于活动状态时,状态栏显示 ⏵⏵ don't ask on

在 CI 管道或受限环境中使用此模式,可以预先定义 Claude 可以执行的操作;会话永远不会等待输入

Claude Code 拒绝与 显式 ask 规则 匹配的调用,而不是提示。它还拒绝内置的 AskUserQuestion 工具和连接器工具组织设置为 ask,即使 allow 规则与其匹配

它以相同的方式拒绝标记有 _meta["anthropic/requiresUserInteraction"] 的 MCP 工具

因为其批准卡需要此模式永远不会收集的答案;这需要 Claude Code v2.1.199 或更高版本

Claude Code on the web 上的云会话会忽略 defaultMode: "dontAsk"

有关详细信息,请参阅 bypassPermissions

https://code.claude.com/docs/zh-CN/permission-modes#skip-all-checks-with-bypasspermissions-mode

在启动时使用标志设置它:

claude --permission-mode dontAsk

使用 bypassPermissions 模式跳过所有检查

bypassPermissions 模式禁用权限提示和安全检查,以便工具调用立即执行,包括对受保护路径的写入

在 v2.1.126 之前,受保护路径的写入在此模式下仍会提示

显式的询问规则和连接器工具您的组织设置为 ask仍会在此模式下强制提示

标记有 _meta["anthropic/requiresUserInteraction"] 的 MCP 工具也仍会提示;这需要 Claude Code v2.1.199 或更高版本

针对文件系统根目录或主目录的删除操作,如 rm -rf / 和 rm -rf ~,仍会作为针对模型错误的断路器进行提示

  • 当命令包含使用 $(…) 或反引号的命令替换
  • 使用 <(…) 的进程替换时,断路器也会触发
无论删除操作位于替换内部(如 echo "$(rm -rf ~)"),还是位于同一命令中的其他位置

纯形式(作为其自己的命令输入)自断路器引入以来在此模式下已提示

在 v2.1.208 之前,包含这些形式的命令不会提示

无法从未使用启用标志启动的会话进入 bypassPermissions;使用以下标志重新启动以启用它:

claude --permission-mode bypassPermissions

# --dangerously-skip-permissions 标志是等效的

在 Linux 和 macOS 上,当以 root 身份或在 sudo 下运行时,Claude Code 拒绝以此模式启动:

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

该检查在识别的沙箱内自动跳过。要在容器中自主运行,请使用开发容器配置,该配置以非 root 用户身份运行 Claude Code

仅在隔离环境(如容器、虚拟机或没有互联网访问的开发容器)中使用此模式

其中 Claude Code 无法损害您的主机系统

网络上的 Claude Code 不遵守设置文件中的 defaultMode: "bypassPermissions" 或 "dontAsk",因此存储库的签入设置无法在绕过权限模式下启动云会话。该设置被静默忽略,会话改为以模式下拉菜单中显示的模式启动。有关云会话提供的模式,请参阅切换权限模式

bypassPermissions 不提供针对提示注入或意外操作的保护

为了获得背景安全检查且权限提示大幅减少,请改用自动模式

管理员可以通过在托管设置中将 permissions.disableBypassPermissionsMode 设置为 "disable" 来阻止此模式

受保护的路径

在除 bypassPermissions 之外的所有模式中,对一小组路径的写入永远不会自动批准。这可以防止意外损坏存储库状态和 Claude 自己的配置

模式 受保护路径写入
default、acceptEdits、plan 提示
auto 路由到分类器
dontAsk 拒绝
bypassPermissions 允许

设置文件中的 permissions.allow 规则不会预先批准受保护路径的写入

  • 安全检查在 Claude Code 评估设置中的允许规则之前运行,因此 ~/.claude/settings.json.claude/settings.json 中的条目(如 Edit(.claude/**))不会改变上表中的每个模式结果
  • 在提示的模式中,.claude/ 写入的提示,*允许 Claude 在此会话中编辑其自己的设置* ,这会在该会话中批准后续的 .claude/ 写入而无需再次提示

受保护的目录:

  • .git
  • .config/git
  • .vscode
  • .idea
  • .husky
  • .cargo
  • .devcontainer
  • .yarn
  • .mvn
  • .claude

    除了 .claude/worktrees,Claude 在其中存储自己的 git worktrees
    

受保护的文件:

  • .gitconfig、.gitmodules
  • .bashrc、.bash_profile、.bash_login、.bash_aliases、.bash_logout、.zshrc、.zprofile、.zshenv、.zlogin、.zlogout、.profile、.envrc
  • .npmrc、.yarnrc、.yarnrc.yml、.pnp.cjs、.pnp.loader.mjs、.pnpmfile.cjs、bunfig.toml、.bunfig.toml
  • .bazelrc、.bazelversion、.bazeliskrc
  • .pre-commit-config.yaml、lefthook.yml、lefthook.yaml、.lefthook.yml、.lefthook.yaml
  • gradle-wrapper.properties、maven-wrapper.properties
  • .devcontainer.json
  • .ripgreprc、pyrightconfig.json
  • .mcp.json、.claude.json
Next:管理会话 Previous: 指令和记忆 Home: 使用 Claude