AI 编程与智能体

[Claude Code #3] 权限总览:/permissions 与模式循环

Claude Code 权限通过 allow、ask、deny 规则运行,并按 deny 优先的顺序评估。本文总结 /permissions 的用法、Bash 通配符语法、Shift+Tab 模式循环,以及配置文件的优先级。

5 分钟阅读
[Claude Code #3] 权限总览:/permissions 与模式循环 封面图

使用 AI 编程工具时,会遇到一个两难问题:每次都请求许可很麻烦,但全部放开又会担心 git pushrm -rf

Claude Code 用权限规则解决这种平衡。有些命令静默通过,有些命令必须询问,还有些命令会被完全阻止。

上期 Claude Code 第 2 篇 中介绍的计划模式也运行在这套权限系统之上。本篇将整理完整全貌。

基本行为:哪些操作会询问?

根据 官方权限文档,不同工具类型有不同的默认规则。

读取文件、搜索等只读工具,在工作目录内无需批准即可运行。

原则上,Shell 命令需要批准。不过,内置的只读命令集合是例外。

修改文件时总会询问。即使选择“不再询问”,会话结束后也会重置。相比之下,Shell 命令的“不再询问”会保存为按仓库设置的规则,并在后续会话中继续生效。

用 /permissions 查看规则

在会话中输入 /permissions,即可打开当前生效的规则列表。列表还会显示每条规则来自哪个 settings.json。

规则分为三种。

  • allow:无需询问即可执行
  • ask:每次尝试都要求确认
  • deny:直接阻止执行

评估顺序决定一切

规则重叠时会怎样?顺序是 deny → ask → allow,先匹配到的规则生效。

关键在于,具体程度无法改变顺序。如果将 Bash(aws *) 加入 deny,即使在 allow 中非常具体地写入 Bash(aws s3 ls),也会被阻止。

deny 规则不允许例外。无法配置“阻止所有 aws,但只允许查询 s3”,因此必须把规则拆分得更细。

Claude Code 权限规则 deny、ask、allow 评估顺序流程图
这就是规则评估顺序:先检查 deny,先匹配到的一方生效。

另外,如果在 deny 中只写工具名称而不加括号(例如 Bash),该工具会从 Claude 的上下文中彻底消失。像 Bash(rm *) 这样的限定范围规则会保留工具,只阻止对应调用。

快速浏览规则语法

规则的形式是 도구도구(지정자)。Bash 规则支持 * 通配符,位置也不受限制。

{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git commit *)",
      "Bash(* --version)"
    ],
    "deny": [
      "Bash(git push *)",
      "Read(./.env)"
    ]
  }
}

如果命令末尾的星号前有空格(Bash(ls *)),就会遵守单词边界。它能匹配 ls -la,但不会匹配 lsof。没有空格的 Bash(ls*) 则连 lsof 也能匹配。

git status && npm test 这样的复合命令,必须让每个子命令都符合规则才能通过。即使允许 Bash(safe-cmd *)safe-cmd && other-cmd 也无法通过。

文件路径规则只检查 Read(경로)Edit(경로)。这里使用 gitignore 模式语法。如果写成 Write(docs/**),它会被忽略,因此必须写成 Edit(docs/**)

顺带一提,Read deny 还会同时阻止对同一路径的编辑和写入。只用示例中的一个 Read(./.env),读取和修改都会被阻止。

权限模式:使用 Shift+Tab 循环

如果说规则是精确瞄准,权限模式就是整个会话的基调。

每次按下 Shift+Tab,模式都会按 default(手动批准)→ acceptEdits(自动批准编辑)→ plan(计划模式)的顺序循环。计划模式已在上期介绍过。

根据 官方权限模式文档,满足账户和套餐条件后,auto 模式也会加入循环。该模式由分类模型只筛出危险操作,其余操作不再询问。即便如此,明确的 ask 规则仍会强制弹出提示。

另外,根据 官方公告依据,从 2026 年 8 月 14 日起,Pro、Max、Team 套餐的新会话默认使用 auto 模式。

配置文件之间的优先级

规则可以分布在多个层级的 settings.json 中:个人全局配置(~/.claude/)、项目配置(.claude/settings.json)、仅本地配置,以及组织管理配置。

官方配置优先级文档 阐明的原则很简单:任意层级命中 deny 后,都无法用其他层级的 allow 覆盖。

项目允许的操作,可以用个人配置中的 deny 阻止,反过来也一样。组织管理配置中的 deny 连命令行标志也无法解除。

规则由工具执行,而不是模型

最后,还有一个容易误解的地方。

在 CLAUDE.md 中写“不要执行 git push”只是请求,并不是强制。如果模型忘记指令或判断错误,就可能绕过它。

权限规则则不同。Claude Code 客户端会不受模型判断影响,机械地执行这些规则。必须阻止的操作应写入 deny 规则,而不是 CLAUDE.md。

对比 RULES NOT REQUESTS 标语、写有请求的便签与一扇上锁铁门的插画
请求写在 CLAUDE.md 中,强制规则写在 deny 中。

总结

权限系统的骨架有三部分:allow、ask、deny 规则;deny → ask → allow 的评估顺序;以及决定会话基调的权限模式。

基本策略是:将常用的安全命令加入 allow,减少提示疲劳;将危险命令加入 deny,彻底禁止。

下一篇将介绍用于延续和拆分对话的 /resume/branch/fork 三件套。

来源与核验标准

延伸阅读

Claude Code 系列

相关主题