Claude Code 的六种权限模式:从每步确认到完全放手

Claude Code 想改文件、跑命令、发网络请求前会停下来问你——权限模式决定这个"停顿"有多频繁。本文讲透 default / acceptEdits / plan / auto / dontAsk / bypassPermissions 六种模式各自放行什么、怎么切换、auto 模式的分类器拦截哪些动作,以及任何模式下都受保护的路径。

阅读时长: 9 分钟
共 4346字
作者: longlikun

Claude Code 每次想改一个文件、跑一条 shell 命令、发一个网络请求,都会先停下来征求你同意。权限模式(permission mode)控制的就是这个"停顿"出现得有多频繁。

模式的选择直接塑造了一次会话的节奏:默认模式让你逐个动作地审查,而宽松的模式让 Claude 连续干较长一段、干完再向你汇报。敏感的活儿给它多一点监督,信得过方向的活儿给它少一点打断——这就是权限模式的全部意义。

这篇把六种模式讲透:各自不问就能做什么、怎么切换、auto 模式背后那个分类器拦什么放什么,以及哪些路径在任何模式下都被保护着。

一、六种模式速览

每种模式都是在便利监督之间做一个不同的权衡。下表是各模式下"无需弹窗确认"就能跑的范围:

模式 不问就能做的 适合
default 只读 刚上手、敏感工作
acceptEdits 读 + 改文件 + 常见文件系统命令(mkdir/touch/mv/cp 等) 边改边在编辑器里 review
plan 只读 动手前先摸清一个代码库
auto 几乎一切,但有后台安全检查 长任务、减少弹窗疲劳
dontAsk 只有预先批准的工具 锁死的 CI 和脚本
bypassPermissions 一切 仅限隔离的容器 / 虚拟机

有两条贯穿始终的规则,先记住:

  1. bypassPermissions,所有模式都永远不会自动批准对受保护路径的写入——这道墙护着仓库状态和 Claude 自己的配置不被误伤。
  2. 模式只是设定基线。你可以在上面叠加权限规则(permission rules),在任意模式下预先放行或屏蔽特定工具——唯一例外还是 bypassPermissions,它直接跳过整个权限层。

二、怎么切换模式

关键认知:模式是通过下面这些控件设置的,不是在对话里跟 Claude 说就能切的。

会话中(CLI):Shift+TabdefaultacceptEditsplan 之间循环,当前模式显示在状态栏。注意不是所有模式都在这个默认循环里:

  • auto:账号满足要求时才出现,首次循环到它会弹一个 opt-in 确认。
  • bypassPermissions:用 --permission-mode bypassPermissions--dangerously-skip-permissions--allow-dangerously-skip-permissions 启动后才出现(--allow- 变体只把它加进循环但不激活)。
  • dontAsk:永远不进循环,只能用 --permission-mode dontAsk 设。

启动时: 用 flag 指定。

claude --permission-mode plan

设为默认:settings 里写 defaultMode

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

同一个 --permission-mode flag 配合 -p 也能用于非交互运行

VS Code、JetBrains、Desktop、Web/移动端各有自己的切换入口。VS Code 是点提示框底部的模式指示器,JetBrains 跑在 IDE 终端里所以和 CLI 一样按 Shift+Tab,Desktop 用发送按钮旁的选择器。Web 端能用哪些模式还取决于会话跑在哪:云端会话只有 plan 和自动接受编辑,远程控制(Remote Control)会话多一个"询问权限"。

三、三种日常模式

acceptEdits:自动放行文件编辑

acceptEdits 让 Claude 在你的工作目录里创建和修改文件不再逐个询问,状态栏会显示 ⏵⏵ accept edits on

除了改文件,它还会自动批准这些常见的文件系统 Bash 命令:mkdirtouchrmrmdirmvcpsed。即使前面加了安全的环境变量(如 LANG=CNO_COLOR=1)或进程包装器(timeoutnicenohup),也照样放行。

但有边界:自动批准只对工作目录或 additionalDirectories 内的路径生效。超出范围的路径、对受保护路径的写入、以及所有其他 Bash 命令,仍然会弹窗。

适用场景:你打算事后通过编辑器或 git diff 统一 review 改动,而不是逐条内联批准。从默认模式按一次 Shift+Tab 进入,或直接 claude --permission-mode acceptEdits 启动。

plan:先分析,不动手

Plan 模式告诉 Claude 只研究、只提方案,不真改。它会读文件、跑命令去探索、写出一份计划,但不碰你的源码。权限弹窗规则和默认模式一致。

进入方式:按 Shift+Tab,或给单条 prompt 加前缀 /plan,或启动时 claude --permission-mode plan。再按一次 Shift+Tab 可以不批准计划直接退出

计划做好后,Claude 会把它呈现给你并问怎么继续,你可以选:

  • 批准并以 auto 模式开始
  • 批准并自动接受编辑
  • 批准但逐个手动 review
  • 带着反馈继续规划
  • Ultraplan 做浏览器端 review

批准计划会退出 plan 模式、切到对应的权限模式,然后 Claude 开始动手。一个小技巧:按 Ctrl+G 能在你的默认文本编辑器里直接打开并修改那份计划,再让 Claude 执行。

要把 plan 设为项目默认,在 .claude/settings.json 里写 "defaultMode": "plan"

四、auto 模式:用分类器替代弹窗

auto 模式需要 Claude Code v2.1.83 或更高版本,且是 research preview(研究预览)。它减少弹窗,但不等于保证安全——用在你信得过大方向的任务上,别拿它替代对敏感操作的审查。

auto 模式让 Claude 不弹权限窗就执行。但动作跑之前,会有一个独立的分类器模型先审一遍,拦截那些"超出你请求范围、指向不认识的基础设施、或看起来是被读到的恶意内容驱动"的动作。

它还会推着 Claude 不停下来问澄清问题地往下做(除非你的 prompt 或某个 skill 明确依赖追问)。如果你想要"更自主但仍保留权限弹窗",应该改用 Proactive 输出风格

可用门槛(必须全部满足,否则报"不可用"且不是临时故障):

  • 套餐:所有套餐均可。
  • 管理员:Team / Enterprise 需管理员先在后台启用;管理员也可用 permissions.disableAutoMode: "disable" 锁死。
  • 模型:Sonnet 4.6、Opus 4.6 或 Opus 4.7。更老的(含 Sonnet 4.5、Opus 4.5、Haiku、claude-3)都不支持。
  • provider:仅 Anthropic API。Bedrock / Vertex / Foundry 不可用。

⚠️ 一个常见坑:如果你设了 defaultMode: "auto" 但会话却以 default 启动且无报错,大概率是你把它写进了 .claude/settings.json.claude/settings.local.json——Claude Code 会忽略来自这两个文件的 auto,防止一个仓库给自己授予 auto 权限。把它挪到 ~/.claude/settings.json

分类器默认拦什么、放什么

分类器信任你的工作目录和仓库已配置的 remote,其余一切默认当作"外部",直到你配置可信基础设施

默认拦截 默认放行
下载并执行代码(如 curl | bash) 工作目录内的本地文件操作
把敏感数据发往外部端点 安装 lock/manifest 里声明的依赖
生产环境部署和迁移 .env 并把凭证发给对应的 API
云存储上的批量删除 只读 HTTP 请求
授予 IAM 或仓库权限 push 到你起步的分支或 Claude 新建的分支
修改共享基础设施
不可逆地销毁会话前就存在的文件
force push,或直接 push 到 main

claude auto-mode defaults 能看到完整规则列表。如果常规动作总被拦,管理员可以通过 autoMode.environment 设置把可信的仓库、bucket、服务加进白名单。

你在对话里说的"边界"也算拦截信号

这点很妙:如果你在对话里跟 Claude 说"先别 push"“等我 review 完再部署”,分类器会把这些话当作 block 信号,即使默认规则本来允许该动作,它也会拦下来。边界一直生效,直到你在后面的消息里解除它——Claude 自己判断"条件满足了"并不能解除它。

但要注意:边界不是存成规则的。分类器每次检查都从对话记录里重新读它,所以一旦上下文压缩把那条消息删掉,边界就丢了。需要硬保证的话,改用 deny 规则

什么时候 auto 模式会"退回"弹窗

每个被拒动作都会有通知,并出现在 /permissions 的 “Recently denied” 标签里,按 r 可以带手动批准重试。

连续被拦 3 次,或累计被拦 20 次,auto 模式就暂停、Claude Code 恢复弹窗;批准那个弹窗后恢复 auto。这两个阈值不可配置。任何被允许的动作会重置"连续"计数器,而"累计"计数器整个会话持续累加。在 -p 非交互模式下,反复被拦会直接中止会话(因为没人可问)。

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

五、两种极端模式

dontAsk:只放行预先批准的工具

dontAsk 把每个本来要弹窗的工具调用一律自动拒绝。只有匹配你 permissions.allow 规则的动作、以及只读 Bash 命令能跑;连显式的 ask 规则也是拒绝而非弹窗。

这让它成为完全非交互的模式——适合 CI 流水线或受限环境,你预先精确定义好 Claude 能做的一切。只能用 claude --permission-mode dontAsk 启动。

bypassPermissions:跳过一切检查

bypassPermissions 关掉权限弹窗和安全检查,工具调用立即执行。从 v2.1.126 起这也包括对受保护路径的写入(更早的版本还会弹窗)。唯一保留的熔断:针对文件系统根目录或家目录的删除(rm -rf /rm -rf ~)仍会弹窗,防模型出错。

这个模式对 prompt 注入和意外动作毫无防护。想要"无弹窗 + 后台安全检查",请用 auto 模式而不是它。只在隔离环境(容器、VM、无网络的 dev container)里用。

几个限制:

  • 不能从一个没带启用 flag 启动的会话中途切进来,必须用 claude --permission-mode bypassPermissions(或等价的 --dangerously-skip-permissions)重启。
  • 在 Linux/macOS 上,以 root 或 sudo 运行时 Claude Code 拒绝以此模式启动(识别到的 sandbox 内会自动跳过该检查)。要在容器里自主运行,用 dev container 配置,它以非 root 用户跑 Claude Code。
  • 管理员可用 permissions.disableBypassPermissionsMode: "disable" 屏蔽此模式。

六、受保护路径:任何模式都拦

有一小撮路径的写入永远不会被自动批准(除了 bypassPermissions),目的就是防止误伤仓库状态和 Claude 自己的配置。在 default/acceptEdits/plan 下这些写入会弹窗,在 auto 下走分类器,在 dontAsk 下直接拒绝。

受保护目录:

  • .git.vscode.idea.husky
  • .claude——但 .claude/commands.claude/agents.claude/skills.claude/worktrees 除外(Claude 本来就常在这几个里建东西)

受保护文件:

  • .gitconfig.gitmodules
  • .bashrc.bash_profile.zshrc.zprofile.profile
  • .ripgreprc
  • .mcp.json.claude.json

小结:怎么选

  • 刚上手 / 改敏感代码default,逐步确认最稳。
  • 正在写代码、想事后用 git diff 统一看acceptEdits
  • 进一个陌生代码库、想先摸清再动plan
  • 长任务、信得过方向、受不了弹窗疲劳auto(记住它是研究预览,且你在对话里说的"边界"会被分类器当拦截信号)。
  • CI / 脚本,要完全可预测dontAsk,预先列死能做什么。
  • 隔离容器里完全放手bypassPermissions,且仅限于此。

一句话:模式定基线,权限规则做微调,受保护路径兜底线。 把这三层配合好,你就能在"少被打断"和"不出事"之间找到自己的平衡点。

相关阅读

这是 Claude Code 系列的一篇,搭配阅读效果更好:

本文改写自 Claude Code 官方文档 Choose a permission mode,内容以官方文档为准。

关于

关注我获取更多资讯

月球基地博客公众号二维码,扫码关注获取更多 AI 与编程资讯
📢 公众号
月球基地博客作者个人微信二维码,扫码交流 AI 与编程话题
💬 个人号
使用 Hugo 构建
主题 StackJimmy 设计