DeepDojo.AI发布 2026-11-12English

Claude Code 六种权限模式怎么选

Claude CodeAI 编程

一个长任务跑到一半,Claude Code 每改一个文件、每跑一条命令都要你点一次确认。点到第二十次,你开始想:干脆开 bypassPermissions,让它一口气做完算了。

弹窗确实累人,可跳过确认之前,最好先弄清权限模式到底在管什么。它不是一个“安全等级”滑块,而是在回答一个具体问题:权限规则都没命中的操作,该怎么处理。不同模式给出的答案不同:

  • 有的只放行读取,其余都问你;
  • 有的自动接受文件编辑;
  • 有的交给后台分类器审查;
  • 有的把需要确认的操作直接拒绝;
  • 有的几乎什么都不问。

所以选模式要看这次任务和运行环境:读陌生项目、连续小步改、无人值守跑 CI,需要的模式各不相同。弹窗少了,要说得清少在哪里,以及谁在替你兜底。

01 模式在规则之后才起作用

规则都没匹配到,才交给当前权限模式处理。顺序是:先查 deny,再查 ask,再查 allow,三类都没命中,才轮到模式决定。也就是说,你写下的拒绝规则在任何模式下都先于模式生效,规则本身怎样匹配见Claude Code 明明允许了,为什么还拒绝。

规则写得越窄,留给模式处理的操作就越少。白名单的写法见Claude Code 权限白名单的五个常见漏洞。

02 六种模式各自放行什么

模式主要行为适用场景
default读取直接进行,编辑文件、运行命令等操作前询问入门、敏感项目和日常稳妥开发
acceptEdits自动接受文件编辑和部分常见文件命令你会及时查看 diff 的代码迭代
plan以阅读、分析和方案制定为主,不修改源码改动前调研和设计
auto由独立分类器在后台检查操作,减少常规确认当前账户与环境支持时,用于方向明确的长任务
dontAsk本来需要弹窗的操作自动拒绝;预先放行的操作仍可运行CI、脚本和非交互受限环境
bypassPermissions大部分操作跳过权限确认仅限无法伤害宿主机的隔离容器或虚拟机

这张表和 Claude Code 的权限模式文档一致。几个细节值得记住:

  • default 在命令行、IDE 扩展和桌面端显示为 Manual,default 是它在配置里的值。
  • acceptEdits 除了文件编辑,还会放行 mkdir、touch、mv、cp 这类常见文件命令,关键路径和破坏性操作仍需 ask 或 deny。
  • 官方文档说明,从 v2.1.283 起,交互式终端和 VS Code 会话默认从 auto 模式启动。想每一步都自己审,要主动选 Manual,例如 claude --permission-mode default。

03 按任务选模式

模式选择还得回到这次任务。

  • 只读陌生项目:plan 就有明确用途。发现问题后要修改,再调整任务与模式。
  • 熟悉项目里连续小步改:可以考虑 acceptEdits,同时查 diff。
  • 无人值守的 CI:没有人处理确认提示,才考虑 dontAsk,让未获准的动作直接失败。

auto 的分类器会减少提示,部署、凭证和不可逆改动仍需人工审查。官方列出了分类器默认拦截的操作,包括下载并执行代码、把敏感数据发到外部、生产部署和迁移、强制推送、丢弃未提交改动的 git reset --hard 等。这些拦截是它的保底,不能代替你对这次任务边界的判断。

使用 bypassPermissions 前,应核对容器或虚拟机对文件、网络和宿主访问的隔离。提示减少本身不能证明操作安全。官方文档也把它的适用范围写成“仅限隔离的容器和虚拟机”。

04 切换和设置默认模式

在终端会话中,可以用 Shift+Tab 在常用模式之间切换,也可以启动时指定:

claude --permission-mode plan

Shift+Tab 的循环顺序是 default → acceptEdits → plan;当前在 auto 时,第一次按会先回到 default。dontAsk 不在这个循环里,要用 --permission-mode dontAsk 启动。

默认模式通过 Settings 的 permissions.defaultMode 设置,例如设为 default。官方文档有一条限制:项目的 .claude/settings.json 或 .claude/settings.local.json 里把默认模式设成 auto 或 bypassPermissions 不会生效,这两种只能由你自己的用户配置、命令行或组织策略决定。仓库里的配置没法替你打开最宽松的模式。

05 两个容易忽略的继承问题

第一个问题出在子代理。你给一个只读审查代理写了 permissionMode: plan,以为它就不会改文件了。子代理文档说明:主会话处于 bypassPermissions、acceptEdits 或 auto 时,子代理会跟随主会话的模式,忽略你写的 permissionMode。所以只读角色还要靠收紧工具来保证,做法见Claude Code 自定义只读审查子代理。

第二个问题出在无人值守。确实需要让 Claude 自己跑完时,应先用容器或虚拟机限制文件系统和网络,再采用明确的允许规则或 dontAsk 模式,让未批准操作直接失败。官方给的 CI 示例正是这种组合:用 dontAsk 配合 --allowedTools 列出精确的允许范围。

回到开头那个点了二十次确认的长任务:与其直接跳过所有检查,不如先把常用的安全命令写进白名单,让模式只处理剩下的少数操作;真要放开,先把环境隔离好。模式选对了,弹窗会少,而且你说得出少掉的那部分由谁负责。