权限配置

配置 Claude Code 的权限模式,控制哪些操作需要人工确认

更新于 2026-10-08

需要 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

企业团队版 →