权限模式与授权有效期

「以后别问了」这句话,对命令和对文件的效果完全不同——一个永久写进磁盘,一个关掉会话就没了。这个差别多数人不知道。

约 9 分钟

用熟之后,第一个想改的就是权限:它问得太频繁了。

这一节讲怎么少问,以及少问的代价是什么

六种模式,Shift + Tab 循环切换

模式 界面上叫 行为
default Manual 每类工具第一次用时问你
acceptEdits Accept Edits 自动接受文件编辑,以及 mkdir mv cp 这类常见文件操作
plan Plan 只读不写:它可以看、可以跑只读命令,但不改你的文件
auto Auto 自动批准,但后台跑安全检查核对动作是否符合你的要求
dontAsk 自动拒绝没有预先授权过的工具
bypassPermissions 全部跳过

当前模式会显示在输入框的边框和提示区,一眼能看到。

实际上你只需要用三个

场景 用哪个
日常 default
一件已经想清楚、要连续改很多文件的活 acceptEdits
还没想清楚,先让它看一遍出方案 plan

plan 值得特别推荐。 一件事比较大的时候,先切到 plan 让它读材料、给方案,确认之后再动手——方案阶段发现理解偏差,成本是零。

「以后别问了」的有效期

这是这一节最重要的一条,而且几乎没人知道。

选了「Yes, don’t ask again」之后,能记多久,取决于你批准的是什么

你批准的是 记多久
shell 命令 永久,而且写进磁盘文件
文件修改 只到这个会话结束,不写盘

命令类的授权会落盘

批准一条 shell 命令并选「以后别问了」,这条规则会被写进你这个代码仓库根目录下的 .claude/settings.local.json

从此这个仓库里所有的会话都适用——包括子目录里启动的、以后新开的。

这意味着什么:你随手批准的那条命令,不只是这一次。三个月后你早忘了,它还在生效。

想看自己批准过什么,用 /permissions 建议偶尔翻一次。

文件修改的授权不落盘

批准编辑文件并选「以后别问了」,只在当前会话有效,关掉就没了。

这是一个刻意的设计:改文件的影响是具体的、一次性的;而一条命令可以在任何时候对任何东西执行。

三条规则:允许、询问、拒绝

/permissions 管理,也可以直接写进配置文件。

类型 效果
allow 不问,直接用
ask 每次都问
deny 直接挡住

求值顺序:deny → ask → allow

第一条匹配上的说了算,规则写得多具体不影响顺序。

这一条有个反直觉的后果:

一条宽泛的 deny 规则,挡得住一条更具体的 allow。

你写了 deny: Bash(aws *),又写了 allow: Bash(aws s3 ls)——后者不生效,因为 deny 先匹配上了。

deny 规则不支持例外。 要留口子,就把 deny 写窄一点。

一个实用的例子

假设你不想让它碰任何 .env 文件(那类文件里常放密钥):

JSON
{
  "permissions": {
    "deny": ["Read(.env)", "Read(**/*.env)"]
  }
}

这条 deny 会同时挡住读和改——包括通过 catheadsed 这类命令去读。

但它挡不住间接的读取。 如果它跑了一个脚本,而那个脚本自己打开了文件,权限规则看不见这件事。要在操作系统层面挡死,得开沙箱。

关于 bypassPermissions

它跳过几乎所有提示,包括对 .git.claude.vscode 这类配置目录的写入。

官方的措辞是:只在容器或虚拟机这类隔离环境里用。

不建议在你自己日常干活的机器上开这个。

它剩下的保护只有一条熔断:对根目录和主目录的删除(rm -rf / 这类)仍然会问你。 除此之外没有别的拦截。

如果你担心自己或者别人误开,可以在配置里把它锁死:

JSON
{
  "permissions": {
    "disableBypassPermissionsMode": "disable"
  }
}

这个开关在任何一层配置里都生效——也就是说,你可以自己给自己上锁。

配置文件的优先级

从高到低:

层级
1 组织统一下发的配置 —— 谁都盖不过,包括命令行参数
2 命令行参数
3 项目本地配置 .claude/settings.local.json
4 项目共享配置 .claude/settings.json
5 用户配置 ~/.claude/settings.json

有一条横跨所有层级的规则:

任何一层拒绝了,其他层都无法允许。

用户配置里 allow、项目配置里 deny —— deny 赢。 反过来也一样。

一个可能会遇到的确认框

在一个新项目里第一次启动时,可能会弹出一个信任对话框,问你信不信任这个文件夹。

原因是:项目配置文件里的 allow 规则只有在你接受信任之后才生效

这是防一类具体的攻击:你从网上下载了一个项目,它的配置文件里预先写好了一堆 allow 规则。不接受信任,那些 allow 就不生效。

deny 和 ask 不受影响——它们只做限制,所以一直生效。

不确定的项目就选「不信任」。 你仍然能用,只是会多问你几次。

一句总结

提示词和 CLAUDE.md 决定它想做什么,权限规则决定它能做什么。

这两件事互不替代。要真正挡住一件事,写规则,不要写嘱咐。

本节事实查证日期:2026-08-05。 依据:官方 Configure permissions

← 回到手册目录