可用的模式
每种模式在便利性和监督之间做出不同的权衡。下表显示了在每种模式下 Claude 无需权限提示即可执行的操作。手动模式显示在其配置值default 下。
审查每项操作的模式在 CLI 中名为 Manual,在
claude --help 中、在 VS Code 和 JetBrains 扩展中以及在桌面应用中也是如此。其配置值是 default,这是 hook 和 SDK 集成使用的。CLI 在您输入值的任何地方接受 manual 作为别名,例如 claude --permission-mode manual 或 "defaultMode": "manual"。
每种模式对写入 受保护路径 都有各自的规则。
模式设置基线。在顶部分层 权限规则 以预批准或阻止特定工具。拒绝规则在每种模式下都会阻止,包括 bypassPermissions。拒绝和询问规则不适用于 EndConversation,只要 Claude 仍然至少有一个其他工具可以调用。允许规则在 bypassPermissions 中无效。
任何模式都不会自动批准的操作
Claude Code 在任何模式下都不会自动批准以下内容,包括bypassPermissions,不过您可以在 bypassPermissions 模式下 关闭针对危险 rm 命令的提示。每个项目符号链接到说明在每种模式下会发生什么的部分:
- 与显式 询问规则 匹配的工具
-
您的组织 设置为
ask的连接器工具,在该设置到达 Claude Code 的会话中 -
需要用户交互的工具:内置
AskUserQuestion工具和标记为requiresUserInteraction的 MCP 工具 -
可识别的
rm和rmdir关键路径删除,任何允许规则或PreToolUsehook"allow"都无法批准;以及被标记为Dangerous rm operation not ruled out的 Bash 命令 - 跨会话消息传递保护措施
-
在
permissions.blockReadsOutsideWorkingDirectories打开时在工作目录外读取:识别的文件读取 Bash 命令和任何需要批准才能在沙箱外运行的 未沙箱化重试,即使在 auto 模式和bypassPermissions模式下也会提示。需要 Claude Code v2.1.257 或更高版本。 shell 解析器无法追踪的命令,例如更改目录多次或运行子 shell 的命令,即使在未命名任何外部路径时也会以相同方式提示。当命令在 沙箱 中运行且沙箱强制执行该块时,此提示不适用。 -
在
permissions.blockWritesOutsideWorkingDirectories打开时在工作目录外写入:Claude Code 会拒绝在这些位置的Write、Edit和NotebookEdit调用,但 其自身的部分文件 除外。该设置项不限制 shell 命令、MCP 工具或 hook 运行的程序,因此请使用 沙箱隔离 来限制 shell 命令的写入位置。需要 Claude Code v2.1.314 或更高版本。
常见设置
权限模式决定 Claude 在执行操作之前是否询问,而 Bash 沙箱和外层隔离边界决定操作运行后能够访问哪些内容。下表每一行都将一个目标与实现该目标的标志或设置以及所需的隔离配对,可作为起点。可用模式列出了每种模式下无需提示即可运行的操作。
Bash 沙箱和自动模式彼此独立运作,也可以组合使用,例外情况列于沙箱模式中。有关完整的交互方式,请参阅沙箱隔离与权限及权限模式的关系和隔离与权限模式的关系。
会话在哪个模式下启动
当您在终端中启动新会话时,Claude Code 从以下第一个适用的获取权限模式:-
--permission-mode标志或--dangerously-skip-permissions -
设置文件中的
permissions.defaultMode如果您在.claude/settings.json或.claude/settings.local.json中设置"auto",该值不会生效,Claude Code 然后使用内置默认值而不是来自~/.claude/settings.json的defaultMode。如果您在这两个文件中设置"bypassPermissions",它也不会生效,会话以 Manual 模式启动。其他值从任何设置文件应用。 - 内置默认值
auto 默认值在 macOS、Linux 和 WSL 上需要 Claude Code v2.1.228 或更高版本,在本机 Windows 上需要 v2.1.233 或更高版本。在较早的版本上,内置默认值是 Manual。
内置默认值取决于您如何运行 Claude Code。匹配您会话的第一行适用。该表涵盖您在终端或通过 VS Code 扩展启动的会话;对于桌面应用和 claude.ai,请参阅切换权限模式中的 Desktop 和 Web 选项卡。
当标志、设置文件或内置默认值选择
auto 但自动模式对会话不可用时,Claude Code 以 Manual 启动会话。自动模式在会话不满足可用性要求时不可用,例如设置文件关闭它或不支持它的模型,或当 Anthropic 已在服务器端临时关闭它时。
内置默认值第一次在自动模式下启动您的一个会话时,Claude Code 显示链接到此页面的通知:
- 在终端中,一次,在会话顶部
- 在 VS Code 扩展中,作为新对话屏幕上的卡片,保留直到您关闭它
~/.claude/settings.json 将 defaultMode 设置为 auto 以外的值,且没有其他设置文件设置它,您的会话继续以该模式启动。
在 Pro、Max、Ultra 和 Team 计划上,以及在不获取功能标志的会话中,Claude Code 会询问一次是否将设置更改为自动模式。该询问出现在终端或 VS Code 扩展中,如果您拒绝,您的设置保持原样。
在 claude -p 和 Agent SDK 运行中被拒绝的工具调用
在 Claude Code v2.1.302 或更高版本中,未设置权限模式的 claude -p 和 Agent SDK 运行以 Manual 模式启动。此模式在 SDK 选项和设置中显示为 default。需要批准的调用会被拒绝,除非您通过允许规则、hook、canUseTool 回调或 --permission-prompt-tool 批准它们。
要让这些调用获得批准,请添加允许规则或以自动模式启动:
- 添加允许规则:Claude 运行您列出的调用。向
claude -p传递--allowedTools "Bash(npm test)",或设置您 SDK 的允许工具选项。 - 以自动模式启动:由分类器模型审查调用,因此您无需预先列出任何内容。向
claude -p传递--permission-mode auto,或设置您 SDK 的权限模式选项。
- CLI
- TypeScript
- Python
DISABLE_TELEMETRY 时,它们可能以自动模式启动。
以不同的权限模式启动
您可以为一个会话设置起始权限模式,或作为机器、项目或组织中每个会话的默认值。当多个设置文件设置permissions.defaultMode 时,设置优先级决定,因此项目或托管值优先于 ~/.claude/settings.json。要更改已运行会话的权限模式,请参阅切换权限模式。
此示例使您机器上的每个终端会话以 Manual 模式启动,其配置值为
default。将其保存在 ~/.claude/settings.json 中:
⏸ manual mode on。
HIPAA 配置下的权限模式
在已应用 HIPAA 配置的组织中,内置auto 默认值不适用。当没有其他方式选择起始权限模式时,终端或 VS Code 会话以 Manual 模式启动。终端会话还会显示 Auto mode isn't the default for your organization · Shift+Tab to switch,而 VS Code 扩展不显示任何通知。检查开发人员如何登录和连接列出了适用此规则的会话。
自动模式和 bypassPermissions 仍然可用:
- 切换到自动模式:按
Shift+Tab,或使用您界面中的控件 - 以自动模式启动:传递
--permission-mode auto,或在您的用户设置中将permissions.defaultMode设置为auto,或在托管设置中为整个组织进行此设置。请参阅以不同的权限模式启动 - 移除自动模式:在托管设置中将
permissions.disableAutoMode设置为"disable" - 阻止
bypassPermissions:在托管设置中将permissions.disableBypassPermissionsMode设置为"disable"
切换权限模式
每个界面都有自己的控件用于在会话期间切换权限模式,以及自己的方式来选择新会话启动的权限模式。选择您的界面以查看其控件。- CLI
- VS Code
- JetBrains
- Desktop
- Web and mobile
在会话期间:按 并非每个模式都在默认循环中:作为默认值:在您想要的范围设置
Shift+Tab 循环权限模式。从 auto 开始,第一次按下会切换到 default,之后循环依次为 default → acceptEdits → plan。可选模式在 plan 之后插入。状态栏显示活动模式为灰色 ⏸ manual mode on(对于 default),或为 ⏵⏵ accept edits on、⏸ plan mode on、⏵⏵ auto mode on、⏵⏵ don't ask on 或 ⏵⏵ bypass permissions on。请观察此片段中状态栏的变化,该会话以自动模式启动。每次按下 Shift+Tab,状态栏都会从 auto mode on 依次变为 manual mode on、accept edits on、plan mode on,然后回到 auto mode on。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 权限模式下,当自动模式可用时,Claude Code 将是的,并切换到自动模式添加到 Bash 命令的权限提示。选择它以批准命令并将会话切换到自动模式。PowerShell 工具提示不提供该选项。需要 Claude Code v2.1.247 或更高版本。Claude Code 不会将该选项添加到由您的ask 规则之一或hook强制的提示,因为自动模式仍然向您显示这些提示,所以切换不会移除它们。在启动时:将权限模式作为标志传递。permissions.defaultMode,如以不同的权限模式启动中所述。相同的 --permission-mode 标志适用于 -p 用于非交互式运行。使用 acceptEdits 模式自动批准文件编辑
acceptEdits 模式让 Claude 在您的工作目录中创建和编辑文件而无需提示。当此模式处于活动状态时,状态栏显示 ⏵⏵ accept edits on。
除了文件编辑外,acceptEdits 模式还自动批准常见的文件系统 Bash 命令:mkdir、touch、rm、rmdir、mv、cp 和 sed。除 touch 外,当这些命令带有安全环境变量(如 LANG=C 或 NO_COLOR=1)或进程包装器(如 timeout、nice 或 nohup)作为前缀时,也会自动批准。与文件编辑一样,自动批准仅适用于工作目录或 additionalDirectories 内的路径。
以下情况仍然会提示:
- 超出该范围的路径
- 对受保护路径的写入
- 可识别的
rm和rmdir关键路径移除操作 touch带有纯文件路径以外的任何内容,例如选项、glob,或timeout 5、LANG=C之类的前缀- 除内置只读集合之外的所有其他 Bash 命令
acceptEdits 模式还会自动批准 Set-Content、Add-Content、Clear-Content 和 Remove-Item 在范围内路径上的操作,以及它们的常见别名。相同的范围和受保护路径规则适用,Remove-Item 获得自己的检查。包含引号字符的位置参数,如 Set-Content .\notes.txt "It's done" 中的撇号,即使在范围内路径上也仍然会提示,因为 Claude Code 无法静态验证其引用和未引用读数不同的参数。通过命名参数(如 -Value)传递内容以避免提示。
当您想在编辑器中或通过 git diff 事后查看更改,而不是逐个批准每个编辑时,使用 acceptEdits。
从 Manual 模式按一次 Shift+Tab 进入它,或直接启动它:
使用计划模式在编辑前进行分析
计划模式让 Claude 研究并提出更改方案,但不实际执行更改。Claude 会读取文件、运行 shell 命令进行探索并编写计划,但不会编辑您的源代码。除了在可使用绕过权限的交互式终端会话中之外,在您批准计划之前,编辑操作始终处于阻止状态。 规划期间 shell 命令的处理方式取决于会话,以下情况中第一个匹配的情况适用:- 可使用绕过权限的交互式终端会话:规划命令既不经过分类器,也不会弹出提示。使用 bypassPermissions 模式跳过所有检查介绍了在这种情况下仍会提示的少数几种操作。
- 自动模式可用且
useAutoModeDuringPlan设置已开启(默认开启):分类器会审查除关键路径删除以外的 shell 命令,而不是提示您。获批准的命令会运行,被拒绝的命令会被阻止。 - 自动模式不可用,或
useAutoModeDuringPlan已关闭:内置只读命令集以外的命令会提示您批准,即使启用了沙箱的自动允许模式也是如此。
Shift+Tab 或在单条提示词前加上 /plan 前缀即可进入计划模式。您也可以从 CLI 以计划模式启动:
Shift+Tab 可在不批准计划的情况下退出计划模式。
审阅并批准计划
计划准备就绪后,Claude 会展示计划并询问如何继续。在该提示中,您可以选择:- Yes, and use auto mode:批准并以自动模式开始。如果自动模式对您的会话不可用(例如因为您的组织已将其关闭),此选项将显示为 Yes, auto-accept edits。如果您在启动会话时启用了绕过权限,此选项则显示为 Yes, and switch to BYPASS PERMISSIONS (no further prompts) for this session。
- Yes, manually approve edits:批准并逐一审阅每项编辑。
- No, keep planning:保持在计划模式,并告诉 Claude 需要更改什么。
Shift+Tab 循环切换回计划模式,或在下一条提示词前加上 /plan 前缀。
按 Ctrl+G 可在默认文本编辑器中打开所提议的计划,并在 Claude 继续之前直接编辑。启用 showClearContextOnPlanAccept 后,列表中会新增第一个选项,用于批准计划并清除规划上下文。
接受计划还会根据计划为会话生成标题,除非您已经为该会话命名。
将计划模式设为默认
要将计划模式设为项目终端会话的默认模式,请在.claude/settings.json 中将 defaultMode 设置为 plan,放置方式参见以其他权限模式启动下的示例。VS Code 扩展启动的对话不会从项目设置中读取初始权限模式。在该扩展中,请改为在 VS Code 用户设置中将 claudeCode.initialPermissionMode 设置为 plan。
使用自动模式消除权限提示
自动模式让 Claude 无需经过常规权限提示即可执行操作。一个独立的分类器模型会在操作运行前对其进行审查,阻止任何超出您请求范围、针对无法识别的基础设施,或看起来受 Claude 读取的恶意内容驱动的操作。显式的 ask 规则仍会强制弹出提示。 在 Claude Code v2.1.283 或更高版本中,对于所有计划和提供商,自动模式都是交互式终端和 VS Code 会话的内置初始权限模式。在更早的版本中,它仅在 Pro、Max、Ultra 和 Team 计划中是内置初始权限模式。 分类器还会在 Claude Code 投递之前审查 Claude 通过SendMessage 发送给另一个 Agent 的每条消息,无论是纯文本还是结构化的 agent team 消息,这在自动模式和分类器审查命令时的计划模式中均适用;发送审查需要 Claude Code v2.1.222 或更高版本。
默认情况下,分类器不会审查已识别的针对关键路径的 rm 和 rmdir 删除操作,例如 rm -rf / 或 rm -rf ~。关键路径介绍了它们在各权限模式下的处理方式。
自动模式还会促使 Claude 持续工作,而不停下来提出澄清性问题,不过当您的提示词或某个 skill 明确依赖提问时,Claude 仍会提问。如果希望在仍会向您提示的模式下获得更强的自主行为,请改为设置 Proactive 输出样式。
只有当您的账户满足以下所有要求时,才能使用自动模式:
- 计划:所有计划。
- 组织:在 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’s 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’s Agent Platform、Microsoft Foundry 以及已登录的 Claude apps gateway 会话中默认可用。
disableAutoMode。Anthropic 也可能已在服务器端关闭了自动模式,或者服务器可能拒绝了您账户的自动模式。收到上述任一答复的会话会在会话结束前一直保持自动模式关闭,因此请稍后启动新会话。
另一条指明某个模型并表示自动模式”cannot determine the safety”(无法确定安全性)的消息,意味着某次分类器请求失败。这种失败通常是暂时的,但在 Amazon Bedrock 上,它可能会反复出现,直到您的账户能够调用所指明的模型。有关原因和处理方法,请参阅错误参考。
如果您在设置中设置了 defaultMode: "auto",而终端会话却以 Manual 模式启动且没有报错,那么该设置很可能位于 .claude/settings.json 或 .claude/settings.local.json 中。auto 在这些文件中不会生效。请将其移至 ~/.claude/settings.json。对于由 VS Code 扩展启动的对话,请改为查看切换权限模式中该扩展自己的列表。
Bedrock、Agent Platform 或 Foundry 上的自动模式
在 Amazon Bedrock、Google Cloud’s Agent Platform、Microsoft Foundry 以及已登录的 Claude apps gateway 会话中,自动模式默认可用。如果您未在这些环境中设置权限模式,交互式会话将以自动模式启动,而claude -p 或 Agent SDK 运行将以 Manual 模式启动,其配置值为 default:
- 交互式终端和 VS Code 会话:要以自动模式以外的权限模式启动它们,请按照以不同的权限模式启动中的说明设置
permissions.defaultMode,或从 VS Code 扩展的模式指示器中选择一种。会话以哪种模式启动列出了以自动模式启动这些会话的 Claude Code 版本。 claude -p和 Agent SDK 运行:要以自动模式启动,请向claude -p传递--permission-mode auto,或在 TypeScript 中传递permissionMode: "auto"、在 Python 中传递permission_mode="auto"。如果您未传递权限模式,请参阅claude -p和 Agent SDK 运行中的工具调用被拒绝,其中也介绍了较早的 Claude Code 版本。
disableAutoMode 设置为 "disable"。这会将 auto 从 Shift+Tab 循环中移除,并且使用 --permission-mode auto 启动的会话将改为以 Manual 模式启动。当该设置从管理员部署的来源到达一个已在自动模式下运行的会话时,该会话会退出自动模式,并显示 auto mode disabled by settings。在 v2.1.251 之前,正在运行的会话会保持自动模式直到会话结束。
服务器端分类器审查
在自动模式下,Claude Code 可以在会话的模型请求中请求服务器检查由决策顺序送交审查的操作,以代替发送其自身的分类器请求。以下会话会请求服务器审查:- 直接连接到 Anthropic API:在交互式终端会话以及
-p、Agent SDK、VS Code 扩展和桌面应用会话中,无论您的计划或账户类型如何,随 Anthropic 逐步推出而生效。请根据以下最低 Claude Code 版本核对您的会话类型:- 在交互式终端会话中,Pro、Max、Ultra 和 Team 计划请求服务器审查需要 Claude Code v2.1.271 或更高版本。在 Enterprise 计划和 Claude API 账户上,这些会话需要 v2.1.278 或更高版本。
- 在
-p和 VS Code 扩展会话中,请求服务器审查需要 Claude Code v2.1.278 或更高版本 - 在 Agent SDK 和桌面应用会话中,请求服务器审查需要 Claude Code v2.1.281 或更高版本
- 从 v2.1.282 起,不获取功能标志的会话(例如因为您关闭了遥测)在任何类型的会话中都会默认请求服务器审查
- 云提供商,或 LLM 网关或代理:在 Claude Platform on AWS、Amazon Bedrock、Google Cloud’s Agent Platform 和 Microsoft Foundry 上,以及每当您将
ANTHROPIC_BASE_URL指向 LLM 网关或代理时,无论您的计划如何。默认请求服务器审查需要 Claude Code v2.1.278 或更高版本。 - 已登录的 Claude apps gateway 会话:需要 Claude Code v2.1.280 或更高版本
- Anthropic 托管环境中的云端会话:无论您的计划如何,当您在选择了 Cloud 的情况下从网页、移动应用或桌面应用启动该会话时。由云端定时任务启动的会话会随 Anthropic 逐步推出而请求服务器审查。
- 服务器不审查该会话:响应完成但没有审查结果,或服务器答复它不审查此会话。最常见的原因是 LLM 网关或代理丢弃了审查请求或结果,以及平台、区域或凭据尚不支持服务器端检查。Claude Code 会回退到其自身的分类器请求。一旦该回退在会话剩余时间内保持生效,在这些请求需要计费的账户上,它会显示关于分类器请求费用的通知。
-
服务器未对某个操作给出裁决:Claude Code 会拒绝该操作,而不是在未经审查的情况下运行它。在任何连接上,当响应在审查结果到达前结束,或结果以 Claude Code 无法读取的形式到达时,都会发生这种情况。截断响应或改写结果的 LLM 网关或代理可能导致上述任一情况。在直接连接到 Anthropic API 时,当服务器对该操作的检查失败(例如超时)时也会发生这种情况。服务器未返回安全裁决介绍了拒绝消息、拒绝反复发生时的情况以及处理方法。
如果 hook 或 mod 在服务器审查之后更改了操作的输入,Claude Code 可能会在没有裁决的情况下拒绝该操作。在直接连接到 Anthropic API 的交互式终端和 VS Code 会话中,拒绝消息的文本包含
a hook changed this call's input after auto mode reviewed it。其错误条目介绍了处理方法。
CLAUDE_CODE_AUTO_MODE_SERVER=0。在直接连接到 Anthropic API 时,该变量需要 Claude Code v2.1.281 或更高版本。在这种连接上将其设置为 1,会在尚未启用服务器审查的会话中启用它,除非您同时设置了 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1。如果您设置了 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 且未设置 CLAUDE_CODE_AUTO_MODE_SERVER,Claude Code 也会停止请求服务器审查,禁用预发布功能中描述的情况除外。
默认分类器模型
默认情况下,分类器请求会发送到 Claude Sonnet 5。如果/status 将 Auto mode server 显示为 Enabled,则仅针对服务器审查范围之外的调用发送这些请求。
在下表中找到与您的会话匹配的第一行。您将使用该行的模型,而不是 Sonnet 5。
如果 Sonnet 5 或
ANTHROPIC_DEFAULT_SONNET_MODEL 中的模型无法从您的提供商获得,或被您组织的模型策略排除,Claude Code 会使用备用模型。该备用模型是您会话的模型,在 Fable 会话中则是 Opus 模型。
选择分类器模型
在 Claude Code v2.1.302 或更高版本中,将CLAUDE_CODE_AUTO_MODE_MODEL 设置为完整的模型 ID,即可在默认模型以外的模型上运行分类器。您的云提供商自己的完整模型 ID 也可以使用。以下 ~/.claude/settings.json 示例设置了 Claude Sonnet 4.6:
当审查的并非您设置的模型时
如果同时符合多种情况,以最先列出的为准。
查看分类器使用了哪个模型
在 shell 中,使用--debug-file 启动一个自动模式会话:
curl https://example.com,然后在日志中搜索 classifier_request_started:
model=之后是您的模型:该变量已生效model=之后是其他模型:在日志中搜索ignoring CLAUDE_CODE_AUTO_MODE_MODEL,其中会给出原因以及需要采取的步骤- 没有这样的行:在 Claude Code 提示符下查看
/status中的Auto mode server:
分类器默认阻止的内容
分类器信任您的工作目录以及会话启动时为其配置的远程仓库。在会话期间通过git remote add 或 git remote set-url 添加或重新指向的远程仓库不受信任,其他所有内容都被视为外部内容,直到您配置受信任的基础设施。
默认阻止:
-
下载并执行代码,例如
curl | bash - 将敏感数据发送到外部端点
- 生产环境部署和迁移
- 在云存储上进行批量删除
- 授予 IAM 或仓库权限
- 修改共享基础设施
- 不可逆地销毁会话开始前已存在的文件
- 强制推送
- 提交或推送一项更改,该更改在运行时会将密钥或敏感数据发送到仓库之外,或扩大部署所暴露的内容。这包括将密钥传递给尚未接收它的目标的 CI 工作流或部署配置、读取密钥存储并将数据发送出去的脚本或设置步骤,以及扩大部署发布内容的配置更改,例如注册表、可见性、制品或 sourcemap 设置。该检查适用于任何分支,即使仓库是公开的也同样适用,并在更改被提交或推送时触发,无论该提交或推送是否会触发流水线;要解除阻止,需要说明其执行效果,而不仅仅是提交或推送本身
-
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。仅修改提交信息的改写不会被阻止:即在 Claude 于本会话中创建的提交上,不暂存任何新内容的情况下执行--amend -m -
terraform destroy、pulumi destroy、cdk destroy或terragrunt destroy,以及应用会销毁资源的计划 - 写入密钥管理器,或更改 DNS 记录或 TLS 证书
- 合并没有任何人工批准的 Pull Request、批准 Claude 自己的 Pull Request,或禁用 CI 检查
-
发布本身就是对自动化发出的命令的评论,例如
atlantis apply或机器人的/deploy或/merge - 切换、逐步放量或删除生产环境的功能标志
- 将基础设施更改应用到受保护的 IaC 作用域,或排空并移除集群节点
-
对共享计算集群的写入超出了您所指定的资源,例如会波及其他用户作业的标签选择器或
--all - 创建在每个节点上运行或拦截集群流量的 Kubernetes 资源,例如 DaemonSet 和准入 webhook
- 连接到敏感远程目标的交互式 shell 或端口转发
- 打开使本地服务可从公共互联网访问的隧道或反向 shell
- 将有效的凭据或令牌打印到会话记录或文件中
- 访问在您的环境中被列为敏感数据位置的位置、从中复制数据,或将数据从此类位置发送给该条目所排除的受众
- 绕过您的内部包注册表、将包安装路由到公共注册表。当您的环境中列出了内部注册表或镜像,或者您在对话中告诉 Claude 存在内部注册表或镜像时,此规则适用
-
使用会解除安全防护的标志运行命令,例如
--insecure -
启动无需人工批准或沙箱即可运行的自主 Agent 循环,例如使用
--dangerously-skip-permissions或--no-sandbox启动的循环。这包括在禁用隔离和逐操作批准的情况下运行第三方 Agent 或评估工具,例如使用--yes-always启动的运行器 - 可能将页面内容、cookie 或凭据发送到源站之外的 Claude in Chrome 浏览器操作
-
通过通配符、glob 或时间过滤器(而非指定的具体路径)删除
/tmp、$TMPDIR或其他共享临时目录或缓存目录中的文件 - 在发送、上传、发布或写入给他人或共享系统的内容中包含敏感细节,而您自己的消息并未授权将这些细节提供给该接收方。当仓库位于信任边界之外或为公开仓库(包括您组织自己的公开仓库)时,PR 和 issue 正文、提交信息以及评论都属于此类外发内容;内部文件路径、代号、实时 API 响应数据(例如电子邮件或账户标识符)以及基础设施标识符都属于敏感细节。对于 PR 或 issue 正文中来自 API 响应的实时个人数据,例如电子邮件地址、账户或组织标识符或使用量指标,无论仓库的可见性或信任边界如何,都需要您明确指出这些细节和接收方
- 向 Claude Code 自己的 tmux 窗格发送按键以驱动其自身界面,分类器会将此视为 Claude 更改其自身的权限或监督
- 注释掉、删除或强制通过用于保护安全行为(例如身份验证、访问控制、输入验证或沙箱隔离)的测试或断言
- 删除或拆除 Claude 未在本会话中创建的有状态资源,且没有更具体的删除规则适用、您也未指定该资源
-
将 API 基础 URL、代理端点、webhook 接收器或注册表镜像重新指向与任务不相符的第三方主机,包括在
.env.example等示例文件中 -
使用
git remote set-url或git remote add更改推送目标,除非您指定了新的远程仓库 - 将密钥或个人数据、受托数据推送到已知为公开的仓库,或将不属于该仓库本身工作的机密材料推送到该仓库。对于个人数据或受托数据,唯一的例外是 dotfiles 仓库本身的主题内容;来自私有仓库的内容进入任何公开渠道也会以同样方式被阻止。当仓库的可见性无法确定时,分类器不会仅凭这一点进行阻止,而是依据其他规则来判断内容
-
向其他仓库或组织发起 Pull Request、使用
gh repo fork进行 fork,或推送到第三方仓库,除非您指定了该外部目标 - 来自敏感本地存储的内容,或来自名称、路径或类型表明其为敏感文件的内容,进入提交、推送、PR 或 issue 文本、gist 或粘贴、或包发布,除非您同时指定了来源和目标。会话记录和对话日志、凭据和配置类点文件夹(例如 SSH 密钥、云凭据、浏览器配置文件和 shell 历史记录)以及用户数据导出都包括在内,仓库为私有也不能解除此阻止
-
写入 Claude Code 会话记录,即
~/.claude/projects/或您所配置的配置目录下的.jsonl历史文件,无论是直接写入还是通过 shell 命令写入。该规则还涵盖 Claude Code 为其自身检查而附加到每条会话记录条目中的元数据行。读取会话记录不会被阻止 -
递归强制删除,例如
rm -rf "$VAR"或Remove-Item -Recurse -Force $dir,其目标是在分类器所见对话中未赋值的 shell 变量,或以此类变量为根的 glob。没有该赋值,分类器就无法判断该命令会删除什么。 当您指明要删除的确切路径,或 Claude 将解析后的字面路径写入命令并重新运行删除时,该阻止会解除。分类器能够解析目标的删除操作不受影响。 直接位于变量下的 glob(例如rm -rf "$VAR"/*)则属于关键路径。对于目标为单独的*或以/*或\*结尾的Remove-Item,请参阅 PowerShell 中的 Remove-Item:Claude Code 会直接拒绝该命令。
- 从云实例元数据端点(例如
169.254.169.254)请求凭据,或明确使用机器自身的服务账户或节点身份对云、集群或注册表调用进行身份验证 - 通过直接请求以外的路径访问公共主机,例如隧道、反向 shell,或被改写为指向外部的解析器或代理配置
- 读取属于主机而非您的任务的凭据,例如节点证书或节点的容器注册表身份验证信息
- 连接或扫描 Claude 未启动的同级容器、pod 或虚拟机,或容器所在的节点
autoMode.environment 中的 Host containment 条目中描述该设置。
Claude Code v2.1.261 及更高版本还会默认阻止以下操作:
- 当 URL 本身携带了正在共享的内容时,在消息、PR 或 issue 文本、文档或任何其他会打开或获取该链接的地方,发布或写入指向公共粘贴、图表或数据共享服务的链接,除非您指定了该服务
- 在您的工作目录中进行本地文件操作
- 安装您的锁文件或清单中声明的依赖
-
读取
.env并将凭据发送到与之匹配的 API - 只读 HTTP 请求
-
推送到您正在处理的仓库的任何分支,包括默认分支。名称表明其为部署或发布目标的非默认分支(例如
production或gh-pages)不在此列:分类器会单独判断推送到这类分支的操作。 推送的内容仍会根据分类器的其他规则进行检查,permissions.deny规则在所有模式下仍可按命令的书写形式阻止推送命令。远程仓库自身的分支保护仍然适用。 - 删除 Claude 在同一会话中先前创建的确切作业
- 作为任务的一部分,读取、审查或编写与安全相关的代码、配置和威胁模型
- 在同一多 Agent 会话中协同工作的 Agent 之间的消息
-
将数据发送到您在
environment中列出的受信任域名、存储桶和服务。这仅涵盖数据流动,不包括对同一基础设施的破坏性操作或凭据操作 - Claude in Chrome 导航到受信任的内部域名、localhost 或您指定的 URL
claude auto-mode defaults 可以以 JSON 格式打印完整的规则列表。如果常规操作被阻止,管理员可以通过 autoMode.environment 设置添加受信任的仓库、存储桶和服务:请参阅配置自动模式。
推送到您正在处理的仓库的任何分支,以及创建与您的请求相符的 Pull Request,都会在无提示的情况下运行,除非该推送或 Pull Request 属于阻止列表中的情况,例如密钥或敏感数据离开仓库,或 Pull Request 针对的是其他仓库或组织。如果要在保持自动模式的同时,要求在这些命令执行前进行人工确认,请添加 permissions.ask 规则,这些规则按命令的书写形式进行匹配:请参阅常见边界。
首次读取工作目录之外的内容
当permissions.blockReadsOutsideWorkingDirectories 关闭时,在自动模式下,除从网络路径读取之外的文件读取无需提示即可运行,包括读取工作目录之外的内容。当 Claude 首次对工作目录之外的路径使用 Read、Grep 或 Glob 工具时,Claude Code 会询问是否允许该读取。
在非交互式 -p 运行或后台会话中不会出现该提示;这些情况下的读取照常运行。
无论您如何回答,Claude 都会继续工作:
- 是,并继续允许读取工作目录之外的任何内容:读取会运行,之后对工作目录之外内容的读取照常运行,并且 Claude Code 会记录您的回答,使该提示不再出现
- 否,并从现在起阻止读取工作目录之外的内容:读取会被拒绝,并且 Claude Code 会在您的用户设置中将
permissions.blockReadsOutsideWorkingDirectories设置为true,这会使文件工具在本会话及之后的每个会话、每种权限模式中拒绝此类读取。要解除该阻止,请从设置了该项的每个设置文件中移除该设置,然后重启每个正在运行的会话。如果只需在本会话中放开某一个目录,请使用/add-dir。 - 否,下次再询问:读取会被拒绝,下一次读取工作目录之外的内容时会再次提示
- 是,但下次再询问:读取会运行,不会保存任何内容,下一次读取工作目录之外的内容时会再次提示
您在对话中声明的边界
分类器会将您在对话中声明的边界视为阻止信号。如果您告诉 Claude “不要推送”或”在部署前等我审查”,即使默认规则允许,分类器也会阻止相应的操作。边界会一直有效,直到您在后续消息中解除它。Claude 自己判断某个条件已满足并不能解除边界。 边界不会作为规则存储。分类器在每次检查时都会从会话记录中重新读取这些边界,因此如果上下文压缩移除了声明边界的消息,该边界可能会丢失。如需硬性保证,请改为添加 deny 规则。您在对话中声明的批准
如果您告诉 Claude 某个被阻止的操作是允许的,分类器会将其视为您的批准,并可以解除阻止。您的措辞决定了该操作是否会运行,以及批准的覆盖范围:- 指明操作及其具体细节:您的消息必须指明该操作以及使其具有危险性的具体内容,例如强制推送的分支。仅指明动词不会解除任何阻止,因此”您可以强制推送”不会解除阻止。
- 预期它仅涵盖一个操作:批准涵盖您所指明的破坏性操作,因此之后的操作会再次被阻止,除非您授予的是持续性批准。如果不想逐个操作地批准某种常规模式,请将其添加到
autoMode.allow。 - 有些阻止会保持不变:分类器的优先级顺序规定了您的批准可以解除哪些阻止。要运行它不会解除阻止的步骤,请退出自动模式并回应权限提示。
自动模式回退时
当自动模式无法批准您会话中的操作时,具体情况取决于以下场景:- 操作被阻止:Claude Code 会显示通知,并在
/permissions的 Recently blocked 选项卡下列出该操作,您可以在那里批准该操作,以便 Claude 重试。 - 反复阻止:如果分类器连续 3 次或累计 20 次阻止操作,自动模式会暂停,Claude Code 会恢复提示。批准被提示的操作后会恢复自动模式。有关阻止次数的计算方式,请参阅反复阻止阈值。
- 分类器未给出裁决:当独立于自动模式的安全检查拒绝了分类器自身的请求,或分类器的响应无法解析时,Claude Code 会阻止该操作,且不显示通知,也不会添加 Recently blocked 条目。有关每种情况显示的消息及处理方法,请参阅自动模式无法确定操作的安全性。
- 服务器未返回判定结果:在服务器端分类器审查下,如果服务器未对某项操作给出判定结果,Claude Code 会拒绝该操作;如果连续十次响应都没有判定结果,Claude Code 可能会停止当前轮次。请参阅服务器未返回安全判定结果。
- 检查期间切换模式:如果您在分类器检查尚未完成时切换权限模式,Claude Code 会丢弃新模式本不会请求的裁决。此时会改为提示您批准,或者在
dontAsk模式下自动拒绝该操作。
反复阻止阈值
连续 3 次阻止和累计 20 次阻止的阈值不可配置。累计计数器在整个会话期间持续存在,仅当其自身的限制触发回退时才会重置。当独立于自动模式的安全检查拒绝了分类器自身的请求时,Claude Code 不会将该拒绝计入任一阈值。 未使用--permission-prompt-tool 的非交互式 -p 运行没有可回退的提示。当反复阻止达到阈值时,该操作不会运行,Claude 会继续工作。Claude Code 不会停止该运行。
反复阻止通常意味着分类器缺少有关您基础设施的上下文。请使用 /feedback 报告误报,或请管理员配置受信任的基础设施。
自动模式如何评估操作
以下各节介绍 Claude Code 评估操作的顺序、分类器如何审查子代理的工作,以及分类器调用在成本和延迟方面带来的额外开销。分类器如何评估操作
分类器如何评估操作
每个操作都会经过固定的决策顺序。第一个匹配的步骤生效:
- 与您的 allow、ask 或 deny 规则匹配的操作会立即得到处理,但以下情况除外:
- 对受保护路径的写入即使匹配了 allow 规则,也会交由分类器处理。当受保护路径是某个符号链接形式的设置文件所指向的文件时,该写入可能会改为提示您,如受保护路径列表所述
- 任何 allow 规则都不会批准已识别的针对关键路径的
rm和rmdir删除操作 - 标记为
requiresUserInteraction的 MCP 工具即使匹配了 allow 规则,也会直接提示您;在您的组织设置为ask的连接器工具上也是如此(在该设置传达到 Claude Code 的会话中) - 携带按命令允许的域名的 shell 命令即使匹配了 allow 规则,也会交由分类器处理,因为规则批准的是命令,而不是其主机
- 基于命令内容进行匹配的 ask 规则(例如
Bash(git push *))会回退为权限提示 - 当 Claude 请求的路径本身不受保护,但符号链接检查将写入解析到受保护路径时,会提示您
- 从网络路径读取即使匹配了 allow 规则,也会提示您
- 工作目录中的只读操作和文件编辑会被自动批准,但对受保护路径的写入以及首次读取工作目录之外的内容除外,后者会提示您
- 在启用了服务器端分类器审查的会话中,只读和沙箱化的 shell 命令会等待该审查,如果审查标记了它们,则会被阻止
- 当符号链接检查将工作目录内的写入解析到工作目录之外的位置时,会提示您
- 当 Claude 读取他人制作的 Artifact 时,适用该部分列出的批准情况
- 从网络路径读取会提示您
- 其他所有操作都会交给分类器处理,按默认方式处理的关键路径删除除外。在第 1 步中直接提示您的连接器工具和
requiresUserInteractionMCP 工具也永远不会到达分类器,因此组织要求的批准和同意步骤都不会被自动批准 - 如果分类器阻止了操作,Claude 会收到原因。在大多数会话中,原因会指明分类器匹配的规则,例如
[Data Exfiltration],而不是给出书面解释;请参阅查看拒绝记录
tool.check 的 mod 也可以批准操作。有关其批准无法越过您的规则和 hook 的情况,请参阅使用 hook 扩展权限。有关在 VS Code 扩展中 Claude in Chrome 浏览器操作如何获得批准,请参阅 VS Code 会话中的权限提示。进入自动模式时,授予任意代码执行能力的宽泛 allow 规则会被丢弃:- 通配的
Bash(*)或PowerShell(*) - 带通配符的解释器,例如
Bash(python*) - 包管理器的 run 命令
Agentallow 规则Monitorallow 规则,因为 Claude Code 通过 shell 运行 Monitor 命令
Bash(npm test) 这样的窄范围规则会保持有效。当您退出自动模式时,Claude Code 会恢复被丢弃的规则。在 v2.1.236 之前,Claude Code 在自动模式下保留了 Monitor allow 规则,因此匹配整个工具的规则会在没有分类器审查的情况下批准 Monitor 命令。在执行会丢弃未提交工作的命令(例如 git reset --hard 或 rm -rf)之前,Claude Code 还会自行运行 git status,并向分类器显示是否存在已暂存、已修改或未跟踪的工作。即使仓库的 git 配置设置了 status.showUntrackedFiles=no,Claude Code 也会在该检查中报告未跟踪的文件。在 Claude Code 自身发送的分类器请求中,分类器可以看到用户消息、除只读查询(例如文件读取和搜索)以外的工具调用,以及您的 CLAUDE.md 内容。工具结果会从这些请求中剥离,因此文件或网页中的恶意内容无法直接操纵分类器。您可以使用 PostToolUse hook 的 classifierContext 字段为调用结果添加注释,分类器会将其作为应用提供的上下文读取。该字段需要 Claude Code v2.1.236 或更高版本。一个独立的服务器端探测器会扫描传入的工具结果,并在 Claude 读取之前标记可疑内容。有关这些层如何协同工作的更多信息,请参阅自动模式公告和工程深度解析。自动模式如何处理子代理
自动模式如何处理子代理
成本和延迟
成本和延迟
Claude Code 的分类器请求可以在您通过
/model 选择的模型以外的模型上运行。请参阅它们在哪个模型上运行。在 Enterprise 计划以及使用 Claude API、Claude Platform on AWS、Amazon Bedrock、Google Cloud’s Agent Platform 或 Microsoft Foundry 的账户上,分类器调用会计入您的 token 用量。每次检查都会发送部分会话记录以及待执行的操作,从而在执行前增加一次往返。受保护路径之外的读取和工作目录编辑会跳过分类器,因此开销主要来自 shell 命令和网络操作。当服务器在会话的模型请求中审查操作时,不存在需要计算的单独分类器调用;请参阅服务器端分类器审查。沙箱化的网络访问不会为每个连接增加分类器请求。分类器会在一次审查中将命令所指明的主机与命令一起判断,Claude Code 会根据获批的列表检查每个连接,而无需再次调用分类器。使用 dontAsk 模式仅允许预先批准的工具
如果您设置dontAsk 模式,Claude Code 会自动拒绝所有原本会提示您的工具调用,不过您安装的 mod 仍然可以批准其中部分调用。要查看 mod 可以批准哪些调用,请参阅使用 hook 扩展权限。
Claude 仍然运行在 Manual 模式下不需要批准的操作,例如您工作目录内的文件读取和只读 Bash 命令。与您的 permissions.allow 规则匹配的操作以及由 PreToolUse hook 批准的调用也会运行。在 CI 管道或受限环境中使用此模式,您可以预先定义 Claude 可以执行的操作;会话永远不会等待输入。在此模式下,状态栏显示 ⏵⏵ don't ask on。
Claude Code 拒绝与您的显式 ask 规则匹配的调用,而不是提示。它还拒绝内置的 AskUserQuestion 工具,即使您的 allow 规则与其匹配,以及您的组织设置为 ask 的连接器工具在该设置到达 Claude Code 的会话中。它以相同的方式拒绝标记为 _meta["anthropic/requiresUserInteraction"] 的 MCP 工具,因为其批准卡需要此模式永远不会收集的答案。
allow 规则或 PreToolUse hook 无法批准以下操作:
网络上的 Claude Code上的云会话忽略 defaultMode: "dontAsk";有关详细信息,请参阅 bypassPermissions。
在启动时使用标志设置它:
使用 bypassPermissions 模式跳过所有检查
bypassPermissions 模式禁用权限提示和安全检查,以便工具调用立即执行,包括对受保护路径的写入。
即使在 bypassPermissions 模式下,每项任何模式都不会自动批准的操作也会触发提示或被拒绝,不过您可以关闭针对危险 rm 命令的提示。读取其他组织的公开 Artifact 需要您的批准,而此模式不会请求批准,因此 Claude 无法读取此类 Artifact。PowerShell 中的 Remove-Item 拒绝也适用于此模式。
两个跨会话消息传递保护措施在此模式下仍然适用,在可使用绕过权限的交互式终端计划模式会话中同样适用:
- 针对发送到此机器之外的您的会话的消息,
isolatePeerMachines批准提示仍会出现。 - 当没有
crossSessionInbound值适用时,Claude Code 会保留来自您另一个会话的入站消息以供您批准,仅当发送会话将自己标识为同样绕过权限提示时才无需询问即可传递。如果您在消息被保留期间离开该权限模式,Claude Code 会重新应用入站规则,并传递现在被接受的任何保留消息。
rm 和 rmdir 删除仍会提示。
在 Claude Code 没有交互式终端运行的任何地方,计划模式都会保留其阻止,包括非交互式运行(带 -p)、Agent SDK 会话和 VS Code 扩展的聊天面板中的对话。在这些环境中,--allow-dangerously-skip-permissions 使 bypassPermissions 稍后可选。
您无法从未启用此模式的会话进入 bypassPermissions。在启动时使用 permissions.defaultMode: "bypassPermissions" 或使用启用标志启用它:
--dangerously-skip-permissions 标志是等效的。
Claude Code 在您使用 --restricted 启动的会话中拒绝 bypassPermissions。--restricted 需要 Claude Code v2.1.248 或更高版本。
第一次使用此模式启动交互式会话时,Claude Code 会显示一个警告对话框,要求您接受对在没有权限检查的情况下执行的操作的责任:
- 如果您接受:Claude Code 在
~/.claude/settings.json中将skipDangerousModePermissionPrompt设置为true,因此后续会话会跳过对话框。要再次看到对话框,请从该文件中删除该键或将其设置为false。skipDangerousModePermissionPrompt参考列出了您或您的组织可以设置它的其他设置文件。 - 如果您拒绝:Claude Code 退出。
--setting-sources 不包含 user,即使您之前已接受,对话框也可能再次出现。要跳过它,请添加 user,例如 --setting-sources user,project。
在非交互模式中不显示对话框。
当您的接受记录在用户设置或托管设置中时,后台会话会遵循该接受:
-
如果没有记录接受,
claude --bg --permission-mode bypassPermissions会被拒绝。请先在交互式会话中接受对话框。 -
如果
skipDangerousModePermissionPrompt仅在.claude/settings.local.json中设置,后台会话启动时会忽略绕过请求:- 如果
--allow-dangerously-skip-permissions被忽略,bypassPermissions不会出现在其Shift+Tab循环中。 - 如果
--permission-mode bypassPermissions或--dangerously-skip-permissions被忽略,会话改为以手动模式启动。
"skipDangerousModePermissionPrompt": true添加到~/.claude/settings.json,然后启动新的后台会话。 - 如果
sudo 下运行时,Claude Code 拒绝以 bypassPermissions 模式启动:
defaultMode: "bypassPermissions" 或 "dontAsk",因此仓库中签入的设置无法以绕过权限模式启动云端会话。该设置会被静默忽略,会话改为以模式下拉菜单中显示的权限模式启动。有关云端会话提供哪些模式,请参阅切换权限模式。
后台会话中忽略了绕过权限
此通知表示后台会话未在用户设置或托管设置中找到您对绕过权限警告的接受,因此忽略了启动时发出的绕过请求:"skipDangerousModePermissionPrompt": true 添加到 ~/.claude/settings.json,然后启动新的后台会话。
claude agents 显示交互式会话会跳过的绕过权限警告
如果 claude agents 显示了绕过权限警告,而您的交互式会话会跳过该警告,请检查 skipDangerousModePermissionPrompt 是否设置在 .claude/settings.local.json 或 --settings 文件中。交互式会话会将该处的键视为您对警告的接受,而 claude agents 不会。无论您是否在该处找到它,请接受警告,以将该键添加到 ~/.claude/settings.json,claude agents 会在该文件中查找它。
受保护的路径
一小组路径保存着仓库状态和 Claude 自己的配置,因此每种模式对写入这些路径都有各自的规则:
在使用
--restricted 启动的会话中,需要 Claude Code v2.1.248 或更高版本,分类器无法批准受保护路径的写入。
当 permissions.blockWritesOutsideWorkingDirectories 开启时,Claude Code 在所有权限模式下都会拒绝对设置文件的 Write、Edit 和 NotebookEdit 写入。
在将受保护路径写入路由到分类器的模式中,当 Claude 请求的路径本身不受保护时,符号链接检查解析为受保护路径的写入会提示你。
设置文件中的 permissions.allow 规则不会预先批准受保护路径的写入。安全检查在 Claude Code 评估设置中的允许规则之前运行,因此 ~/.claude/settings.json 或 .claude/settings.json 中的条目(如 Edit(.claude/**))不会改变上表中的每个模式结果。在提示的模式中,对项目的 .claude/ 文件夹或 ~/.claude/ 的写入提示可以提供以下这些会话范围的选项之一:
- 对于项目的
.claude/文件夹:是的,允许 Claude 在此会话中编辑此项目的 .claude 文件夹中的文件 - 对于
~/.claude/:是的,允许 Claude 在此会话中编辑其 ~/.claude 文件夹中的文件
.git.config/git.vscode.idea.husky.cargo.devcontainer.yarn.mvn.claude,但有少数例外,例如:- Claude 自己位于
.claude/worktrees/下的 git worktree - 当前会话自己的计划文件,位于
~/.claude/plans/或您设置的plansDirectory中 - 后台会话自己位于
~/.claude/jobs/<id>/tmp/的临时目录 - 在未使用
--restricted启动的会话中,项目自动记忆目录(例如~/.claude/projects/<project>/memory/)中的 markdown 文件 - 在未使用
--restricted启动的会话中,子代理记忆目录(例如.claude/agent-memory/)中的 markdown 文件
- Claude 自己位于
- 使用
--plugin-dir加载的目录,因为当文件发生更改时,Claude Code 会从该目录重新加载并运行 mod 的代码 ~/.claude/dev-mods/,或CLAUDE_CONFIG_DIR所指向目录中的dev-mods/,Claude 会将为您编写的 mod 保存在此处
.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.yamlgradle-wrapper.properties、maven-wrapper.properties.devcontainer.json.ripgreprc、pyrightconfig.json.mcp.json、.claude.jsonremote-settings.json(即您组织的服务器托管设置的存储副本),以及 Claude Code 随其保存的签名、同步和同意文件,位于~/.claude或CLAUDE_CONFIG_DIR所指向的目录中- 您在启动会话时传递给
--settings、--mcp-config或--agents的文件 - 当您的用户、项目或本地设置文件本身是符号链接(例如指向 dotfiles 仓库)时,该设置文件所指向的文件。在将受保护路径写入路由到分类器的模式中,对此文件的写入会改为提示您,即使有允许规则匹配也是如此。如果该文件自身的路径同时也是某个设置文件的路径,例如另一个文件夹中的
.claude/settings.json,则该写入会像其他受保护路径写入一样交由分类器处理
关键路径
关键路径是 Claude Code 保护其免受rm 和 rmdir 命令影响的目录,例如文件系统根目录、您的主目录和您的工作目录。Claude Code 会在这些命令运行前对其进行检查,对于目标被识别为关键路径的命令,任何允许规则都不会批准。该检查可能会漏掉某些命令,因此它不能替代沙箱隔离等操作系统级控制。
关键路径移除是指目标被 Claude Code 识别为关键路径的 rm 或 rmdir 命令。返回 "allow" 的 PreToolUse hook 也无法批准此类命令。即使在跳过其他提示的权限模式下,允许规则或 PreToolUse hook 也无法批准此类命令。
无论检查是否识别出某个命令,以下控制措施都适用:
- 拒绝规则:与命令匹配的拒绝规则会阻止该命令,但您安装的 mod 仍可批准其中部分调用
- 沙箱隔离:沙箱隔离让操作系统限制 Bash 命令可以写入的路径。在沙箱中运行的命令仍可删除您的工作目录
- 严格沙箱模式:默认情况下,在沙箱中运行的命令可以在沙箱外重试,允许规则或
bypassPermissions模式可以不经提示批准该重试。严格沙箱模式会关闭该重试
Remove-Item 和 cmd 移除内置命令有自己的检查,详见 PowerShell 中的 Remove-Item。
哪些路径是关键路径
Claude Code 将rm 或 rmdir 目标视为关键路径,当它是以下任何一个时:
- 文件系统根目录
- 顶级目录,意味着根目录的任何直接子目录,如
/usr、/etc或/data - 您的主目录。在 Windows 上,其 8.3 短名称也计算在内,如
C:\Users\LONGNA~1 - Windows 驱动器根目录及其顶级目录,如
C:\和C:\Windows。\\?\C:\和\\localhost\C$等写法均视为C:\ - 您的工作目录及其父目录
- 您的额外工作目录及其父目录,但仅当移除是其下的 glob 时,如
rm -rf <dir>/*。rm -rf <dir>在目录本身上不会触发此检查
/mnt/c 或 /Volumes/USB 等挂载驱动器路径,请参阅挂载驱动器提示。
对主目录 8.3 短名称以及 \\?\C:\ 和 \\localhost\C$ 写法的检查需要 Claude Code v2.1.292 或更高版本。
计为关键路径的其他目标
Claude Code 也将以下rm 和 rmdir 目标视为关键路径。最后一列说明每个目标为什么计为关键路径。
要关闭仅命令替换输出的目标上的检查,请在启动 Claude Code 的环境中设置
CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT=1。
嵌套命令和内联脚本中的移除
Claude Code 也查看这些构造内部:- 嵌套命令:带有
(...)的子 shell、带有{ ...; }的大括号组、带有$(...)或反引号的命令替换,或带有<(...)的进程替换。Claude Code 找到关键路径移除,无论它位于嵌套形式内部(如(rm -rf ~)或echo "$(rm -rf ~)"),还是位于同一命令中的其他地方。 - 内联脚本:通过
-c传递给sh、bash、zsh或类似 POSIX shell 的脚本,如bash -c 'rm -rf ~'。- 当脚本是双引号时,调用 shell 在内部 shell 接收脚本之前扩展其变量。在
find . -name '*.tmp' -exec sh -c "rm -rf \"$1\"/*" _ {} \;中,命令对每个匹配扩展为从文件系统根目录的移除,Claude Code 将其视为关键路径移除。 - 绑定
$1到真实值的单引号脚本(如sh -c 'rm -rf "$1"/*' _ {}所做的)不被标记。
- 当脚本是双引号时,调用 shell 在内部 shell 接收脚本之前扩展其变量。在
-c 脚本中的关键路径(如 ~)的检查,请在启动 Claude Code 的环境中设置 CLAUDE_CODE_DISABLE_INLINE_SHELL_RM_PROMPT=1。
重写被标记的命令
如何重写命令以通过检查取决于它使用的其他目标:- 变量下的 glob 或尾部斜杠,如
$DIR:保护每个扩展,以便当变量未设置或为空时 shell 停止出错,如rm -rf "${DIR:?}"/*,或使用文字路径。其扩展都以这种方式保护的移除通过此检查,因此在bypassPermissions模式下它运行而不提示,除非另一个关键路径检查标记它。 - 通常设置的变量下的 glob 或尾部斜杠,如
$HOME:使用文字路径。 - 从目录打印替换分配的变量:使用文字路径。
"${D:?}"保护不会清除此检查,因为变量不为空。 - 仅命令替换输出的目标:首先自己运行替换,然后移除它打印的文字路径。提示告诉 Claude 做同样的事情。
rm 并说明如何重写它以便检查通过。
Dangerous rm operation not ruled out 提示
完整原因如下:
rm,移除操作也可能位于未经检查的部分中。在 auto 或 bypassPermissions 模式下,包含以下语句的拒绝也来自同一检查:
bypassPermissions 也不例外,不过在 bypassPermissions 模式下您可以关闭该提示。您无法通过 Bash 或 Bash(*) 允许规则、沙箱自动允许模式或返回 "allow" 的 PreToolUse hook 批准该命令。请阅读该命令,然后批准提示,或者在被拒绝后在您的 shell 中运行它。
挂载驱动器提示
在 macOS、Linux 和 WSL 上,当递归rm 的目标是所列的挂载驱动器路径(如 /mnt/c 或 /Volumes/USB/build)时,会出现挂载驱动器提示。其原因显示为 Dangerous rm operation on mounted drive path: <path>。/* 目标即使没有递归标志也会出现该提示,因为 Claude Code 将 rm /Volumes/USB/build/* 视为对 /Volumes/USB/build 的移除。
即使存在针对 rm 的允许规则,Claude Code 也会将该命令作为关键路径移除处理:根据您的权限模式进行提示或拒绝。批准该提示即可让 rm 运行,或者关闭该提示。
会出现挂载驱动器提示的路径
将递归rm 或 /* 移除的目标与以下路径形式进行匹配,其中每个占位符(如 <drive> 或 <name>)恰好代表一个路径段:
对于
/Volumes、/media 或 /mnt 本身的递归或非递归 rm,您看到的将是关键路径原因 Dangerous rm operation on critical path: <path>。
相对目标从您的工作目录开始计算,因此当您在 /Volumes/USB 中工作时,rm -rf build 的目标是 /Volumes/USB/build,会出现该提示。
关闭挂载驱动器提示
要停止出现挂载驱动器提示,同时保留其他原因引起的提示,请在环境中设置CLAUDE_CODE_DISABLE_MOUNTED_DRIVE_RM_PROMPT=1 后启动 Claude Code。例如,在您的 shell 中设置该变量,然后从中启动 claude:
/Volumes/USB)以及其他所列路径,挂载驱动器提示都会停止。如果您允许 Bash(rm *)、使用 Manual 模式并在 /Volumes/USB 中工作,那么 rm -rf build 将直接运行而不提示。
如果提示仍然显示 Dangerous rm operation on mounted drive path,说明该变量没有传递到会话:
- 变量位于设置文件中:无论哪种设置文件,Claude Code 都会忽略设置文件
env块中的该变量,因此请改为在启动claude的位置设置该变量 - 会话启动时没有该变量:请从已设置该变量的环境中重新启动
claude,因为正在运行的会话不会读取它
关闭挂载驱动器提示后仍会提示的移除
在 Manual 模式下且存在针对rm 的允许规则时,对挂载驱动器路径的 rm 仍可能提示,但原因不是 Dangerous rm operation on mounted drive path:
- 目标位于您的工作目录之外:当您在
/Volumes/USB/project中工作时,rm -rf /Volumes/USB/other会提示。要停止该提示,请向会话添加包含该目标的目录 - 目标包含
*:rm -rf build/*会提示。批准该提示即可运行命令,或者让 Claude 不使用*逐一指明每个目标 - 目标是关键路径:
/mnt本身和您的工作目录本身仍然是关键路径,因此对其中任一执行rm -rf都会提示。批准该提示即可让rm运行
每个权限模式中的关键路径移除
Claude Code 对关键路径移除的处理取决于您的权限模式:
如果显式询问规则与命令匹配,Claude Code 即使在
auto 模式下也会询问您,且没有时间限制。在询问的模式中,PermissionRequest hook 可以回答提示。
要在 bypassPermissions 模式下不经提示运行这些移除,请参阅关闭关键路径移除提示。
auto 和 bypassPermissions 模式中的时间限制和拒绝
在auto 和 bypassPermissions 模式下,关键路径移除的终端提示显示两分钟倒计时:
- 如果倒计时在您回答之前用完,Claude Code 拒绝命令并告诉 Claude 改为做什么,以便无人值守的会话继续工作。
- 在提示打开时按任何键停止倒计时并保持提示等待您的回答。
- 在一个会话中这样的提示运行完三次后无人回答,Claude Code 停止显示它们并立即拒绝进一步的关键路径移除。发送新消息会重新开始计数。
auto 模式拒绝同样如此。
在终端之外,您不会收到该提示:
无论在何处拒绝了该移除,您都可以阅读完整命令并在您的 shell 中运行它。
要更改每种模式下的处理方式,请将
CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT 设置为 1:
bypassPermissions:终端提示没有时间限制,VS Code 聊天面板会询问您auto:由分类器决定,适用于终端、VS Code 聊天面板、-p运行和 Agent SDK 会话
env 选项,而不是在 Claude Code 设置文件中设置。对于聊天面板,请将其添加到 VS Code 自身用户 settings.json 中的 claudeCode.environmentVariables,然后开始新的对话:
在 bypassPermissions 模式下关闭关键路径移除提示
要在bypassPermissions 模式下不经提示运行针对关键路径的 Bash rm 和 rmdir 命令,请在环境中设置 CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS=1 后启动 Claude Code。这需要 Claude Code v2.1.311 或更高版本。Claude Code 仅从启动环境读取该变量,并会忽略设置文件 env 块中的该变量。例如,在您的 shell 中设置该变量,然后从中启动 claude:
- macOS, Linux, WSL
- Windows PowerShell
- Windows CMD
bypassPermissions 模式本身下(而非计划模式下),且仅对于关键路径检查在 Bash 和 Monitor 工具中标记的内容,移除才会不经提示运行。这包括 Claude Code 无法完全解析的命令,这些命令同样会不经提示运行。
关于关键路径移除提示的启动通知
要检查CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS 是否生效,请查看 Claude Code 在启动时打印的那一行。在 -p 运行中,它输出到 stderr。在 Agent SDK 应用中,传入 stderr 选项即可读取它。该行内容为以下之一:
is set, so dangerous rm commands can run without a prompt:托管设置和插件 hook 加载完成后,移除即可不经提示运行。如果移除仍然收到提示或拒绝,请参阅关键路径移除提示为何仍然开启has no effect in this session:在整个会话中,移除保持其通常的提示或拒绝。要改变这一点,请在关键路径移除提示为何仍然开启中找到您的情况has no effect while the Windows registry cannot be read for managed settings:移除保持其通常的提示或拒绝;如果之后读取注册表成功,该变量无需重启即可生效。如果移除仍然收到提示或拒绝,请参阅关键路径移除提示为何仍然开启
stderr 选项的 Agent SDK 应用看不到该行,但移除仍可能不经提示运行。否则,请检查您是否在启动环境中设置了该变量、会话是否能够进入 bypassPermissions 模式,以及 claude 是否运行在另一个会话内部。某些会话启动时不带该变量。
如果您看到其中某一行但并未设置该变量,请找到设置它的位置(例如您的 shell 配置文件)并将其移除。
关键路径移除提示为何仍然开启
如果CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS 没有效果,移除保持其通常的提示或拒绝,请检查以下原因:
- 其他机制处理权限提示:未配合
--permission-prompts none使用的--permission-prompt-tool或 Agent SDKcanUseTool回调、带有任意匹配器的PermissionRequesthook,或处理该事件的 mod。移除该 hook、mod、工具或回调,然后重新启动claude - 会话由 VS Code 扩展的聊天面板或桌面应用运行:改为在终端中启动
claude,例如 IDE 的集成终端 - 有规则覆盖 Bash、Edit 或 Read:针对其中某个工具的拒绝或询问规则,无论是在启动时存在,还是在会话期间被 Claude Code 读取,即使您之后将其移除也是如此。移除该规则并重新启动
claude。要排除某个工具,请使用--tools而不是拒绝规则 permissions.blockReadsOutsideWorkingDirectories已开启:从每个将其设置为true的设置文件中移除该设置,然后重新启动claudeclaude在另一个会话内部运行:从某个会话的 Bash 工具或 hook 启动的claude,即使其命令行中带有该变量。请从您自己的 shell 启动claude。不要将这一嵌套会话限制当作安全边界PreToolUsehook 对移除返回ask:更改该 hook 的返回值- Claude Code 为您启动会话:后台会话、分屏窗格中的 agent team 队友,以及 Remote Control 服务器创建的会话,启动时都不带该变量。请从您自己的 shell 启动
claude - 无法读取托管设置:Claude Code 尚未成功读取您的托管设置来源。如果服务器托管设置持续加载失败,请参阅Remote managed settings failed to load。对于注册表查询以外的任何其他失败,请联系该来源的管理者进行修复
- 无法查询 Windows 注册表:在 Windows 和 WSL 中,该变量需要从注册表获得应答,即使 WSL 不将其用于设置也是如此。在非英语 Windows、关闭了互操作的 WSL,或 WSL2 内核上的容器中,该查询可能在整个会话中都失败。如果互操作已关闭,请将其开启。否则,请自行运行这些移除
PowerShell 中的 Remove-Item
当您启用 PowerShell 工具时,Claude Code 给Remove-Item 和 cmd 内置命令 rd、rmdir、del 和 erase 自己的检查,与 rm 关键路径列表分开。对于 Remove-Item,结果取决于目标,第一个匹配的情况适用:
- 系统路径:文件系统根目录及其顶级目录、驱动器根目录及其顶级目录和您的主目录。Claude Code 在每种模式下拒绝命令,不询问您。
- 通配符:裸
*或任何以/*或\*结尾的目标,包括 shell 变量下的 glob,如$dir/*。Claude Code 在每种模式下拒绝命令,不询问您,在分类器看到它之前。 - 您的工作目录或其父目录之一,带有
-Recurse:Claude Code 将命令视为任何其他需要在您的权限模式下批准的命令,因此它在询问的模式下询问您,在auto模式下将其发送到分类器,在dontAsk模式下拒绝它。bypassPermissions模式跳过此检查。
rd、rmdir、del 和 erase,当 Claude 通过 cmd 运行它们时,如 cmd /c rd /s /q C:\Users。默认情况下,Claude Code 在每种模式下拒绝此类命令,不询问您。此 cmd 检查需要 Claude Code v2.1.283 或更高版本。
在判断 cmd 目标时,Claude Code 将跟随文字文本的 PowerShell 变量视为空。这使得 cmd /c rd /s /q "C:\$name" 成为 C:\ 的移除,因此它也被拒绝。尾部通配符计为它清空的文件夹,因此 cmd /c del /q C:\* 被拒绝,而您项目中的 cmd /c del /q dist\* 不被拒绝。
要关闭 cmd 检查,请在启动 Claude Code 的环境中设置 CLAUDE_CODE_DISABLE_POWERSHELL_CMD_RM_DENY=1。Claude Code 在设置文件的 env 块中忽略此变量。系统路径上的 Remove-Item 无论如何都保持被拒绝。