刚用 Claude Code 的时候,我经常被确认弹窗搞得心烦------让它读个文件要确认、跑个测试要确认、看个 git status 也要确认。一天点了上百次 Allow,手都酸了。
后来花了十分钟认真配了一遍权限系统,弹窗少了 90%,体验质的飞跃。这篇文章把我的配置思路分享出来,你可以直接照着配。
权限系统的三个级别
Claude Code 把每个操作分到三个级别:
- Ask(默认) :弹确认框,等你想 Allow 还是 Deny。这是刚装好时的默认状态,安全但频繁。
- Allow:自动批准,不弹窗。适合你完全信任的操作。
- Deny:自动拒绝,不弹窗。适合危险操作。
管理权限有两个途径:用 /permissions 命令打开可视化界面管理,或者在对话里直接说口语化指令。我更喜欢后者------比如直接说"以后所有 mvn test 都不要问我了",Claude Code 会帮你修改权限配置文件。
我的 Allow 清单:这些操作放心让它自动做
以下是我加了 Allow 的操作,用了几个月没出过问题:
scss
Read(*) --- 读所有文件
Grep(*) --- 搜索代码
Glob(*) --- 文件匹配
Bash(git status *)
Bash(git log *)
Bash(git diff *)
Bash(mvn test *)
Bash(npm test *)
Bash(npm run *)
Bash(ls *)
这些操作有一个共同点:高频且安全。读文件、搜索代码、看 Git 状态、跑测试------全是日常频繁操作,不会破坏项目。
加上之后,我日常使用中大概 80% 的操作都不弹窗了。Claude 读项目代码、搜索相关文件、运行测试全自动跑,不需要我一直在旁边点 Allow。
我必须 Deny 的操作:这些一旦误执行代价很大
有些操作一旦误执行基本不可逆,我直接 Deny 掉:
scss
Bash(rm -rf *) --- 如果 AI 幻觉了这个命令,直接 Deny 最安全
Bash(git push --force *) --- 覆盖团队代码,后果很严重
Bash(curl * | sh) --- 执行远程脚本,太危险
Bash(wget * | bash) --- 同上
Edit(~/.ssh/*) --- AI 不应该碰我的 SSH 密钥
Read(.env*) --- 环境变量里可能有数据库密码
Read(credentials.*) --- 凭证文件
Read(*.pem) --- 证书文件
rm -rf 和 git push --force 这两个我是直接 Deny 的------Claude Code 正常不会主动执行这些命令,但万一呢?特别是对话长了 Claude 偶尔会"幻觉",防一手总没错。
另外 AI 不应该接触密钥和凭证。我在项目里经常把 API Key 或数据库密码临时放在 .env 文件里,AI 读了虽然不会主动泄露,但对话记录可能会被保存和传输------直接 Deny 掉最省心。
保持 Ask 的操作:每次过一眼
代码修改我全部保持 Ask。不管用多久,改代码之前我都想看一眼它到底要改什么:
scss
Edit(*) --- 修改文件前看一眼改了什么
Bash(curl *) --- 网络请求
Bash(docker *) --- Docker 操作
Bash(kubectl *) --- K8s 操作
Bash(git commit *) --- Git 提交
Bash(git push) --- Git 推送
这些操作在正常情况下都是安全的,但我需要知道它什么时候做了------特别是 git commit 和 git push,不想它在我没审核的情况下自己提交了。
通配符的灵活用法
权限规则的匹配粒度很灵活,通配符 * 可以匹配任意字符:
Read(*)匹配所有读操作Read(*.java)只匹配读 Java 文件Bash(npm run *)匹配所有 npm run 子命令但不匹配 npm installBash(git *)匹配所有 Git 命令Bash(mvn test *)匹配 maven 测试相关命令
这让你可以很精确地控制------比如只允许改 Java 文件而不允许改配置文件,或者只允许跑测试而不允许执行部署脚本。
优先级规则 :Deny 优先级高于 Allow。所以你不用担心
Bash(git push *)和Bash(git push --force *)冲突------force push 仍然会被 Deny 拦截。
如果想手改 JSON
在 .claude/settings.json 里这样写:
json
{
"permissions": {
"allow": [
"Read(*)",
"Grep(*)",
"Glob(*)",
"Bash(git status *)",
"Bash(git log *)",
"Bash(git diff *)",
"Bash(mvn test *)",
"Bash(npm test *)",
"Bash(npm run *)",
"Bash(ls *)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(git push --force *)",
"Bash(curl * | sh)",
"Bash(wget * | bash)",
"Edit(~/.ssh/*)",
"Read(.env*)",
"Read(credentials.*)",
"Read(*.pem)"
]
}
}
新手和老手的配置策略
新手阶段(第一周) :保持默认 Ask,每个操作都看一遍。这个阶段你还在熟悉 Claude Code 能做什么,多看看它都执行了什么命令有好处。用一周大概就知道哪些操作是安全的了。
日常使用(第二周开始) :把只读操作和跑测试加到 Allow,危险命令加到 Deny,代码修改保持 Ask。这是安全性和效率的平衡点。
团队项目 :在 .claude/settings.json 里统一配,随代码提交。新成员开箱即用,不需要每个人自己调。
配置文件的优先级是项目级 > 用户级,所以团队的项目级配置会覆盖个人的用户级配置。
总结
权限系统是那种"花十分钟配一次,每天省几十次点确认"的投入。我的核心配置策略就三条:
- 只读的放心 Allow------读文件、搜代码、看 Git、跑测试
- 危险的直接 Deny------rm、force push、远程脚本、敏感文件
- 修改的保持 Ask------每次过一眼改了什么
配完之后 Claude Code 用起来顺手很多------确认弹窗从"每次操作都弹"变成"只有改代码才弹",效率感和安心感都上来了。
下一篇讲 Claude 三个模型(Haiku/Sonnet/Opus)怎么选,加上国产模型横评。觉得有用的话欢迎点赞收藏。