选择权限模式
控制 Claude 在编辑文件或运行命令前是否询问。在 CLI 中使用 Shift+Tab 循环切换模式,或在 VS Code、Desktop 和 claude.ai 中使用模式选择器。
当 Claude 想要编辑文件、运行 shell 命令或发出网络请求时,它会暂停并要求您批准该操作。权限模式控制暂停发生的频率。您选择的模式塑造了会话的流程:Manual mode 让您在操作进行时审查每个操作,而更宽松的模式让 Claude 在更长的不间断时间内工作,然后报告完成情况。为敏感工作选择更多监督,或在您信任方向时选择更少中断。
可用模式
每种模式在便利性和监督之间做出不同的权衡。下表显示了在每种模式中 Claude 无需权限提示即可执行的操作。
| 模式 | 无需询问即可运行的操作 | 最适合 |
|---|---|---|
default |
仅读取。在 CLI 和 IDE 扩展中标记为 Manual | 入门、敏感工作 |
acceptEdits |
读取、文件编辑和常见文件系统命令(mkdir、touch、mv、cp 等) |
迭代您正在审查的代码 |
plan |
仅读取 | 在更改代码库前进行探索 |
auto |
所有操作,带后台安全检查 | 长时间任务、减少提示疲劳 |
dontAsk |
仅预先批准的工具 | 锁定的 CI 和脚本 |
bypassPermissions |
所有操作 | 仅隔离容器和 VM |
在 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 或更高版本。
在除 bypassPermissions 外的每种模式中,对受保护路径的写入永远不会自动批准,保护仓库状态和 Claude 自己的配置免受意外破坏。
模式设置基线。在顶部分层权限规则以预先批准或阻止特定工具。拒绝规则和显式询问规则适用于每种模式,包括 bypassPermissions。允许规则在该模式中无效,因为其他所有操作都已被批准。
切换权限模式
您可以在会话期间、启动时或作为持久默认设置切换模式。模式通过这些控制设置,而不是通过在聊天中询问 Claude。选择下面的您的界面以查看如何更改它。
在会话期间:按 Shift+Tab 循环切换 default → acceptEdits → plan。当前模式显示在状态栏中。{/* min-version: 2.1.203 */}Manual 模式(即循环中的 default)显示灰色的 ⏸ manual mode on 徽章。在 v2.1.203 之前,状态栏在 Manual 模式下不显示徽章。
并非每种模式都在默认循环中:
auto:当您的账户满足 auto mode 要求时出现;循环到它会在不确认提示的情况下切换模式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 设置中设置 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 mode 部分中列出的每个要求时,Auto mode 出现在模式指示器中。claudeCode.initialPermissionMode 设置不接受 auto。要默认以 auto mode 启动,请改为在您的用户设置中设置 defaultMode。Claude Code 忽略项目和本地设置中的 defaultMode: "auto"。
Bypass permissions 需要扩展设置中的允许危险地跳过权限切换才能在模式指示器中出现。
有关扩展特定的详细信息,请参阅 VS Code 指南。
JetBrains 插件在 IDE 终端中运行 Claude Code,因此切换模式的工作方式与 CLI 中相同:按 Shift+Tab 循环切换,或在启动时传递 --permission-mode。
使用发送按钮旁边的模式选择器。Auto 和 Bypass permissions 仅在您在 Desktop 设置中启用它们后出现。请参阅 Desktop 指南。
在 claude.ai/code 或移动应用中使用提示框旁边的模式下拉菜单。权限提示出现在 claude.ai 中以供批准。哪些模式出现取决于会话在哪里运行:
- 云会话在 Claude Code on the web:Accept edits、Plan 和 Auto。Accept edits 对应于
default模式:云环境预先批准文件编辑,无论模式如何,因此下拉菜单显示 Accept edits 而不是 Manual。来自设置的defaultMode: "acceptEdits"仍然被遵守。Auto mode 仅在您的组织允许且所选模型支持时出现。Bypass permissions 不可用。 - Remote Control 会话在您的本地机器上:Manual、Accept edits 和 Plan。您无法从应用中选择 Auto 或 Bypass permissions。{/* min-version: 2.1.202 */}下拉菜单显示本地会话所在的模式,包括从终端设置的模式,并在应用或终端中模式更改时更新。唯一的例外是 Bypass permissions:会话永远不会向 claude.ai 报告该模式,因此从终端切换到它不会改变下拉菜单显示的内容。在 v2.1.202 之前,使用
/remote-control或claude --remote-control连接的会话根本不报告其模式,因此 claude.ai 和移动应用可能显示会话不在的模式。不匹配仅影响标签:Claude Code 从会话的实际模式生成权限提示,仍然出现在应用中以供批准。
对于 Remote Control,您也可以在启动主机时设置起始模式:
claude remote-control --permission-mode acceptEdits
使用 acceptEdits mode 自动批准文件编辑
acceptEdits mode 让 Claude 在您的工作目录中创建和编辑文件而无需提示。状态栏显示 ⏵⏵ accept edits on 当此模式处于活动状态时。
除了文件编辑外,acceptEdits mode 自动批准常见的文件系统 Bash 命令:mkdir、touch、rm、rmdir、mv、cp 和 sed。这些命令在以安全环境变量(如 LANG=C 或 NO_COLOR=1)或进程包装器(如 timeout、nice 或 nohup)为前缀时也会自动批准。与文件编辑一样,自动批准仅适用于您的工作目录或 additionalDirectories 内的路径。该范围外的路径、对受保护路径的写入和所有其他 Bash 命令仍然会提示。
当启用 PowerShell tool 时,acceptEdits mode 也会自动批准 Set-Content、Add-Content、Clear-Content 和 Remove-Item 在范围内的路径上,以及它们的常见别名。相同的范围和受保护路径规则适用。
当您想在编辑器中或通过 git diff 之后审查更改而不是逐个批准每个编辑时,使用 acceptEdits。从 Manual mode 按 Shift+Tab 一次进入它,或直接启动它:
claude --permission-mode acceptEdits
使用 plan mode 在编辑前进行分析
Plan mode 告诉 Claude 研究并提议更改而不进行更改。Claude 读取文件、运行 shell 命令进行探索,并编写计划,但不编辑您的源代码。权限提示的应用方式与手动模式相同。
通过按 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"
}
}
使用 auto mode 消除提示
Auto mode 需要 Claude Code v2.1.83 或更高版本。
Auto mode 让 Claude 执行而无需例行权限提示。一个单独的分类器模型在操作运行前审查操作,阻止任何超出您请求范围的操作、针对无法识别的基础设施的操作,或似乎由 Claude 读到的恶意内容驱动的操作。显式询问规则仍然会强制提示。
Auto mode 还指示 Claude 继续工作而无需停止以提出澄清问题,尽管当您的提示或技能明确依赖它时 Claude 仍然会提问。要在保持权限提示的同时获得更强的自主行为,请改为设置主动输出风格。
Auto mode 是研究预览版。它减少提示但不保证安全。将其用于您信任一般方向的任务,而不是作为敏感操作审查的替代品。
Auto mode 仅在您的账户满足所有这些要求时可用:
- 计划:所有计划。
- 所有者:在 Team 和 Enterprise 上,所有者必须在 Claude Code 管理员设置中启用它,然后用户才能打开它。管理员也可以通过在托管设置中将
permissions.disableAutoMode设置为"disable"来锁定它。 - 模型:在 Anthropic API 上,Claude Opus 4.6 或更高版本,或 Sonnet 4.6 或更高版本。在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 和已登录的 Claude apps gateway 会话上,仅支持 Claude Sonnet 5、Opus 4.7 和 Opus 4.8。不支持其他模型,包括 Sonnet 4.5、Opus 4.5、Haiku 和 claude-3 模型,在任何提供商上都不支持。
- 提供商:在 Anthropic API 上默认可用。在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 和已登录的 Claude apps gateway 会话上,auto mode 处于关闭状态,直到您设置
CLAUDE_CODE_ENABLE_AUTO_MODE。
如果 Claude Code 报告 auto mode 不可用,其中一个要求未满足;这不是暂时中断。一个单独的消息命名一个模型并说 auto mode "cannot determine the safety" 的操作是暂时分类器中断;请参阅错误参考。
如果您在设置中设置 defaultMode: "auto" 并且会话以 default 模式启动且没有错误,该设置可能在 .claude/settings.json 或 .claude/settings.local.json 中。Claude Code v2.1.142 及更高版本忽略来自这些文件的 auto,因此仓库无法授予自己 auto mode。将其移动到 ~/.claude/settings.json。
在 Bedrock、Agent Platform 或 Foundry 上启用 auto mode
在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry 和已登录的 Claude apps gateway 会话上,auto mode 不会出现在 Shift+Tab 循环中,直到 CLAUDE_CODE_ENABLE_AUTO_MODE 被设置为 1。该变量在 Claude Code v2.1.158 及更高版本中有效。仅在这些提供商上支持 Claude Sonnet 5、Opus 4.7 和 Opus 4.8。
要为一个开发者启用它,请将变量添加到 ~/.claude/settings.json 中的 env 块:
{
"env": {
"CLAUDE_CODE_ENABLE_AUTO_MODE": "1"
}
}
要为您的组织启用它,请将相同的 env 块添加到托管设置。
一旦设置了变量,auto mode 就会出现在每个会话的 Shift+Tab 循环中。要使其成为默认启动模式,还要在用户或托管设置中设置 "permissions": {"defaultMode": "auto"}。在这些提供商上,Claude Code 忽略 defaultMode: "auto",除非也设置了 CLAUDE_CODE_ENABLE_AUTO_MODE。
要防止开发者启用 auto mode,请在托管设置中将 disableAutoMode 设置为 "disable"。这会覆盖启用变量。
如果您通过配置了 ANTHROPIC_BASE_URL 的 LLM gateway 连接,auto mode 可能已经可以访问而无需启用变量,因为网关通过 Anthropic API 路由请求。这不适用于已登录的 Claude apps gateway 会话,它是自己的提供商类别,需要启用变量。disableAutoMode 设置在任一配置中以相同方式应用。
分类器默认阻止的内容
分类器信任您的工作目录和会话启动时为其配置的远程。{/* min-version: 2.1.200 */}使用 git remote add 或 git remote set-url 在会话期间添加或重新指向的远程不受信任,其他所有内容都被视为外部,直到您配置受信任的基础设施。在 v2.1.200 之前,会话中期添加的远程也受信任。
默认阻止:
- 下载和执行代码,如
curl | bash - 向外部端点发送敏感数据
- 生产部署和迁移
- 云存储上的大规模删除
- 授予 IAM 或仓库权限
- 修改共享基础设施
- 不可逆地销毁会话开始前存在的文件
- 强制推送
- {/* min-version: 2.1.203 */}当推送携带敏感内容(如密钥或个人或受信任数据)、携带相对于您要求的隐瞒或误述的更改、携带从仓库外部导入或首次读取的内容,或绕过您要求的拉取请求、审查或检查时,推送到仓库的默认分支。纯粹推送到默认分支本身不被阻止,清除标记的推送需要命名标记的内容或绕过的审查,而不仅仅是推送。分类器是一层:
permissions.deny规则在每种模式下应用,可以完全阻止推送到默认分支,远程自己的分支保护仍然适用。在 v2.1.203 之前,任何直接推送到默认分支都被阻止 - {/* min-version: 2.1.182 */}}
git reset --hard、git checkout -- .、git restore .、git clean -fd、git stash drop或git stash clear,分类器推测这些会丢弃未提交的更改 git commit --amend,当 HEAD 处的提交不是在此会话中创建的- {/* min-version: 2.1.198 */}从 v2.1.198 开始,
git commit --amend当 HEAD 处的提交已经被推送时。仅消息重述不被阻止:--amend -m没有新暂存的内容,在 Claude 在此会话中创建的提交上 terraform destroy、pulumi destroy、cdk destroy或terragrunt destroy,以及应用会销毁资源的计划
Claude Code v2.1.195 及更高版本默认阻止更多类别。其中几个取决于环境条目,例如敏感的远程目标和受保护的 IaC 范围,您可以将其缩小到具体名称。
- 写入密钥管理器,或更改 DNS 记录或 TLS 证书
- 合并人类未批准的拉取请求、批准 Claude 自己的拉取请求或禁用 CI 检查
- 发布本身是自动化命令的评论,例如
atlantis apply或机器人的/deploy或/merge - 切换、调整或删除生产功能标志
- 将基础设施更改应用于受保护的 IaC 范围,或排空和删除集群节点
- 写入超出您命名的资源的共享计算集群,例如标签选择器或
--all捕获其他用户的作业 - 创建在每个节点上运行或拦截集群流量的 Kubernetes 资源,例如 DaemonSets 和准入 webhooks
- 交互式 shell 或端口转发到敏感的远程目标
- 打开隧道或反向 shell,使本地服务可从公共互联网访问
- 将实时凭证或令牌打印到记录或文件中
- 访问列为您环境中敏感数据位置的位置,或从其中复制数据。{/* min-version: 2.1.198 */}从 v2.1.198 开始,这也阻止从一个位置向条目排除的受众发送数据
- 绕过您的内部包注册表将包安装路由到公共注册表。{/* min-version: 2.1.198 */}从 v2.1.198 开始,这也适用于您在对话中告诉 Claude 内部注册表或镜像存在的情况,不仅仅是在您的环境中列出的情况
- 使用禁用安全防护的标志运行命令,如
--insecure - 启动自主代理循环,在没有人类批准或沙箱的情况下运行,例如使用
--dangerously-skip-permissions或--no-sandbox启动的循环。{/* min-version: 2.1.198 */}从 v2.1.198 开始,这也涵盖运行第三方代理或评估工具,禁用隔离和按操作批准,例如使用--yes-always启动的运行器 - Chrome 中的 Claude浏览器操作可能会发送页面内容、cookie 或凭证跨源
Claude Code v2.1.198 及更高版本也默认阻止这些:
- 通过通配符、glob 或年龄过滤器而不是特定命名路径删除
/tmp、$TMPDIR或另一个共享暂存或缓存目录中的文件 - 在您自己的消息未授权这些详情给该收件人时,在发送、上传、发布或写入其他人或共享系统的内容中包含敏感详情。{/* min-version: 2.1.200 /}PR 和问题正文、提交消息和评论在仓库在信任边界外或公开时计为这种类型的出站内容,包括您组织自己的公开仓库;内部文件路径、代码名称、实时 API 响应数据(如电子邮件或账户标识符)和基础设施标识符计为敏感详情。PR、问题和提交消息范围需要 Claude Code v2.1.200 或更高版本。{/ min-version: 2.1.203 */}PR 或问题正文中的实时个人数据(如电子邮件地址、账户或组织标识符或使用指标)需要您命名这些详情和收件人,无论仓库的可见性或信任边界如何。该检查需要 Claude Code v2.1.203 或更高版本
- 向 Claude Code 自己的 tmux 窗格发送击键以驱动其自己的界面,分类器将其视为 Claude 改变自己的权限或监督
Claude Code v2.1.200 及更高版本也默认阻止这些:
- 注释掉、删除或强制通过保护安全行为的测试或断言,例如身份验证、访问控制、输入验证或沙箱
- 删除或拆除 Claude 在会话中未创建的有状态资源,当没有更具体的删除规则适用且您未命名该资源时
- 将 API 基础 URL、代理端点、webhook 接收器或注册表镜像重新指向不适合任务的第三方主机,包括在示例文件(如
.env.example)中 - 使用
git remote set-url或git remote add改变推送去向,除非您命名了新远程 - 推送密钥或个人或受信任数据到已知为公开的仓库,或推送不是该仓库自己工作一部分的机密材料到那里。{/* min-version: 2.1.203 */}dotfiles 仓库自己的主题是个人或受信任数据的唯一例外,来自私有仓库到任何公开表面的内容以相同方式被阻止;两个改进都需要 Claude Code v2.1.203 或更高版本。在 v2.1.203 之前,个人数据与机密材料分组,仅在不是该仓库自己工作的一部分时被阻止。当仓库的可见性未确定时,分类器不会仅基于此阻止;它改为根据其他规则判断内容
- 针对不同的仓库或组织打开拉取请求、使用
gh repo fork进行分叉或推送到第三方仓库,除非您命名了该外部目标
Claude Code v2.1.203 及更高版本也默认阻止这些:
- 来自敏感本地存储或来自其名称、路径或类型将其标记为敏感的文件的内容进入提交、推送、PR 或问题文本、gist 或粘贴或包发布,除非您命名了源和目标。会话记录和对话日志、凭证和配置点文件夹(如 SSH 密钥、云凭证、浏览器配置文件和 shell 历史记录)以及用户数据导出都计为此类,仓库是私有的不会清除它
Claude Code v2.1.205 及更高版本也默认阻止这些:
- 写入 Claude Code 会话记录、
~/.claude/projects/下的.jsonl历史文件或您配置的配置目录,无论是直接还是通过 shell 命令。该规则也涵盖 Claude Code 为其自己的检查附加到每个记录条目的元数据行。记录是 Claude Code 写入的会话状态,而不是工作文件,篡改的条目在您恢复会话后到达每个后续检查,因此 auto mode 作为深度防御阻止这些写入。读取记录不被阻止 - 递归强制删除,例如
rm -rf "$VAR"或Remove-Item -Recurse -Force $dir,其目标是 shell 变量或以其为根的 glob,在分类器看到的对话中任何地方都未分配。该值仅来自早期命令输出,分类器永远不会收到,因此分类器无法根据其他删除规则验证删除目标。分类器按设计读取对话而不是命令输出,因此它阻止调用而不是猜测目标。当您命名被删除的确切路径或当 Claude 使用写入命令中的已解析文字路径重新运行删除时,阻止清除。目标分类器可以解析的删除不受影响
默认允许:
- 工作目录中的本地文件操作
- 安装在您的锁定文件或清单中声明的依赖项
- 读取
.env并向其匹配的 API 发送凭证 - 只读 HTTP 请求
- 推送到您启动的分支或 Claude 创建的分支
Claude Code v2.1.195 及更高版本也默认允许这些:
- 删除 Claude 在同一会话中早前创建的确切作业
- 作为您的任务的一部分读取、审查或编写与安全相关的代码、配置和威胁模型
- 在同一多代理会话中协同工作的代理之间的消息
- 向您在
environment中列出的受信任域、桶和服务发送数据。这仅涵盖数据流,不涵盖相同基础设施上的破坏性或凭证操作 - Chrome 中的 Claude导航到受信任的内部域、localhost 或您命名的 URL
Sandbox 网络访问请求通过分类器路由而不是默认允许。{/* min-version: 2.1.198 */}从 v2.1.198 开始,分类器重用其对网络主机和端口的判决,而不是在每次连接时重新运行:
- 允许被重用直到新内容进入对话,此时该主机被再次检查
- 在交互式 CLI 中,拒绝在轮次结束时被丢弃
- 在非交互式模式和 Agent SDK 会话中没有轮次边界,因此拒绝在运行的其余部分被重用
- 改变您的权限模式或规则会丢弃所有缓存的判决
运行 claude auto-mode defaults 以查看完整的规则列表。如果常规操作被阻止,管理员可以通过 autoMode.environment 设置添加受信任的仓库、桶和服务:请参阅配置 auto mode。
您在对话中陈述的边界
分类器将您在对话中陈述的边界视为阻止信号。如果您告诉 Claude "don't push" 或 "wait until I review before deploying",分类器会阻止匹配的操作,即使默认规则会允许它们。边界保持有效,直到您在后续消息中解除它。Claude 自己的判断条件已满足不会解除它。
边界不存储为规则。分类器在每次检查时从记录中重新读取它们,因此如果上下文压缩删除陈述边界的消息,边界可能会丢失。为了硬保证,请改为添加拒绝规则。
当 auto mode 回退时
每个被拒绝的操作显示通知并出现在 /permissions 下的"最近拒绝"选项卡中,您可以按 r 以手动批准重试它。
如果分类器在一行中阻止操作 3 次或总共 20 次,auto mode 暂停,Claude Code 恢复提示。批准提示的操作恢复 auto mode。这些阈值不可配置。任何允许的操作重置连续计数器,而总计数器在会话中持续,仅在其自己的限制触发回退时重置。
在非交互式模式中使用 -p 标志,重复的阻止中止会话,因为没有用户可以提示。
重复的阻止通常意味着分类器缺少关于您的基础设施的上下文。使用 /feedback 报告误报,或让管理员配置受信任的基础设施。
1. 与您的[允许或拒绝规则](/anthropic/claude-code/history/docs/zh-CN/2026-07-09-2358..2026-07-10-1700/permissions/#manage-permissions)匹配的操作立即解决,除了对[受保护路径](#protected-paths)的写入,即使允许规则匹配也会路由到分类器
2. 只读操作和工作目录中的文件编辑自动批准,除了对[受保护路径](#protected-paths)的写入
3. 其他所有内容都发送到分类器。{/* min-version: 2.1.199 */}从 v2.1.199 开始,标记有 [`_meta["anthropic/requiresUserInteraction"]`](/zh-CN/mcp#require-approval-for-a-specific-tool) 的 MCP 工具跳过分类器并直接提示您,因此同意步骤永远不会代表工具作者自动批准
4. 如果分类器阻止,Claude 收到原因并尝试替代方案
进入 auto mode 时,授予任意代码执行的广泛允许规则被删除:
* 全面 `Bash(*)` 或 `PowerShell(*)`
* 通配符解释器如 `Bash(python*)`
* 包管理器运行命令
* `Agent` 允许规则
诸如 `Bash(npm test)` 之类的狭隘规则会继续。删除的规则在您离开 auto mode 时恢复。
分类器看到用户消息、工具调用和您的 CLAUDE.md 内容。工具结果被剥离,因此文件或网页中的恶意内容无法直接操纵它。一个单独的服务器端探针扫描传入的工具结果并在 Claude 读取前标记可疑内容。有关这些层如何协同工作的更多信息,请参阅 [auto mode 公告](https://claude.com/blog/auto-mode)和[工程深度探讨](https://www.anthropic.com/engineering/claude-code-auto-mode)。
Auto mode 如何处理子代理
分类器在三个点检查子代理工作:
- 在子代理启动前,委派的任务描述被评估,因此看起来危险的任务在生成时被阻止。
- 当子代理运行时,它的每个操作都通过分类器,使用与父会话相同的规则,子代理前言中的任何
permissionMode都被忽略。 - 当子代理完成时,分类器审查其完整的操作历史;如果该返回检查标记了一个问题,安全警告被添加到子代理的结果前面。
第 1 步需要 Claude Code v2.1.178 或更高版本。早期版本在第 2 和 3 步应用分类器,但在子代理启动前没有评估任务描述。
成本和延迟
分类器在独立于您的 /model 选择的服务器配置模型上运行,因此切换模型不会改变分类器可用性。分类器调用计入您的令牌使用。每次检查发送记录的一部分加上待处理操作,在执行前添加往返。受保护路径外的读取和工作目录编辑跳过分类器,因此开销主要来自 shell 命令和网络操作。{/* min-version: 2.1.198 */}从 v2.1.198 开始,sandbox 网络判决对于主机和端口被重用,而不是在每次连接时重新分类,因此重复连接到同一主机不会各自添加检查。分类器默认阻止的内容描述了允许和拒绝持续多长时间。
仅使用 dontAsk mode 允许预先批准的工具
dontAsk mode 自动拒绝每个会提示的工具调用。状态栏在此模式处于活动状态时显示 ⏵⏵ don't ask on。仅与您的 permissions.allow 规则和只读 Bash 命令匹配的操作可以执行;显式 ask 规则被拒绝而不是提示。{/* min-version: 2.1.199 */}从 v2.1.199 开始,标记有 _meta["anthropic/requiresUserInteraction"] 的 MCP 工具在此模式下也会被拒绝,即使允许规则匹配它,因为其批准卡需要此模式永远不会收集的答案。这使模式完全非交互式,适合 CI 管道或受限环境,其中您预先定义 Claude 可能执行的确切操作。Claude Code on the web 上的云会话忽略 defaultMode: "dontAsk";有关详细信息,请参阅 bypassPermissions。
在启动时使用标志设置它:
claude --permission-mode dontAsk
使用 bypassPermissions mode 跳过所有检查
bypassPermissions mode 禁用权限提示和安全检查,因此工具调用立即执行。从 v2.1.126 开始,这包括对受保护路径的写入,早期版本仍然会提示。显式询问规则仍然会在此模式下强制提示,针对文件系统根目录或主目录的删除操作,例如 rm -rf / 和 rm -rf ~,仍然会提示作为防止模型错误的断路器。{/* min-version: 2.1.199 */}从 v2.1.199 开始,标记为 _meta["anthropic/requiresUserInteraction"] 的 MCP 工具也仍然会提示。仅在隔离环境(如容器、VM 或没有互联网访问的 dev containers)中使用此模式,其中 Claude Code 无法对您的主机系统造成损害。
您无法从没有启用标志之一启动的会话进入 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
在识别的沙箱内自动跳过该检查。要在容器中自主运行,请使用 dev container 配置,该配置以非 root 用户身份运行 Claude Code。
Claude Code on the web 不遵守来自您的设置文件的 defaultMode: "bypassPermissions" 或 "dontAsk",因此存储库的签入设置无法在绕过权限模式下启动云会话。该设置被静默忽略,会话改为以模式下拉菜单中显示的模式启动。有关云会话提供的模式,请参阅切换权限模式。
受保护的路径
对一小组路径的写入在除了 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.yamlgradle-wrapper.properties、maven-wrapper.properties.devcontainer.json.ripgreprc、pyrightconfig.json.mcp.json、.claude.json