Claude Code 中文文档

create: 2026-06-28
update: 2026-07-31
author: thinkycx
title: 【译】权限模式
description: Claude Code 提供多种权限模式来控制操作审批流程,从逐一审批到完全自动化,适配不同安全需求和使用场景。本文详解各模式的行为差异、切换方式及受保护路径机制。
category: translation
tags: claude-code, permission-modes, translation

选择权限模式

权限模式决定了 Claude 执行操作前是否需要你逐一确认——模式越宽松,中断越少,但你的掌控力也越低。

当 Claude 想要编辑文件、执行 Shell 命令或发起网络请求时,默认会暂停等待你批准。权限模式控制着这种暂停发生的频率。默认模式下你需要逐一审查每个操作;而更宽松的模式允许 Claude 连续工作更长时间,完成后再汇报结果。敏感工作选严格模式,信任方向时选少打扰模式。

在 CLI 中按 Shift+Tab 循环切换模式,在 VS Code、Desktop 和 claude.ai 中使用模式选择器。

可用模式一览

模式 无需审批即可执行的操作 适用场景
default 仅读取 新手入门、敏感工作
acceptEdits 读取、文件编辑、常用文件系统命令(mkdirtouchmvcp 等) 边写边审的开发迭代
plan 读取,以及在 auto 模式可用时经分类器批准的命令 改代码之前先摸清项目
auto 所有操作(后台安全检查) 长任务、减少审批疲劳
dontAsk 仅预批准的工具 CI 管道和受限脚本环境
bypassPermissions 所有操作 仅限隔离容器和虚拟机

逐一审查每个操作的模式在 CLI、claude --help、VS Code/JetBrains 扩展和 Desktop 应用中都叫 Manual。 其配置值为 default(hooks 和 SDK 集成使用此值)。CLI 中凡是填写模式值的地方都接受 manual 作为别名,例如 claude --permission-mode manual"defaultMode": "manual"。Manual 标签和 manual 别名需要 Claude Code v2.1.200 或更高版本。Desktop 应用的标签不依赖 CLI 版本。

在除 bypassPermissions 外的所有模式中,对受保护路径的写入永远不会被自动批准(bypass permissions 可用的 plan 会话除外),以防仓库状态和 Claude 自身配置被意外破坏。

模式只是设定基线。你可以在此基础上叠加权限规则来预批准或阻止特定工具。以下控制在所有模式中都生效,包括 bypassPermissions

Allow 规则在 bypassPermissions 下无效,因为所有操作本身已被允许。

切换权限模式

你可以在会话中途、启动时或作为持久默认值来切换模式。模式通过以下控件设置,而不是在聊天中向 Claude 发消息。

CLI

会话中切换:按 Shift+Tab 循环 defaultacceptEditsplan。状态栏显示当前模式:⏸ plan mode on⏵⏵ accept edits on⏵⏵ auto mode on⏵⏵ don't ask on⏵⏵ bypass permissions on。Manual 模式(即循环中的 default)显示灰色的 ⏸ manual mode on 标识。v2.1.203 之前 Manual 模式不显示标识。

以下模式不在默认循环中:

  • auto:当账户满足 auto 模式要求时出现;循环切到 auto 无需确认提示
  • bypassPermissions:需要用 --permission-mode bypassPermissions--dangerously-skip-permissions--allow-dangerously-skip-permissions 或在 settings 中设置 permissions.defaultMode: "bypassPermissions" 后才出现。--allow- 变体将该模式加入循环但不激活
  • dontAsk:永远不出现在循环中,用 --permission-mode dontAsk 设置

可选模式排在 plan 之后,bypassPermissions 在前,auto 在后。如果两者都启用,切换时会先经过 bypassPermissions 再到 auto

启动时指定

claude --permission-mode plan

设为默认:在 settings 中设置 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 模式在账户满足所有要求时才出现在模式指示器中。claudeCode.initialPermissionMode 设置不接受 auto。要默认以 auto 模式启动,需在 user settings 中设置 defaultMode。Claude Code 会忽略项目设置和本地设置中的 defaultMode: "auto"

Bypass permissions 需先在扩展设置中启用 Allow dangerously skip permissions 开关。

详见 VS Code 指南

JetBrains

JetBrains 插件在 IDE 终端中运行 Claude Code,切换方式与 CLI 一致:按 Shift+Tab 循环,或启动时传 --permission-mode

Desktop

会话中切换:使用发送按钮旁的模式选择器。以下模式并非始终可见:

  • Auto:当账户满足 auto 模式要求时出现
  • Bypass permissions:Pro 和 Max 计划需在 Desktop 设置中启用 Allow bypass permissions mode 开关;Team 和 Enterprise 计划由组织策略控制

详见 Desktop 指南

设为默认:在 settings 中设置 defaultMode。Desktop 应用读取与 CLI 相同的设置文件,并将模式应用于新的本地会话。

在模式选择器中选择的模式会按文件夹记忆,优先级高于 defaultMode。Plan 是例外:选择它仅对当前会话生效。

示例——将 Plan 模式设为新本地会话的默认值:

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

Web 和移动端

claude.ai/code 或移动端的输入框旁使用模式下拉菜单。权限提示会在 claude.ai 中弹出等待批准。可见的模式取决于会话运行位置:

  • 云端会话Claude Code on the web):Accept edits、Plan、Auto。Accept edits 对应 default 模式——云端环境默认预批准文件编辑,因此下拉菜单显示 Accept edits 而非 Manual。设置中的 defaultMode: "acceptEdits" 仍有效。Auto 模式仅在组织允许且所选模型支持时出现。Bypass permissions 不可用。
  • Remote Control 会话(本地机器):Manual、Accept edits、Plan。无法从应用中选择 Auto 或 Bypass permissions。v2.1.202 起,下拉菜单会显示本地会话当前的模式(包括从终端设置的模式),并在应用或终端中切换时同步更新。唯一例外是 Bypass permissions:会话不会向 claude.ai 报告该模式,因此从终端切换到该模式不会改变下拉菜单显示。v2.1.202 之前,通过 /remote-controlclaude --remote-control 连接的会话不报告模式,因此 claude.ai 和移动应用可能显示与实际不符的模式(仅影响标签——Claude Code 根据实际模式生成权限提示,且提示仍会在应用中弹出等待批准)。

Remote Control 要求宿主已用你的 claude.ai 账号登录(不支持 API key)。也可以在启动 host 时指定初始模式:

claude remote-control --permission-mode acceptEdits

acceptEdits 模式:自动批准文件编辑

让 Claude 在工作目录内自由创建和编辑文件,无需逐一确认。 状态栏显示 ⏵⏵ accept edits on

除文件编辑外,acceptEdits 还自动批准常用文件系统 Bash 命令:mkdirtouchrmrmdirmvcpsed。加上安全环境变量前缀(如 LANG=CNO_COLOR=1)或进程包装器(如 timeoutnicenohup)也同样自动批准。自动批准仅适用于工作目录或 additionalDirectories 内的路径。超出范围的路径、对受保护路径的写入以及其他所有 Bash 命令仍需手动确认。

启用 PowerShell 工具时,acceptEdits 模式还自动批准作用域内路径的 Set-ContentAdd-ContentClear-ContentRemove-Item 及其别名,受保护路径规则同样适用。

适合在编辑器中或通过 git diff 事后审查变更,而非逐一内联批准。从 default 模式按一次 Shift+Tab 即可进入,或直接启动:

claude --permission-mode acceptEdits

plan 模式:先分析再动手

Claude 只做研究和方案设计,不修改你的源代码。 Claude 会读取文件、执行探索性 Shell 命令并撰写计划,但不会编辑你的代码。除了在开启 bypass permissions 的会话中外,编辑在你批准计划之前一直被阻止。

auto 模式可用且 useAutoModeDuringPlan 设置为开启(默认开启)时,规划期间分类器会审查 Shell 命令——批准的命令执行,拒绝的命令被阻止。否则,内置只读命令集之外的命令会弹出审批提示(即使沙箱的 auto-allow 模式已启用)。开启 bypass permissions 的会话跳过以上两条路径(详见该节说明)。在 v2.1.212 到 v2.1.217 中,没有这些条件的会话中只读集之外的命令无论如何都会弹出提示。

Shift+Tab 进入,或在单条提示前加 /plan。也可直接启动:

claude --permission-mode plan

再按一次 Shift+Tab 可退出 plan 模式而不批准计划。

审查并批准计划

计划就绪后,Claude 会展示方案并询问后续步骤。你可以选择:

  • Yes, and use auto mode:批准并以 auto 模式开始执行。当 auto 模式不可用时,此选项显示为 Yes, auto-accept edits。以 bypass permissions 启动的会话显示 Yes, and bypass permissions
  • Yes, manually approve edits:批准并逐一审查每次编辑
  • No, refine with Ultraplan on Claude Code on the web:将计划发送到 Ultraplan 在浏览器中审查
  • No, keep planning:继续留在 plan 模式,告诉 Claude 要修改什么

批准计划会退出 plan 模式并切换到对应选项描述的权限模式,Claude 随即开始编辑。要再次规划,用 Shift+Tab 切回 plan 模式,或在下一条提示前加 /plan

Ctrl+G 可在默认文本编辑器中打开并直接修改方案。启用 showClearContextOnPlanAccept 后,列表会在开头增加一个"批准计划并清除规划上下文"的选项。

接受计划时还会自动从计划内容中为会话命名(除非你已用 --name/rename 设置了名称)。

将 plan 模式设为默认

.claude/settings.json 中设置:

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

auto 模式:消除审批提示

Claude 全自动执行,一个独立的分类器模型在操作运行前进行安全审查。 分类器会阻止超出你请求范围的操作、针对未识别基础设施的操作,或受恶意内容驱动的操作。显式 ask 规则仍会强制弹出提示。

分类器还负责判定针对文件系统根目录或 home 目录的删除操作(如 rm -rf /rm -rf ~),包括删除位于命令替换或进程替换中的情况。v2.1.218 之前,普通形式会弹出审批提示;v2.1.208 到 v2.1.217 中替换形式也会弹出提示。

Auto 模式还会引导 Claude 持续工作而不停下来问澄清性问题(当你的提示或技能明确需要时,Claude 仍会提问)。如果想要更强的自主行为同时保留权限提示,改用 Proactive output style

⚠️ Auto 模式减少了权限提示但不保证安全。在你信任整体方向的任务中使用,不要将其作为敏感操作审查的替代品。

开启条件

Auto 模式需同时满足以下所有条件:

条件 要求
计划 所有计划均可
组织 Team/Enterprise 中默认可用。管理员可在 managed settings 中将 permissions.disableAutoMode 设为 "disable" 来关闭
模型 Anthropic API 和 Claude Platform on AWS:Claude Opus 4.6+、Sonnet 4.6+ 或 Fable 5。Amazon Bedrock、Google Cloud Agent Platform、Microsoft Foundry 和已登录的 Claude apps gateway 会话:仅 Claude Sonnet 5、Opus 4.7+ 和 Fable 5。不支持 Sonnet 4.5、Opus 4.5、Haiku 及 claude-3 系列
提供商 Anthropic API、Claude Platform on AWS、Amazon Bedrock、Google Cloud Agent Platform、Microsoft Foundry 和已登录的 Claude apps gateway 会话默认可用。v2.1.158 到 v2.1.206 中,除 Anthropic API 和 Claude Platform on AWS 外的提供商需设置 CLAUDE_CODE_ENABLE_AUTO_MODE=1;v2.1.207 起不再需要

如果 Claude Code 报告 auto 模式不可用,说明上述某项条件未满足(非临时故障)。若看到消息称某模型 "cannot determine the safety" of an action,则是分类器请求失败(通常是临时故障,但在 Amazon Bedrock 上可能持续出现,直到你的账户可以调用该模型)。参见错误参考

如果你在 settings 中设了 defaultMode: "auto" 但会话以 default 模式启动且无报错,该设置可能位于 .claude/settings.json.claude/settings.local.json 中。Claude Code v2.1.142 及以后会忽略这些文件中的 auto 设置(防止仓库给自己授予 auto 模式),请移至 ~/.claude/settings.json

在 Bedrock、Agent Platform 或 Foundry 上启用 auto 模式

Amazon BedrockGoogle Cloud Agent PlatformMicrosoft Foundry 和已登录的 Claude apps gateway 会话上,auto 模式默认出现在 Shift+Tab 循环中。出现在循环中不改变会话启动时的模式:会话仍以你的 defaultMode(默认为 Manual)启动。仅支持 Claude Sonnet 5、Opus 4.7+ 和 Fable 5。

要将 auto 模式设为默认启动模式,在 user 或 managed settings 中设置 "permissions": {"defaultMode": "auto"}

/doctor 检查会在这些提供商上提议此 user-settings 默认值,与 Anthropic API 上的行为一致(v2.1.210+)。

要阻止开发者使用 auto 模式,在 managed settings 中将 disableAutoMode 设为 "disable"。这将从 Shift+Tab 循环中移除 auto 并在启动时拒绝 --permission-mode auto

在 v2.1.158 到 v2.1.206 中,这些提供商上的 auto 模式需要设置 CLAUDE_CODE_ENABLE_AUTO_MODE=1 才可用,且不设该变量时 Claude Code 会忽略 defaultMode: "auto"。该变量仍可设置以兼容旧版,但从 v2.1.207 起无实际效果。

分类器默认阻止的操作

分类器信任你的工作目录和会话启动时已配置的远程地址。 会话中通过 git remote addgit remote set-url 新增或重定向的远程地址不受信任(v2.1.200+;之前版本信任会话中添加的远程)。其他一切被视为外部,直到你配置受信基础设施

默认阻止

  • 下载并执行代码(如 curl | bash
  • 向外部端点发送敏感数据
  • 生产部署和迁移
  • 云存储的批量删除
  • 授予 IAM 或仓库权限
  • 修改共享基础设施
  • 不可逆删除会话前已存在的文件
  • Force push
  • 提交或推送会在运行时向仓库外发送秘密/敏感数据的变更,或扩大部署暴露面——涵盖将秘密传递给新目标的 CI 工作流/部署配置、读取秘密存储并外发数据的脚本、扩大部署发布范围的配置变更(如 registry、visibility、artifact、sourcemap 设置),在任何分支上都适用(v2.1.211+)
  • git reset --hardgit checkout -- .git restore .git clean -fdgit stash dropgit stash clear(分类器假设这些会丢弃未提交的更改,v2.1.182+)
  • git commit --amend(当 HEAD 提交不是本次会话创建时);从 v2.1.198 起,当 HEAD 提交已推送时也阻止(仅消息修改不阻止:--amend -m 且无新暂存内容、且提交由 Claude 在本次会话中创建)
  • terraform destroypulumi destroycdk destroyterragrunt destroy,以及包含资源销毁的 plan apply

v2.1.195+ 额外阻止(部分依赖 environment 配置):

  • 写入秘密管理器,或更改 DNS 记录/TLS 证书
  • 合并无人审批的 PR、批准 Claude 自己的 PR、禁用 CI 检查
  • 发送本身是自动化命令的评论(如 atlantis apply、bot 的 /deploy/merge
  • 切换/灰度/删除生产特性标志
  • 对受保护的 IaC 作用域应用基础设施变更,或排空/移除集群节点
  • 向共享计算集群写入超出你指定资源的操作(如影响其他用户作业的标签选择器或 --all
  • 创建在每个节点运行或拦截集群流量的 Kubernetes 资源(如 DaemonSet 和 admission webhook)
  • 对敏感远程目标的交互式 Shell 或 port-forward
  • 打开隧道或反向 Shell 使本地服务从公网可达
  • 将活动凭据或令牌打印到会话记录或文件中
  • 访问 environment 中列为敏感数据位置的地方,或从中复制数据(v2.1.198 起还阻止向该条目排除的受众发送数据)
  • 绕过内部包注册表直接使用公共注册表安装包(v2.1.198 起,在对话中提及存在内部注册表/镜像时同样适用)
  • 使用禁用安全防护的标志运行命令(如 --insecure
  • 启动无人工批准或沙箱的自主代理循环(如以 --dangerously-skip-permissions--no-sandbox 启动的代理);v2.1.198 起还涵盖以 --yes-always 等方式禁用隔离和逐操作审批的第三方代理/评估框架
  • Claude in Chrome 中可能向跨域发送页面内容、cookie 或凭据的浏览器操作

v2.1.198+ 额外阻止

  • 通过通配符、glob 或时间过滤器(而非具体命名路径)删除 /tmp$TMPDIR 或其他共享临时/缓存目录中的文件
  • 在发送、上传、发布或写入他人或共享系统的内容中包含敏感细节(除非你的消息已授权这些细节用于该接收方)。v2.1.200 起:当仓库在信任边界之外或为公开仓库(包括组织自己的公开仓库)时,PR/issue 正文、commit 消息和评论视为此类外发内容;内部文件路径、代号、API 响应中的实时数据(如邮箱、账户标识)和基础设施标识符视为敏感细节。v2.1.203 起:PR 或 issue 正文中来自 API 响应的实时个人数据需要你指明细节和接收方(无论仓库可见性)
  • 向 Claude Code 自己的 tmux 窗格发送按键来驱动其自身界面(分类器视为 Claude 更改自己的权限或监督)

v2.1.200+ 额外阻止

  • 注释掉、删除或强制通过保护安全行为的测试/断言(如 auth、访问控制、输入验证、沙箱)
  • 删除或拆除 Claude 未在本会话中创建的有状态资源(当无更具体的删除规则适用且你未指定该资源时)
  • 将 API 基础 URL、代理端点、webhook 接收器或注册表镜像重定向到不符合任务的第三方主机(包括 .env.example 等示例文件)
  • 通过 git remote set-urlgit remote add 更改推送目标(除非你指定了新的 remote)
  • 向已知公开的仓库推送秘密、个人/受托数据,或推送不属于该仓库工作的机密材料。v2.1.203 起:dotfiles 仓库自身主题的个人/受托数据例外;从私有仓库到任何公开表面的内容同样被阻止
  • 向不同仓库/组织开 PR、用 gh repo fork fork、或推送到第三方仓库(除非你指定了该外部目标)

v2.1.203+ 额外阻止

  • 来自敏感本地存储(或文件名/路径/类型标记为敏感的文件)的内容进入 commit、push、PR/issue 文本、gist/paste 或包发布(除非你指明了来源和目标)。会话记录、凭据和配置 dot-folder(SSH key、云凭据、浏览器配置文件、Shell 历史)、用户数据导出都属于此类;仓库为私有不豁免

v2.1.205+ 额外阻止

  • 写入 Claude Code 会话记录(~/.claude/projects/ 或配置目录下的 .jsonl 历史文件),无论直接还是通过 Shell 命令。该规则也涵盖 Claude Code 在每条记录条目后追加的元数据行。记录是 Claude Code 写入的会话状态而非工作文件,篡改条目会影响后续所有检查,因此 auto 模式将这些写入作为纵深防御阻止。读取记录不被阻止
  • 目标为 Shell 变量(或以 Shell 变量为根的 glob)的递归强制删除(如 rm -rf "$VAR"Remove-Item -Recurse -Force $dir),当该变量在分类器可见的对话中未被赋值时。分类器读取对话而非命令输出,因此无法根据其他删除规则验证目标,故阻止调用。当你指定确切路径或 Claude 用解析后的字面路径重新运行删除时,阻止解除

默认允许

  • 工作目录内的本地文件操作
  • 安装 lock 文件或 manifest 中声明的依赖
  • 读取 .env 并向对应 API 发送凭据
  • 只读 HTTP 请求
  • Push 到你工作仓库的任何分支(包括默认分支)——名称标记为部署/发布目标的非默认分支(如 productiongh-pages)不在此列,分类器会独立判断。推送内容仍受其他规则检查,permissions.deny 规则可在任何模式下阻止对特定分支的推送,远程的分支保护仍适用(v2.1.211+;之前版本仅允许推送到启动时所在分支、Claude 创建的分支和默认分支的常规推送)

v2.1.195+ 额外允许

  • 删除 Claude 在同一会话中早先创建的作业
  • 作为任务一部分读取、审查或编写安全相关代码/配置/威胁模型
  • 同一多代理会话中代理之间的消息
  • 向你在 environment 中列出的受信域名、存储桶和服务发送数据(仅覆盖数据流,不覆盖对同一基础设施的破坏性或凭据操作)
  • Claude in Chrome 导航到受信内部域名、localhost 或你指定的 URL

沙箱网络访问请求通过分类器路由,而非默认允许。v2.1.198 起,分类器会复用对同一主机和端口的判定:允许在新内容进入对话前复用,然后该主机重新检查;在交互式 CLI 中拒绝在回合结束时丢弃;在非交互模式和 Agent SDK 会话中没有回合边界,拒绝在整次运行中复用;切换权限模式或规则会丢弃所有缓存判定。

运行 claude auto-mode defaults 可查看完整规则列表(JSON 格式)。如果常规操作被阻止,管理员可通过 autoMode.environment 设置添加受信仓库、存储桶和服务,详见配置 auto 模式

推送到你工作仓库的任何分支和创建匹配你请求的 PR 无需提示即可执行(有上述两个例外)。要在保持 auto 模式的同时在这些操作前要求人工确认,添加 permissions.ask 规则:参见 Common boundaries(v2.1.211+)。

对话中声明的边界

分类器将你在对话中声明的边界视为阻止信号。 如果你告诉 Claude "don't push" 或 "wait until I review before deploying",即使默认规则允许,分类器也会阻止匹配操作。边界在你后续消息中解除前一直有效。Claude 自行判断条件已满足并不能解除边界。

边界不作为规则存储。分类器每次检查时从会话记录中重新读取,因此如果上下文压缩移除了声明边界的消息,该边界可能丢失。要硬性保证,请添加 deny 规则

auto 模式的回退机制

每个被拒绝的操作会显示通知,并出现在 /permissions 的 Recently denied 标签页中,按 r 可手动批准重试。

如果分类器连续阻止 3 次或累计阻止 20 次,auto 模式暂停,Claude Code 恢复逐一提示。批准被提示的操作后恢复 auto 模式。这些阈值不可配置。任何被允许的操作会重置连续计数器;累计计数器在整个会话中持续,仅在其自身限制触发回退时重置。

-p 非交互模式下,反复阻止会终止会话(因为没有用户可以提示)。

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

分类器如何评估操作

每个操作按固定顺序判定,第一个匹配的步骤生效:

  1. 匹配你的 allow、ask 或 deny 规则的操作立即解决——但对受保护路径的写入即使匹配 allow 规则也会路由到分类器。组织设为 ask 的 connector 工具和标记了 requiresUserInteraction 的 MCP 工具即使匹配 allow 规则也会直接弹出提示。Content-scoped ask 规则回退到权限提示
  2. 工作目录内的只读操作和文件编辑被自动批准——但对受保护路径的写入除外
  3. 其他所有操作发送给分类器。组织设为 ask 的 connector 工具跳过分类器并直接弹出提示(组织要求的审批永远不会被自动批准)。v2.1.199 起,标记了 _meta["anthropic/requiresUserInteraction"] 的 MCP 工具同样跳过分类器并直接弹出提示
  4. 如果分类器阻止,Claude 收到原因并尝试替代方案。v2.1.208 起,大多数会话中原因是固定文本 Blocked by classifier 而非详细解释;参见 Review denials

进入 auto 模式时,授予任意代码执行的宽泛 allow 规则会被丢弃:

  • 通配 Bash(*)PowerShell(*)
  • 通配解释器如 Bash(python*)
  • 包管理器 run 命令
  • Agent allow 规则

窄规则如 Bash(npm test) 保留。离开 auto 模式时被丢弃的规则恢复。

分类器看到用户消息、工具调用和 CLAUDE.md 内容。工具结果被剥离,因此文件或网页中的恶意内容无法直接操纵分类器。另一个服务端探针在 Claude 读取前扫描传入的工具结果并标记可疑内容。更多关于这些层如何协同工作的信息,参见 auto mode 公告工程深度解析

auto 模式如何处理子代理

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

  1. 子代理启动前:评估委派的任务描述,危险任务在产生时即被阻止
  2. 子代理运行中:其每个操作都通过分类器,规则与父会话相同;子代理 frontmatter 中的 permissionMode 被忽略
  3. 子代理完成时:分类器审查其完整操作历史;如果返回检查标记问题,安全警告会被添加到子代理结果的前面

步骤 1 需要 Claude Code v2.1.178+。更早版本仅在步骤 2 和 3 应用分类器。

成本与延迟

分类器默认运行在 Claude Sonnet 5 上,而非你的 /model 选择(v2.1.210+)。Anthropic 服务端配置的分类器模型优先于此默认值。当你会话的模型是 Claude Sonnet 4.6、或 availableModels 排除了 Sonnet 5 时,分类器改用会话模型;当会话运行在 Fable 5 上时使用 Opus 模型(非 Anthropic API 提供商上为该提供商的默认 Opus 模型)。

会话首次 auto 模式请求会验证 Sonnet 5 默认值:成功则 Sonnet 5 成为该会话的分类器模型;失败(模型不可用)则使用回退模型。验证完成后,分类器模型在整个会话内不再变化。

分类器调用计入你的 token 用量。每次检查发送一部分会话记录加待执行操作,在执行前增加一次往返。受保护路径外的读取和工作目录编辑跳过分类器,因此开销主要来自 Shell 命令和网络操作。

分类器会复用对同一主机和端口的沙箱网络判定,因此对同一主机的重复连接不会各自增加一次检查。复用规则详见分类器默认阻止的操作

dontAsk 模式:仅允许预批准工具

自动拒绝所有需要提示的工具调用,会话永远不等待输入。 只有匹配 permissions.allow 规则、只读 Bash 命令PreToolUse hook 批准的调用能执行。状态栏显示 ⏵⏵ don't ask on

Claude Code 拒绝(而非弹出提示)以下调用:

Claude Code on the web 的云端会话忽略 defaultMode: "dontAsk";详见 bypassPermissions

启动时设置:

claude --permission-mode dontAsk

bypassPermissions 模式:跳过所有检查

禁用所有权限提示和安全检查,工具调用立即执行。 从 v2.1.126 起包括对受保护路径的写入(更早版本仍会提示)。

以下情况仍会弹出提示:

  • 显式 ask 规则组织设为 ask 的 connector 工具
  • 标记了 _meta["anthropic/requiresUserInteraction"] 的 MCP 工具(v2.1.199+)
  • 针对文件系统根目录或 home 目录的删除操作(如 rm -rf /rm -rf ~)——作为防止模型错误的断路器。v2.1.208 起,当命令包含命令替换($(...) 或反引号)或进程替换(<(...))时断路器同样触发,无论删除是在替换内部(如 echo "$(rm -rf ~)")还是同一命令的其他位置。普通形式自断路器引入起就会在此模式中弹出提示;v2.1.208 之前包含这些形式的命令不弹出

在 bypass permissions 可用的会话中,Claude Code 也不强制执行 plan 模式的阻止。Claude 仍被指示只规划不编辑,但它在规划期间尝试的文件编辑或 Shell 命令会直接运行而无需提示。显式 ask 规则和上述删除断路器仍会弹出提示。

⚠️ 仅在容器、虚拟机或无互联网的 dev container 等隔离环境中使用,Claude Code 无法损害你的宿主系统。

你无法从未使用启用标志启动的会话中进入 bypassPermissions。通过 settings 中的 permissions.defaultMode: "bypassPermissions" 或启用标志来启用:

claude --permission-mode bypassPermissions

--dangerously-skip-permissions 标志等效。

首次以此模式启动交互式会话时,Claude Code 会显示一个警告对话框,要求你承担在无权限检查情况下执行操作的责任。Claude Code 将你的接受保存到用户设置,因此对话框只出现一次。如果你拒绝,Claude Code 退出。在非交互模式中不显示对话框,且在你接受交互式对话框之前,以 --bg 启动的后台会话会被拒绝。

在 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",因此仓库签入的设置无法让云端会话以 bypass-permissions 模式启动。该设置被静默忽略,会话以模式下拉菜单显示的模式启动。详见切换权限模式中云端会话提供的模式。

⚠️ bypassPermissions 对提示注入或意外操作不提供任何保护。需要后台安全检查且少权限提示时,请用 auto 模式。管理员可通过 managed settings 中将 permissions.disableBypassPermissionsMode 设为 "disable" 来阻止此模式。

受保护路径

在除 bypassPermissions 外的所有模式中,对一小组特定路径的写入永远不会被自动批准(bypass permissions 可用的 plan 会话除外),以防止仓库状态和 Claude 自身配置被意外破坏。

模式 受保护路径写入的处理
defaultacceptEdits 弹出提示
plan 弹出提示。在 bypass permissions 可用的会话中允许(v2.1.217+)。否则,在 auto 模式可用时路由到分类器(v2.1.218+)
auto 路由到分类器
dontAsk 拒绝
bypassPermissions 允许

设置文件中的 permissions.allow 规则不能预批准受保护路径的写入。安全检查在 Claude Code 评估 settings 文件中的 allow 规则之前运行,因此 ~/.claude/settings.json.claude/settings.json 中的 Edit(.claude/**) 条目不改变上表中各模式的行为。在需要提示的模式中,.claude/ 写入的提示会提供 Yes, and allow Claude to edit its own settings for this session 选项,批准后该会话内后续 .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.cjsbunfig.toml.bunfig.toml
  • .bazelrc.bazelversion.bazeliskrc
  • .pre-commit-config.yamllefthook.ymllefthook.yaml.lefthook.yml.lefthook.yaml
  • gradle-wrapper.propertiesmaven-wrapper.properties
  • .devcontainer.json
  • .ripgreprcpyrightconfig.json
  • .mcp.json.claude.json

延伸阅读

  • 权限:allow、ask、deny 规则;managed 策略
  • 配置 auto 模式:告诉分类器你的组织信任哪些基础设施
  • Hooks:通过 PreToolUsePermissionRequest hooks 实现自定义权限逻辑
  • Ultraplan:在 Claude Code on the web 会话中运行 plan 模式并在浏览器中审查
  • 安全:安全防护和最佳实践
  • 沙箱:Bash 命令的文件系统和网络隔离
  • 非交互模式:用 -p 标志运行 Claude Code