权限配置
配置 Claude Code 的权限模式,控制哪些操作需要人工确认
需要 API Key? 前往注册 →端点与 Base URL →
Claude Code 使用权限系统来控制哪些操作需要用户确认。合理配置权限,既能保证安全,又能提高开发效率。
权限模式¶
| 模式 | 说明 | 适用场景 |
|---|---|---|
default |
首次使用工具时询问权限(手动模式) | 日常开发,平衡安全与效率 |
acceptEdits |
自动批准文件编辑,其他操作仍需确认 | 需要频繁修改文件的任务 |
plan |
只分析不执行(Plan Mode);auto 可用时,规划阶段的 shell 命令由分类器审查 | 探索和审查代码,不希望 Claude 做任何修改 |
auto |
由分类器审查需要确认的操作,明显越界的动作被拦下,其余自动执行 | 希望少被打断的日常开发(Claude Code 2.1.283 起交互会话的默认模式) |
dontAsk |
只执行无需确认的操作(如工作目录内读文件、只读命令)和 allow 规则预先批准的操作,其余直接拒绝、不询问 | CI/CD 等无人值守场景 |
bypassPermissions |
跳过所有权限提示 | 完全隔离、受信任的环境 |
auto 模式与 QCode:经 QCode 使用 auto 完全可行。分类器请求由 Claude Code 自己发出(默认模型
claude-sonnet-5), 计入你的用量。若出现「your requests go through … which isn't compatible」的英文提示,交互模式下它会暂停第一个需要审查的操作、 按 Enter 继续;设置CLAUDE_CODE_AUTO_MODE_SERVER=0即可去掉。详见 功能可用性对照。
切换权限模式¶
- 按
Shift+Tab循环切换权限模式;从 auto 出发的顺序是 auto → default → acceptEdits → plan - 进入 Plan Mode:从手动模式(default)按两次
Shift+Tab,从 auto 按三次 - 启动时指定:
claude --permission-mode acceptEdits - 在对话框中直接选择模式
配置默认权限模式¶
在 .claude/settings.json(项目级)或 ~/.claude/settings.json(用户级)中配置:
{
"permissions": {
"defaultMode": "acceptEdits"
}
}
注意:
"defaultMode": "auto"只在用户级~/.claude/settings.json或组织的 managed settings 中生效; 写在项目级.claude/settings.json/.claude/settings.local.json里会被忽略,会话回到内置默认(不是用户级的设置)。bypassPermissions写在项目级里同样不生效。启动参数--permission-mode优先于配置文件。
Allow 规则:预批准命令¶
预先批准特定命令,避免每次询问:
{
"permissions": {
"allow": [
"Bash(npm run lint)",
"Bash(npm run test:*)",
"Bash(git status)",
"Bash(git add:*)",
"Bash(git diff:*)"
]
}
}
Allow 规则语法:
Bash(命令)— 精确匹配命令Bash(命令前缀:*)— 匹配以该前缀开头的命令Read(文件路径)— 允许读取特定文件Write(文件路径)— 允许写入特定文件
Deny 规则:保护敏感文件¶
阻止 Claude 访问或修改敏感文件:
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Write(./.git/**)",
"Bash(rm -rf:*)"
]
}
}
Deny 规则语法:
- 路径模式支持
*(单层)和**(多层)通配符 - Deny 规则优先级高于 Allow 规则
同时使用 Allow 和 Deny¶
{
"permissions": {
"defaultMode": "acceptEdits",
"allow": [
"Bash(npm run *)",
"Bash(git status)",
"Bash(git diff)"
],
"deny": [
"Bash(git push:*)",
"Bash(rm -rf:*)",
"Read(./.env*)"
]
}
}
配置文件层级¶
Claude Code 按以下优先级合并权限配置:
| 优先级 | 位置 | 适用范围 |
|---|---|---|
| 最高 | .claude/settings.local.json(不提交到 Git) |
个人本地覆盖 |
| 中 | .claude/settings.json(提交到 Git) |
团队共享配置 |
| 最低 | ~/.claude/settings.json |
全局用户配置 |
团队协作建议:
- 将团队通用的 allow/deny 规则放在
.claude/settings.json并提交到 Git - 个人特殊需求放在
.claude/settings.local.json,加入.gitignore
最佳实践¶
1. 保护敏感凭据
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./credentials/**)",
"Read(./.ssh/**)"
]
}
}
2. 前端项目配置
{
"permissions": {
"defaultMode": "acceptEdits",
"allow": [
"Bash(npm run dev)",
"Bash(npm run build)",
"Bash(npm run test:*)",
"Bash(npm run lint:*)"
]
}
}
3. CI/CD 自动化
Claude Code 2.1.285 起,claude -p / Agent SDK 在拉不到功能开关的会话里没有指定权限模式就默认是 auto。
用 ANTHROPIC_AUTH_TOKEN 经 QCode 连接时本来就拉不到功能开关(每次全新的 CI 容器同理),所以这就是你的 CI 的默认情况。
CI 里请显式指定模式,推荐 dontAsk + allow 白名单:只执行无需确认的操作和列出的工具,其余直接拒绝。
claude -p "运行测试并修复失败用例" \
--permission-mode dontAsk \
--allowedTools "Read,Edit,Bash(npm test)"
或写进项目配置:
{
"permissions": {
"defaultMode": "dontAsk",
"allow": ["Read", "Edit", "Bash(npm test)"]
}
}
⚠️ 注意:
bypassPermissions模式会跳过所有安全检查,只在完全隔离、受信任的环境(如一次性容器)中使用。
开始使用 QCode
一把 API Key 同时用于 Claude Code、Codex 等工具;按 token 计费,各模型单价见 qcode.cc/models