使用 AI 编程工具时,会遇到一个两难问题:每次都请求许可很麻烦,但全部放开又会担心 git push 和 rm -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”,因此必须把规则拆分得更细。
另外,如果在 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。
总结
权限系统的骨架有三部分:allow、ask、deny 规则;deny → ask → allow 的评估顺序;以及决定会话基调的权限模式。
基本策略是:将常用的安全命令加入 allow,减少提示疲劳;将危险命令加入 deny,彻底禁止。
下一篇将介绍用于延续和拆分对话的 /resume、/branch、/fork 三件套。
来源与核验标准
- Claude Code 官方文档 — Configure permissions(Anthropic,2026-08-13 核验)
- Claude Code 官方文档 — Choose a permission mode(Anthropic,2026-08-13 核验)

![[Claude Code #3] 权限总览:/permissions 与模式循环 封面图](/assets/images/posts/b17b8c27-14dd-4d96-bc74-34a249a2ae3b/claude-code-permission-rules.jpg)