可用的模式
每种模式在便利性和监督之间做出不同的权衡。下表显示了在每种模式下 Claude 无需权限提示即可执行的操作。手动模式显示在其配置值default 下。
审查每项操作的模式在 CLI 中名为 Manual,在
claude --help 中、在 VS Code 和 JetBrains 扩展中以及在桌面应用中也是如此。其配置值是 default,这是 hooks 和 SDK 集成使用的。CLI 在您输入值的任何地方接受 manual 作为别名,例如 claude --permission-mode manual 或 "defaultMode": "manual"。Manual 标签和 manual 别名需要 Claude Code v2.1.200 或更高版本。桌面应用的标签不依赖于您的 CLI 版本。
对 受保护路径 的写入永远不会自动批准,除非在 bypassPermissions 模式下以及在 plan 模式会话中,其中绕过权限可用,意味着会话以 将 bypassPermissions 放入模式循环 的方式启动。
模式设置基线。在顶部分层 权限规则 以预批准或阻止特定工具。拒绝规则在每种模式下都会阻止,包括 bypassPermissions。拒绝和询问规则不适用于 EndConversation,只要 Claude 仍然至少有一个其他工具可以调用。允许规则在 bypassPermissions 中无效。
任何模式都不会自动批准的操作
Claude Code 在任何模式下都不会自动批准以下内容,包括bypassPermissions。每个项目符号链接到说明在每种模式下会发生什么的部分:
- 与显式 询问规则 匹配的工具
-
您的组织 设置为
ask的连接器工具,在该设置到达 Claude Code 的会话中 -
需要用户交互的工具:内置
AskUserQuestion工具和标记为requiresUserInteraction的 MCP 工具 -
rm和rmdir移除针对 关键路径,没有允许规则或PreToolUsehook"allow"批准 - 跨会话消息传递保护措施
-
在
permissions.blockReadsOutsideWorkingDirectories打开时在工作目录外读取:识别的文件读取 Bash 命令和任何需要批准才能在沙箱外运行的 未沙箱化重试,即使在 auto 模式和bypassPermissions模式下也会提示。需要 Claude Code v2.1.257 或更高版本。 shell 解析器无法追踪的命令,例如更改目录多次或运行子 shell 的命令,即使在未命名任何外部路径时也会以相同方式提示。当命令在 沙箱 中运行且沙箱强制执行该块时,此提示不适用。
常见设置
权限模式决定 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、您的计划以及 Claude Code 是否可以获取其功能标志。匹配您会话的第一行适用。该表涵盖您在终端或通过 VS Code 扩展启动的会话;对于桌面应用和 claude.ai,请参阅切换权限模式中的 Desktop 和 Web 选项卡。
当功能标志获取关闭或在安装或升级后的第一个会话中标志尚未到达时,VS Code 扩展在选择起始权限模式时忽略每个设置文件。
当标志、设置文件或内置默认值选择
auto 但自动模式对会话不可用时,Claude Code 以 Manual 启动会话。自动模式在会话不满足可用性要求时不可用,例如设置文件关闭它或不支持它的模型,或当 Anthropic 已在服务器端临时关闭它时。
内置默认值第一次在自动模式下启动您的一个会话时,Claude Code 显示链接到此页面的通知:
- 在终端中,一次,在会话顶部
- 在 VS Code 扩展中,作为新对话屏幕上的卡片,保留直到您关闭它
~/.claude/settings.json 将 defaultMode 设置为 auto 以外的值,且没有其他设置文件设置它,您的会话继续以该模式启动。Claude Code 在终端或 VS Code 扩展中询问一次是否将设置更改为自动模式。如果您拒绝,您的设置保持原样。
以不同的权限模式启动
您可以为一个会话设置起始权限模式,或作为机器、项目或组织中每个会话的默认值。当多个设置文件设置permissions.defaultMode 时,设置优先级决定,因此项目或托管值优先于 ~/.claude/settings.json。要更改已运行会话的权限模式,请参阅切换权限模式。
此示例使您机器上的每个终端会话以 Manual 模式启动,其配置值为
default。将其保存在 ~/.claude/settings.json 中:
⏸ manual mode on。
切换权限模式
每个界面都有自己的控件用于在会话期间切换权限模式,以及自己的方式来选择新会话启动的权限模式。选择您的界面以查看其控件。- CLI
- VS Code
- JetBrains
- Desktop
- Web and mobile
在会话期间:按 作为默认值:在您想要的范围设置
Shift+Tab 循环权限模式。从 auto,第一次按下切换到 default,循环然后运行 default → acceptEdits → plan → 回到 default。可选模式(如下所述)在 plan 之后插入。状态栏显示活动模式为灰色 ⏸ manual mode on(对于 default),或为 ⏵⏵ accept edits on、⏸ plan mode on、⏵⏵ auto mode on、⏵⏵ don't ask on 或 ⏵⏵ bypass permissions 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。当这些命令带有安全环境变量(如 LANG=C 或 NO_COLOR=1)或进程包装器(如 timeout、nice 或 nohup)作为前缀时,也会自动批准。与文件编辑一样,自动批准仅适用于工作目录或 additionalDirectories 内的路径。超出该范围的路径、对受保护路径的写入、rm 和 rmdir 移除针对关键路径的操作以及所有其他 Bash 命令(除了内置只读集合)仍然会提示。
当启用 PowerShell 工具时,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 进入它,或直接启动它:
使用 plan mode 在编辑前进行分析
Plan mode 告诉 Claude 研究并提议更改而不进行编辑。Claude 读取文件、运行 shell 命令进行探索并编写计划,但不编辑您的源代码。除了在绕过权限可用的交互式终端会话中,编辑保持阻止状态,直到您批准计划。 当自动模式可用且useAutoModeDuringPlan 设置打开(默认情况下是这样)时,分类器在规划期间审查 shell 命令而不是提示您。批准的命令运行,拒绝的命令被阻止。否则,内置只读集合外的命令会提示批准,包括当沙箱的自动允许模式启用时。在绕过权限可用的交互式终端会话中,分类器和提示都不适用于规划命令;使用 bypassPermissions 模式跳过所有检查涵盖仍会在那里提示的少数事项。在 v2.1.212 到 v2.1.217 中,没有绕过权限的会话为只读集合外的每个命令提示,无论自动模式是否可用。
通过按 Shift+Tab 或在单个提示前加上 /plan 进入 plan mode。您也可以从 CLI 启动 plan mode:
Shift+Tab 以退出 plan mode 而不批准计划。
审查并批准计划
当计划准备好时,Claude 会呈现它并询问如何继续。从该提示中,您可以选择:- 是的,并使用自动模式:批准并以自动模式启动。如果自动模式不可用于您的会话,例如因为您的组织关闭了它,此选项读取是的,自动接受编辑。如果您使用启用的绕过权限启动会话,该选项读取是的,并为此会话切换到绕过权限(无进一步提示)。
- 是的,手动批准编辑:批准并逐个审查每个编辑。
- 否,继续规划:保持在 plan mode 并告诉 Claude 要更改什么。
Shift+Tab 循环回到 plan mode,或在下一个提示前加上 /plan。
按 Ctrl+G 在默认文本编辑器中打开建议的计划并在 Claude 继续之前直接编辑它。当启用 showClearContextOnPlanAccept 时,列表获得第一个选项,该选项批准计划并清除规划上下文。
接受计划也会根据计划为会话提供生成的标题,除非您已经命名了会话。
将 plan mode 设置为默认值
要使 plan mode 成为项目的终端会话的默认值,请在.claude/settings.json 中将 defaultMode 设置为 plan,如以不同的权限模式启动下的示例所示。VS Code 扩展启动的对话不读取项目设置以获取起始权限模式。在那里,改为在您的 VS Code 用户设置中将 claudeCode.initialPermissionMode 设置为 plan。
使用自动模式消除权限提示
自动模式让 Claude 无需常规权限提示即可执行。一个独立的分类器模型在操作运行前审查这些操作,阻止任何超出您请求范围、针对无法识别的基础设施或看起来由 Claude 读取的恶意内容驱动的操作。显式的询问规则仍然会强制显示提示。 在 Pro、Max 和 Team 计划上,自动模式是会话启动时的内置权限模式。 分类器还会审查 Claude 使用SendMessage 发送给另一个代理的每条消息,无论是纯文本还是结构化的代理团队消息,在 Claude Code 交付之前,无论是在自动模式还是在计划模式中分类器审查命令时;发送审查需要 Claude Code v2.1.222 或更高版本。
分类器还会审查并批准或阻止针对关键路径的 rm 和 rmdir 删除,例如 rm -rf / 和 rm -rf ~,包括当删除位于命令或进程替换内部时。
自动模式还会促使 Claude 继续工作而不停下来提出澄清问题,尽管当您的提示或技能明确依赖它时 Claude 仍然会提问。为了在仍然提示您的模式中获得更强的自主行为,请改为设置主动输出风格。
自动模式仅在您的账户满足以下所有要求时可用:
- 计划:所有计划。
- 组织:在 Team 和 Enterprise 上,自动模式默认可用。管理员可以通过在托管设置中将
permissions.disableAutoMode设置为"disable"来为组织关闭它。 - 模型:在 Anthropic API 和 AWS 上的 Claude Platform 上,Claude Opus 4.6 或更高版本、Sonnet 4.6 或更高版本,或Fable 模型。在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 和已登录的Claude 应用网关会话上,仅支持 Claude Sonnet 5、Opus 4.7 或更高版本以及 Fable 模型。较旧的模型,包括 Sonnet 4.5、Opus 4.5、Haiku 和 claude-3 模型,在任何提供商上都不受支持。
- 提供商:在 Anthropic API、AWS 上的 Claude Platform、Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 和已登录的 Claude 应用网关会话上默认可用。
disableAutoMode。Anthropic 也可能已在服务器端关闭了自动模式,或者服务器可能为您的账户拒绝了自动模式。接收到任一答案的会话会保持自动模式关闭,直到会话结束,因此请稍后启动新会话。
一条单独的消息,其中命名了一个模型并说自动模式”无法确定”操作的安全性,意味着分类器请求失败。该失败通常是暂时的,但在 Amazon Bedrock 上,它可能会重复,直到您的账户可以调用命名的模型。有关原因和处理方法,请参阅错误参考。
如果您在设置中设置了 defaultMode: "auto",而终端会话在没有错误的情况下以手动模式启动,则该设置可能在 .claude/settings.json 或 .claude/settings.local.json 中。auto 不会从这些文件生效。将其移至 ~/.claude/settings.json。对于 VS Code 扩展启动的对话,请改为检查扩展自己的列表切换权限模式。
Bedrock、Agent Platform 或 Foundry 上的自动模式
在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 和已登录的Claude 应用网关会话上,自动模式默认出现在Shift+Tab 循环中。出现在循环中不会改变会话启动时的权限模式:在这些提供商上,终端会话以您的 defaultMode 启动,除非您更改它,否则为手动模式,而VS Code 扩展中的对话以手动模式启动,除非 claudeCode.initialPermissionMode 或您在扩展中选择的模式设置了一个。这些提供商上仅支持 Claude Sonnet 5、Opus 4.7 或更高版本以及 Fable 模型。
要使自动模式成为默认启动权限模式,请在用户或托管设置中设置 "permissions": {"defaultMode": "auto"}。在 VS Code 扩展启动的会话中,改为从模式指示器中选择自动。切换权限模式涵盖了什么会优先于该选择。
/doctor 检查在这些提供商上提议此用户设置默认值,就像在 Anthropic API 上一样。
要防止开发人员使用自动模式,请在托管设置中将 disableAutoMode 设置为 "disable"。这会从 Shift+Tab 循环中删除 auto,并且使用 --permission-mode auto 启动的会话以手动模式启动。已在自动模式中运行的会话在设置从管理员部署的源到达该会话时会离开它,并显示 auto mode disabled by settings。在 v2.1.251 之前,运行中的会话会保持自动模式直到结束。
在 v2.1.158 到 v2.1.206 中,这些提供商上的自动模式处于关闭状态,直到您设置 CLAUDE_CODE_ENABLE_AUTO_MODE=1,并且 Claude Code 在这些提供商上忽略 defaultMode: "auto",除非也设置了该变量。该变量仍然被接受以保持兼容性,从 v2.1.207 开始无效。
服务器端分类器审查
在自动模式中,Claude Code 可以要求服务器检查决策顺序发送的操作以供审查,作为会话模型请求的一部分,而不是发送自己的分类器请求。这些会话要求:- 直接连接到 Anthropic API:在交互式终端会话中,在每个 claude.ai 计划和使用 Claude API 的账户上,随着 Anthropic 推出。在 Pro、Max 和 Team 计划上需要 Claude Code v2.1.271 或更高版本,在 Enterprise 计划和 Claude API 账户上需要 v2.1.278 或更高版本。从 v2.1.282 开始,不获取功能标志的会话,例如因为您关闭了遥测,在任何类型的会话中默认询问服务器。
- 云提供商、LLM 网关或代理:在 AWS 上的 Claude Platform、Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry 上,以及每当您将
ANTHROPIC_BASE_URL指向LLM 网关或代理时,无论您的计划如何。默认询问需要 Claude Code v2.1.278 或更高版本。 - 已登录的Claude 应用网关会话:需要 Claude Code v2.1.280 或更高版本
- 服务器不审查会话:响应完成时没有审查结果,或服务器回答它不审查此会话。最常见的原因是 LLM 网关或代理丢弃了审查请求或结果,以及平台、区域或凭证还没有服务器端检查。Claude Code 回退到自己的分类器请求。一旦该回退在会话的其余部分保持,它会在这些请求被计费的账户上显示关于分类器请求费用的通知。
- 服务器对操作没有判决:Claude Code 拒绝该操作而不是运行它未审查。在任何连接上,当响应在审查结果到达之前结束或结果以 Claude Code 无法读取的形式到达时,会发生这种情况。LLM 网关或代理可能会导致响应被截断或结果被重写。在直接连接到 Anthropic API 时,当服务器对操作的检查失败时也会发生,例如超时。服务器返回了没有安全判决涵盖拒绝消息、拒绝重复时会发生什么以及处理方法。
CLAUDE_CODE_AUTO_MODE_SERVER=0。在直接连接到 Anthropic API 时,该变量需要 Claude Code v2.1.281 或更高版本。将其设置为 1 会在没有服务器审查的会话中打开服务器审查,例如 -p 或 Agent SDK 会话,除非您也设置了 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1。如果您设置了 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 并保持 CLAUDE_CODE_AUTO_MODE_SERVER 未设置,Claude Code 也会停止询问服务器。
分类器默认阻止的内容
分类器信任您的工作目录和在会话启动时为其配置的远程。在会话期间使用git remote add 或 git remote set-url 添加或重新指向的远程不受信任,其他所有内容都被视为外部,直到您配置受信任的基础设施。在 v2.1.200 之前,会话中期添加的远程也受信任。
默认阻止:
- 下载和执行代码,如
curl | bash - 向外部端点发送敏感数据
- 生产部署和迁移
- 云存储上的大规模删除
- 授予 IAM 或仓库权限
- 修改共享基础设施
- 不可逆地销毁会话前存在的文件
- 强制推送
- 提交或推送会在运行时向仓库外发送秘密或敏感数据的更改,或扩大部署公开的内容。这涵盖了将秘密交给不已接收它的目标的 CI 工作流或部署配置、读取秘密存储并发送数据的脚本或设置步骤,以及扩大部署发布内容的配置更改,例如注册表、可见性、工件或源映射设置。检查适用于任何分支,即使仓库是公开的也适用,并在更改落地时触发,无论该落地是否触发管道;清除它需要命名执行效果,而不仅仅是提交或推送。在 v2.1.211 之前,此检查的范围仅限于默认分支:推送到那里时,如果携带敏感内容、相对于您要求的隐藏或误描述的更改、从仓库外移植的内容或绕过您要求的审查的内容,则被阻止
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,以及应用销毁资源的计划
- 写入秘密管理器,或更改 DNS 记录或 TLS 证书
- 合并没有人类批准的拉取请求、批准 Claude 自己的拉取请求或禁用 CI 检查
- 发布本身是自动化命令的评论,例如
atlantis apply或机器人的/deploy或/merge - 切换、调整或删除生产功能标志
- 将基础设施更改应用于受保护的 IaC 范围,或排空和删除集群节点
- 对共享计算集群的写入超出您命名的资源,例如标签选择器或
--all捕获其他用户的作业 - 创建在每个节点上运行或拦截集群流量的 Kubernetes 资源,例如 DaemonSets 和准入 webhooks
- 交互式 shell 或端口转发到敏感的远程目标
- 打开隧道或反向 shell,使本地服务可从公网访问
- 将实时凭证或令牌打印到记录或文件中
- 访问在您的环境中列为敏感数据位置的位置,或从其中复制数据。从 v2.1.198 开始,这也会阻止从一个位置向条目排除的受众发送数据
- 绕过您的内部包注册表路由包安装到公开注册表。从 v2.1.198 开始,这也适用于您在对话中告诉 Claude 存在内部注册表或镜像的情况,而不仅仅是在您的环境中列出的情况
- 使用禁用安全防护的标志运行命令,如
--insecure - 启动在没有人类批准或沙箱的情况下运行的自主代理循环,例如使用
--dangerously-skip-permissions或--no-sandbox启动的循环。从 v2.1.198 开始,这也涵盖运行禁用隔离和按操作批准的第三方代理或评估工具,例如使用--yes-always启动的运行器 - Chrome 中的 Claude浏览器操作可能会向外源发送页面内容、cookie 或凭证
- 通过通配符、glob 或年龄过滤器而不是特定命名路径删除
/tmp、$TMPDIR或其他共享暂存或缓存目录中的文件 - 在您自己的消息未授权这些详细信息给该收件人时,在发送、上传、发布或写入给其他人或共享系统的内容中包含敏感详细信息。当仓库在信任边界外或公开时,PR 和问题正文、提交消息和评论计为这种类型的出站内容,包括您组织自己的公开仓库;内部文件路径、代码名称、实时 API 响应数据(如电子邮件或账户标识符)和基础设施标识符计为敏感详细信息。PR、问题和提交消息范围需要 Claude Code v2.1.200 或更高版本。PR 或问题正文中的实时个人数据(如电子邮件地址、账户或组织标识符或使用指标)需要您命名这些详细信息和收件人,无论仓库的可见性或信任边界如何。该检查需要 Claude Code v2.1.203 或更高版本
- 向 Claude Code 自己的 tmux 窗格发送按键以驱动其自己的界面,分类器将其视为 Claude 更改自己的权限或监督
- 注释掉、删除或强制通过保护安全行为的测试或断言,例如身份验证、访问控制、输入验证或沙箱
- 删除或拆除 Claude 在会话中未创建的有状态资源,当没有更具体的删除规则适用且您未命名该资源时
- 在不适合任务的第三方主机处重新指向 API 基础 URL、代理端点、webhook 接收器或注册表镜像,包括在
.env.example等示例文件中 - 使用
git remote set-url或git remote add更改推送去向,除非您命名了新远程 - 推送秘密或个人或受信任的数据到已知为公开的仓库,或推送不属于该仓库自己工作的机密材料。dotfiles 仓库自己的主题是个人或受信任数据的唯一例外,来自私有仓库到任何公开表面的内容以相同方式被阻止;两项改进都需要 Claude Code v2.1.203 或更高版本。在 v2.1.203 之前,个人数据与机密材料分组,仅当它不属于该仓库自己的工作时才被阻止。当仓库的可见性未确定时,分类器不会仅凭这一点就阻止;它改为根据其他规则判断内容
- 针对不同的仓库或组织打开拉取请求、使用
gh repo fork进行分叉或推送到第三方仓库,除非您命名了该外部目标
- 来自敏感本地存储或其名称、路径或类型将其标记为敏感的文件的内容进入提交、推送、PR 或问题文本、gist 或粘贴或包发布,除非您命名了源和目标。会话记录和对话日志、凭证和配置点文件夹(如 SSH 密钥、云凭证、浏览器配置文件和 shell 历史记录)以及用户数据导出都计为此,仓库是私有的不会清除它
- 写入 Claude Code 会话记录,即
~/.claude/projects/或您配置的配置目录下的.jsonl历史文件,无论是直接还是通过 shell 命令。该规则也涵盖 Claude Code 为其自己的检查附加到每个记录条目的元数据行。读取记录不被阻止 - 递归强制删除,例如
rm -rf "$VAR"或Remove-Item -Recurse -Force $dir,其目标是分类器看不到在对话中任何地方分配的 shell 变量,或以一个为根的 glob。该值仅来自较早的命令输出,分类器从不接收,因此分类器无法根据其他删除规则验证删除目标。当您命名被删除的确切路径或 Claude 使用解析的文字路径写入的命令重新运行删除时,该块会清除。目标分类器可以解析的删除不受影响。目标是裸*或以/*或\*结尾的Remove-Item目标永远不会到达分类器:Claude Code 直接拒绝它们
- 从云实例元数据端点请求凭证,例如
169.254.169.254,或使用机器自己的服务账户或节点身份显式验证云、集群或注册表调用 - 通过直接请求以外的路由到达公开主机,例如隧道、反向 shell 或重写为指向外部的解析器或代理配置
- 读取属于主机而不是您的任务的凭证,例如节点证书或节点的容器注册表身份验证
- 连接到或扫描 Claude 未启动的同级容器、pod 或 VM,或容器下的节点
autoMode.environment 中的主机包含条目中描述该设置。
Claude Code v2.1.261 及更高版本也默认阻止这些:
- 在消息、PR 或问题文本、文档或链接将被打开或获取的任何其他地方发布或写入公开粘贴、图表或数据共享服务的链接,当 URL 本身携带被共享的内容时,除非您命名了该服务
- 工作目录中的本地文件操作
- 安装在您的锁定文件或清单中声明的依赖项
- 读取
.env并向其匹配的 API 发送凭证 - 只读 HTTP 请求
- 推送到您正在处理的仓库的任何分支,包括默认分支。其名称将其标记为部署或发布目标的非默认分支,例如
production或gh-pages,不被涵盖:分类器根据其自己的条款判断推送到那里。推送的内容仍然根据其他规则进行检查,permissions.deny规则仍然可以在每种模式中按书写阻止推送命令,远程自己的分支保护仍然适用。在 v2.1.211 之前,仅允许推送到您启动的分支、Claude 创建的分支和到默认分支的常规推送,在 v2.1.203 之前任何直接推送到默认分支都被阻止
- 删除 Claude 在同一会话中较早创建的确切作业
- 作为您的任务的一部分读取、审查或编写与安全相关的代码、配置和威胁模型
- 在同一多代理会话中一起工作的代理之间的消息
- 向您在
environment中列出的受信任域、存储桶和服务发送数据。这仅涵盖数据流,不涵盖同一基础设施上的破坏性或凭证操作 - Chrome 中的 Claude导航到受信任的内部域、localhost 或您命名的 URL
claude auto-mode defaults 以将完整规则列表打印为 JSON。如果常规操作被阻止,管理员可以通过 autoMode.environment 设置添加受信任的仓库、存储桶和服务:请参阅配置自动模式。
推送到您正在处理的仓库的任何分支并创建与您的请求匹配的拉取请求无需提示即可运行,除非推送或拉取请求属于阻止列表,例如秘密或敏感数据离开仓库,或针对不同仓库或组织的拉取请求。要在保持自动模式的同时在这些命令之前需要人类检查点,请添加 permissions.ask 规则,这些规则与命令按书写匹配:请参阅常见边界。
工作目录外的第一次读取
当permissions.blockReadsOutsideWorkingDirectories 关闭时,文件读取在自动模式中无需提示即可运行,包括在工作目录外的读取。Claude 第一次在它们外的路径上使用 Read、Grep 或 Glob 工具时,Claude Code 会询问您是否继续允许这些读取。
该提示不会出现在非交互式 -p 运行或后台会话中;那里的读取照常运行。
无论您的答案如何,Claude 都会继续工作:
- 继续允许:读取运行,工作目录外的后续读取照常运行,Claude Code 记录您的答案,以便提示不再出现
- 从现在开始阻止:读取被拒绝,Claude Code 在您的用户设置中将
permissions.blockReadsOutsideWorkingDirectories设置为true,这使文件工具在每个后续会话和每种权限模式中拒绝此类读取。要稍后让 Claude 读取此类路径,请使用/add-dir添加其目录或删除该设置。 - 下次再问:读取被拒绝,工作目录外的下一次读取再次提示
您在对话中陈述的边界
分类器将您在对话中陈述的边界视为阻止信号。如果您告诉 Claude”不要推送”或”在我审查后再部署”,分类器会阻止匹配的操作,即使默认规则会允许它们。边界保持有效,直到您在后续消息中解除它。Claude 自己的判断条件已满足不会解除它。 边界不存储为规则。分类器在每次检查时从记录中重新读取它们,因此如果上下文压缩删除了陈述它的消息,边界可能会丢失。为了获得硬保证,请改为添加拒绝规则。您在对话中陈述的批准
如果您告诉 Claude 被阻止的操作是允许的,分类器会将其读取为您的批准并可以清除阻止。您如何措辞决定了操作是否运行,以及批准的范围有多远:- 命名操作及其具体情况:您的消息必须命名操作和使其危险的具体事项,例如强制推送的分支。仅命名动词不会清除任何内容,因此”您可以强制推送”会使阻止保持原位。
- 期望它涵盖一个操作:批准涵盖您命名的破坏性操作,因此后续操作会再次被阻止,除非您将批准授予为常设。要停止一次一个地批准常规模式,请将其添加到
autoMode.allow。 - 某些阻止保持原位:分类器的优先级顺序规定了您的批准可以到达哪些阻止。要运行它不会清除的步骤,离开自动模式并回答权限提示。
自动模式何时回退
当自动模式无法批准您的会话操作时,会发生什么取决于情况:- 被阻止的操作:Claude Code 显示通知并在
/permissions下的最近拒绝选项卡中列出操作,您可以按r使用手动批准重试它。当分类器对操作没有判决时,因为分类器自己的请求的单独安全检查拒绝了它或其响应未解析,Claude Code 拒绝该操作而不显示通知或最近拒绝条目。 - 重复阻止:如果分类器连续阻止操作 3 次或总共 20 次,自动模式暂停,Claude Code 恢复提示。批准提示的操作会恢复自动模式。这些阈值不可配置。任何允许的操作重置连续计数器,而总计数器在会话中持续,仅在其自己的限制触发回退时重置。当分类器自己的请求的单独安全检查拒绝时,Claude Code 不计算拒绝到任一阈值;链接的条目涵盖 Claude Code 如何处理这些拒绝。
- 无法提示的会话:非交互式
-p运行没有--permission-prompt-tool没有回退提示。当重复阻止达到阈值时,操作不运行,Claude 继续工作。当分类器自己的请求的单独安全检查拒绝时也适用相同情况。Claude Code 在任一情况下都不停止运行。 - 服务器没有判决:在服务器端分类器审查下,Claude Code 拒绝服务器没有判决的操作,并在连续十个响应没有判决后停止该轮。请参阅服务器返回了没有安全判决。
- 检查期间的模式切换:如果您在分类器检查待处理时切换权限模式,Claude Code 会丢弃新模式不会请求的判决,而不是应用它:您改为被提示批准,或在
dontAsk模式中操作被自动拒绝。
/feedback 报告误报,或让管理员配置受信任的基础设施。
分类器如何评估操作
分类器如何评估操作
每个操作都经过固定的决策顺序。第一个匹配的步骤获胜:
- 与您的允许、询问或拒绝规则匹配的操作立即解决,但有以下例外:
- 写入受保护路径的操作即使允许规则匹配也会路由到分类器,Claude Code v2.1.218 及更高版本中针对关键路径的
rm和rmdir删除也是如此 - 标记为
requiresUserInteraction的 MCP 工具即使允许规则匹配也会直接提示您,您的组织在会话中设置为ask的连接器工具也是如此,其中该设置到达 Claude Code - 携带每个命令允许的域的 shell 命令也会路由到分类器,即使允许规则匹配,因为规则批准命令,而不是其主机
- 与命令内容匹配的询问规则,例如
Bash(git push *),回退到权限提示
- 写入受保护路径的操作即使允许规则匹配也会路由到分类器,Claude Code v2.1.218 及更高版本中针对关键路径的
- 只读操作和工作目录中的文件编辑被自动批准,除了写入受保护路径和工作目录外的第一次读取,这会提示您
- 其他所有内容都转到分类器。在步骤 1 中直接提示您的连接器工具和
requiresUserInteractionMCP 工具永远不会到达分类器,因此组织要求的批准或同意步骤都不会被自动批准 - 如果分类器阻止,Claude 接收原因并尝试替代方案。在大多数会话中,原因名称分类器匹配的规则,例如
[Data Exfiltration],而不是给出书面解释;请参阅审查拒绝
- 笼统的
Bash(*)或PowerShell(*) - 通配符解释器,如
Bash(python*) - 包管理器运行命令
Agent允许规则Monitor允许规则,因为 Claude Code 通过 shell 运行 Monitor 命令
Bash(npm test) 保持有效。Claude Code 在您离开自动模式时恢复删除的规则。在 v2.1.236 之前,Claude Code 在自动模式中保持 Monitor 允许规则有效,因此与整个工具匹配的规则在没有分类器审查的情况下批准 Monitor 命令。Claude Code 还在会丢弃未提交工作的命令之前运行 git status,例如 git reset --hard 或 rm -rf,并向分类器显示是否存在暂存、修改或未跟踪的工作。Claude Code 在该检查中报告未跟踪的文件,即使仓库的 git 配置设置了 status.showUntrackedFiles=no。分类器看到用户消息、除了只读查找(如文件读取和搜索)之外的工具调用,以及您的 CLAUDE.md 内容。工具结果被剥离,因此文件或网页中的恶意内容无法直接操纵它。您可以使用 PostToolUse hook 的 classifierContext 字段注释调用的结果,分类器将其读取为应用程序提供的上下文。该字段需要 Claude Code v2.1.236 或更高版本。单独的服务器端探针扫描传入的工具结果并在 Claude 读取之前标记可疑内容。有关这些层如何协同工作的更多信息,请参阅自动模式公告和工程深度潜水。自动模式如何处理子代理
自动模式如何处理子代理
分类器在三个点检查子代理工作:
- 在子代理启动之前,委托的任务描述被评估,因此危险看起来的任务在生成时被阻止。
- 当子代理运行时,其每个操作都通过分类器,使用与父会话相同的规则,子代理 frontmatter 中的任何
permissionMode都被忽略。 - 当子代理完成时,分类器审查其工作和最终报告,然后父会话读取报告。当分类器标记子代理的工作或报告时,或单独的 API 安全检查拒绝审查时,报告仍然被交付,前面加上安全警告。当分类器不可用于审查时,报告到达时带有说明在对其采取行动之前验证子代理工作的说明。
成本和延迟
成本和延迟
分类器默认在 Claude Sonnet 5 上运行,而不是在您的
/model 选择上。Anthropic 配置的服务器端分类器模型优先于该默认值。当您的会话模型是 Claude Sonnet 4.6 时,或当 availableModels 排除 Sonnet 5 时,分类器改为在会话的模型上运行,或在会话在Fable 模型上运行时在 Opus 模型上运行;在 Anthropic API 以外的提供商上,该 Opus 回退是提供商的默认 Opus 模型。会话的第一个自动模式请求验证 Sonnet 5 默认值:如果请求成功,Sonnet 5 保持会话的分类器模型,如果它因模型不可用而失败,会话改为使用回退。在该验证解决后,分类器的模型在会话中不会改变。在 Enterprise 计划和使用 Claude API、AWS 上的 Claude Platform、Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry 的账户上,分类器调用计入您的令牌使用。每次检查发送记录的一部分加上待处理操作,在执行前添加往返。在受保护路径外的读取和工作目录编辑跳过分类器,因此开销主要来自 shell 命令和网络操作。服务器审查操作的地方,没有单独的分类器调用要计数;请参阅服务器端分类器审查。沙箱网络访问不添加每个连接分类器请求。分类器与命令一起判断命令命名的主机在一次审查中,Claude Code 检查每个连接对照批准的列表而不再次调用分类器。使用 dontAsk 模式仅允许预先批准的工具
如果您设置dontAsk 模式,Claude Code 会自动拒绝所有原本会提示的工具调用。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 工具,因为其批准卡需要此模式永远不会收集的答案;这需要 Claude Code v2.1.199 或更高版本。
rm 和 rmdir 移除针对关键路径的操作,如 rm -rf / 和 rm -rf ~,即使 allow 规则与其匹配或 PreToolUse hook 允许它们,也被拒绝。
网络上的 Claude Code上的云会话忽略 defaultMode: "dontAsk";有关详细信息,请参阅 bypassPermissions。
在启动时使用标志设置它:
使用 bypassPermissions 模式跳过所有检查
bypassPermissions 模式禁用权限提示和安全检查,以便工具调用立即执行,包括对受保护路径的写入。
任何模式都不会自动批准的操作在此模式下仍会提示。
两个跨会话消息传递保护措施在此模式下仍然适用,以及在具有可用绕过权限的计划模式会话中:
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 Code 会退出。在非交互模式中不显示对话框,使用 --bg 启动的后台会话会被拒绝,直到您在交互式会话中接受对话框。
在 Linux 和 macOS 上,当以 root 身份或在 sudo 下运行时,Claude Code 拒绝以此模式启动:
defaultMode: "bypassPermissions" 或 "dontAsk",因此存储库的签入设置无法在绕过权限模式下启动云会话。该设置被静默忽略,会话改为以模式下拉菜单中显示的权限模式启动。有关云会话提供的模式,请参阅切换权限模式。
受保护的路径
对一小组路径的写入永远不会自动批准,唯一的例外是bypassPermissions 模式,以及可使用绕过权限的 plan 模式交互式终端会话。这可以防止意外损坏存储库状态和 Claude 自己的配置。
在使用
--restricted 启动的会话中,需要 Claude Code v2.1.248 或更高版本,分类器无法批准受保护路径的写入。
设置文件中的 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.yamlgradle-wrapper.properties、maven-wrapper.properties.devcontainer.json.ripgreprc、pyrightconfig.json.mcp.json、.claude.json
关键路径
Claude Code 永远不会让permissions.allow 规则或返回 "allow" 的 PreToolUse hook 批准针对关键路径的 rm 或 rmdir 命令,即使在跳过其他提示的模式下。此断路器防止模型错误。匹配的拒绝规则仍然完全阻止命令。
会发生什么取决于您的权限模式:
如果显式询问规则与命令匹配,Claude Code 即使在
auto 模式下也会询问您。在询问的模式中,PermissionRequest hook可以像回答任何其他一样回答提示。
Claude Code 将 rm 或 rmdir 目标视为关键路径,当它是以下任何一个时:
- 文件系统根目录
- 顶级目录,意味着根目录的任何直接子目录,如
/usr、/etc或/data - 您的主目录
- Windows 驱动器根目录及其顶级目录,如
C:\和C:\Windows - 您的工作目录及其父目录
- 您的额外工作目录及其父目录,但仅当移除是其下的 glob 时,如
rm -rf <dir>/*。rm -rf <dir>在目录本身上不会触发此检查
rm -rf "$DIR"/*,因为当变量为空时命令变成从文件系统根目录的移除。
此变量情况的提示命名被标记的 rm 并说明如何重写它以便检查通过:
- 对于诸如
$DIR之类的变量,保护每个扩展,以便当变量未设置或为空时 shell 停止出错,如rm -rf "${DIR:?}"/*,或使用文字路径 - 对于通常设置的变量,如
$HOME,使用文字路径
bypassPermissions 模式下它运行而不提示。
使用 (...) 中的子 shell、{ ...; } 中的大括号组、$(...) 或反引号中的命令替换,或 <(...) 中的进程替换隐藏移除,不会跳过检查。Claude Code 找到关键路径移除,无论它位于嵌套形式内部(如 (rm -rf ~) 或 echo "$(rm -rf ~)"),还是位于同一命令中的其他地方。
PowerShell 中的 Remove-Item
当您启用 PowerShell 工具时,Claude Code 给Remove-Item 自己的检查,与 rm 关键路径列表分开。结果取决于目标,第一个匹配的情况适用:
- 系统路径:文件系统根目录及其顶级目录、驱动器根目录及其顶级目录和您的主目录。Claude Code 在每种模式下拒绝命令,不询问您。
- 通配符:裸
*或任何以/*或\*结尾的目标,包括 shell 变量下的 glob,如$dir/*。Claude Code 在每种模式下拒绝命令,不询问您,在分类器看到它之前。 - 您的工作目录或其父目录之一,带有
-Recurse:Claude Code 将命令视为任何其他需要在您的权限模式下批准的命令,因此它在询问的模式下询问您,在auto模式下将其发送到分类器,在dontAsk模式下拒绝它。bypassPermissions模式跳过此检查。