刷到Anthropic的公告时是周五晚上。大意是:8月14日起,Claude Code的Pro、Max和Team用户将默认启用Auto模式。
翻译成人话就是------后天开始,Claude Code不再逐条问你"可以执行这个命令吗?",而是自己判断安全性后直接执行。修改文件、运行脚本、执行git操作,全部自动。
我当时第一反应是打开终端检查了自己的settings.json。不是因为我觉得Auto模式一定会炸,而是因为这件事的默认值变了,意味着你什么都不做的话,行为就变了。
Anthropic为什么敢这么做
他们给了三个数据:
数据一:97%的权限提示被无脑批准。
Anthropic统计了所有Claude Code用户的权限操作------每次Claude要执行命令时弹出的"Allow?"确认框,97%的情况下用户直接点了同意。
这意味着那个确认框形同虚设。你以为自己在"审核",实际上你在条件反射地按回车。
数据二:62%的用户已经在用bypassPermissions或类似设置。
超过一半的付费用户早就主动关掉了权限确认。Claude Code的六种权限模式里,最严格的Manual模式反而是少数人在用。
数据三:1053人对照实验,Auto模式比人工审核安全6.5倍。
Anthropic做了一个对照研究------同样的危险命令序列,Auto模式的内置分类器拦截了89% ,而人工逐条审核只拦截了13.6%。
原因很简单:机器不会疲劳,不会在第47次"Allow?"的时候走神点了同意。人会。
但是------11%的漏网率
89%拦截率的另一面是:有11%的危险命令,Auto模式也没拦住。
这11%是什么?根据公开的测试报告,主要是:
- 看起来像正常操作但实际有副作用的命令(比如
rm -rf被包在一个看似无害的脚本里) - 涉及环境变量或敏感路径的间接操作
- 组合命令中的链式危险操作(单独看每步都安全,串起来就危险)
11%听起来不多,但如果你一天跑100次命令,平均每天有11次危险操作会被放行。
Auto模式到底会"自动"做什么
打开Auto模式后,Claude Code会在以下操作上不再询问你:
| 操作类型 | Manual模式 | Auto模式 |
|---|---|---|
| 读取文件 | 自动 | 自动 |
| 写入/修改文件 | ⚠️ 需确认 | ✅ 自动执行 |
| 执行Bash命令 | ⚠️ 需确认 | ✅ 自动执行(除非触发危险分类器) |
| git add/commit | ⚠️ 需确认 | ✅ 自动执行 |
| git push | ⚠️ 需确认 | 🔴 分类器拦截(大多数情况) |
| rm/delete操作 | ⚠️ 需确认 | 🟡 取决于路径和上下文 |
| 安装npm包 | ⚠️ 需确认 | ✅ 自动执行 |
| 修改package.json | ⚠️ 需确认 | ✅ 自动执行 |
关键变化:文件写入和Bash命令执行不再需要你确认。 这意味着Claude可以直接改你的代码、直接跑脚本、直接装包------只要它的内置分类器认为"安全"。
我改了哪6个设置
看完公告后我做的第一件事不是关掉Auto模式(那样就退回到97%无脑点同意的状态了),而是在Auto模式的基础上加约束。
设置1:配置allowedTools白名单
json
// .claude/settings.json
{
"permissions": {
"allow": [
"Read",
"Glob",
"Grep",
"Write(src/**)",
"Edit(src/**)"
],
"deny": [
"Write(.env*)",
"Write(*.config.js)",
"Bash(rm *)",
"Bash(git push*)"
]
}
}
核心思路:只允许Claude自动写入src/目录下的文件。 配置文件、环境变量、根目录文件全部需要确认。这样Claude可以自由改业务代码,但碰不了构建配置和敏感文件。
设置2:锁死.env和敏感文件
json
{
"permissions": {
"deny": [
"Read(.env*)",
"Write(.env*)",
"Read(**/*secret*)",
"Read(**/*credential*)",
"Bash(*SECRET*)",
"Bash(*TOKEN*)",
"Bash(*PASSWORD*)"
]
}
}
Auto模式下Claude能读取项目里的任何文件------包括.env。如果你的.env里有数据库密码、API密钥,Claude读到之后可能在生成代码时把它们硬编码进去,或者在执行命令时意外暴露。
deny规则优先级高于allow,配了deny之后即使Auto模式也会被拦住。
设置3:git操作限制
json
{
"permissions": {
"deny": [
"Bash(git push*)",
"Bash(git reset --hard*)",
"Bash(git checkout -- *)",
"Bash(git clean*)",
"Bash(git branch -D*)"
]
}
}
Auto模式下Claude可以自动git add和git commit------这其实挺方便的。但push、reset --hard、强制删除分支这些不可逆操作,必须手动确认。
一个真实案例:上周看到有人发帖说Claude Code在Auto模式下自动push了一个有debug日志的commit到main分支。原因是Claude判断"commit+push是一个完整的工作流",分类器没有拦截push操作。
设置4:npm install限制
json
{
"permissions": {
"deny": [
"Bash(npm install *--global*)",
"Bash(npx *)",
"Bash(yarn global*)"
],
"allow": [
"Bash(npm install)",
"Bash(npm run *)",
"Bash(yarn install)",
"Bash(yarn add *)"
]
}
}
允许Claude在项目内装包(npm install、yarn add),但禁止全局安装和npx执行。npx可以下载并执行任意包------这是一个巨大的攻击面。
设置5:CLAUDE.md加入硬规则
markdown
# CLAUDE.md
## 安全规则(Auto模式下必须遵守)
- 永远不要修改 .env、.env.local 或任何包含环境变量的文件
- 永远不要执行 git push,所有push操作必须由我手动执行
- 永远不要删除文件,如需删除请先列出文件列表等我确认
- 永远不要修改 CI/CD 配置文件(.github/workflows/*, .gitlab-ci.yml)
- 新增依赖时必须说明理由,不要静默安装
CLAUDE.md是Claude Code的行为规则文件。Auto模式下Claude会遵守这些规则------当然,这不是"硬性"限制(settings.json的deny规则才是),但它提供了一层语义级别的防护。
设置6:开启操作日志
json
{
"auditLog": {
"enabled": true,
"path": ".claude/audit.log",
"includeCommands": true,
"includeFileWrites": true
}
}
Auto模式下最危险的事情不是Claude执行了什么,而是你不知道它执行了什么。开启审计日志后,每一次文件修改和命令执行都会被记录。每天花2分钟扫一眼日志,比事后排查问题快100倍。
不同场景的推荐配置
| 场景 | 推荐模式 | 关键设置 |
|---|---|---|
| 个人side project | Auto + 宽松allow | 允许大多数操作,仅deny push和rm |
| 公司项目(有CI) | Auto + 严格deny | 锁死config/env/CI文件,仅allow src/ |
| 多人协作仓库 | Plan模式 | 让Claude先出方案再执行,避免冲突 |
| 生产环境相关 | Manual | 别用Auto,逐条确认 |
| 开源项目维护 | Auto + deny push | 防止意外push到公开仓库 |
为什么不直接关掉Auto模式
可能有人会说:既然有风险,为什么不直接改回Manual?
因为Anthropic的数据是对的------97%的确认提示你都是无脑点的。Manual模式给你的不是安全感,是"安全感的幻觉"。你觉得自己在审核,实际上第10次之后你就不看了。
Auto模式+精确的deny规则,实际上比Manual模式更安全:
- Manual:所有操作都问你 → 你疲劳后全部无脑批准 → 危险操作也被批准
- Auto+deny:安全操作自动执行 → 你配置的deny规则硬性拦截 → 真正危险的操作必须手动确认
区别在于:Manual模式的安全取决于你的注意力(会疲劳),Auto+deny的安全取决于你的配置(不会疲劳)。
8/14之前的检查清单
后天Auto模式就默认开启了。如果你还没配置过,至少做这几件事:
bash
# 1. 检查当前的权限模式
cat .claude/settings.json
# 2. 如果文件不存在,创建一个
mkdir -p .claude
touch .claude/settings.json
# 3. 至少加上这个最小化安全配置
cat > .claude/settings.json << 'EOF'
{
"permissions": {
"deny": [
"Write(.env*)",
"Bash(git push*)",
"Bash(git reset --hard*)",
"Bash(rm -rf*)"
]
}
}
EOF
# 4. 确认CLAUDE.md存在且有安全规则
cat CLAUDE.md
Auto模式安全设置速查表
| 保护目标 | deny规则 | 优先级 |
|---|---|---|
| 环境变量/密钥 | Write(.env*), Read(.env*) |
🔴 必须 |
| 不可逆git操作 | Bash(git push*), Bash(git reset --hard*) |
🔴 必须 |
| 文件删除 | Bash(rm -rf*), Bash(rm -r *) |
🔴 必须 |
| CI/CD配置 | Write(.github/**), Write(.gitlab-ci.yml) |
🟡 强烈建议 |
| 包管理配置 | Write(package.json) |
🟡 视情况 |
| 全局安装 | Bash(npm install *--global*), Bash(npx *) |
🟡 强烈建议 |
| 构建配置 | Write(webpack.config*), Write(vite.config*) |
🟢 可选 |
核心原则:让AI自动做安全的事,硬性拦截危险的事
Auto模式不是洪水猛兽。Anthropic的数据证明了一个尴尬的事实:大多数人的"人工审核"其实比AI分类器更不靠谱。
但11%的漏网率也是真实的。后天开始,如果你什么都不配置,Claude Code就会用它自己的判断来决定哪些操作安全------而它的判断有11%的概率是错的。
所以正确的策略不是二选一(全手动 vs 全自动),而是:让Auto处理97%的安全操作,用deny规则硬性拦截那3%你绝对不允许自动执行的东西。
你的Claude Code配置好了吗?8月14日后天就到了。