深色模式
Claude Code 权限模式
概述
Claude Code 的权限模式决定一次工具调用是直接执行、交给安全分类器、询问使用者,还是拒绝。它只负责审批策略;命令真正能访问哪些文件和网络,还要看 Bash sandbox、容器或 VM 等隔离边界。
截至 2026 年 8 月 19 日,CLI 中负责逐项审批的界面名称已经改为 Manual,但配置值仍是 default。CLI 也接受 manual 作为别名。其余五种模式是 acceptEdits、plan、auto、dontAsk 和 bypassPermissions。
六种模式
| 模式 | 无需询问即可执行 | 适用场景 |
|---|---|---|
default / manual | 读取操作 | 陌生仓库、敏感任务、逐项审查 |
acceptEdits | 读取、工作目录内的文件编辑、常见文件系统命令 | 日常编码,完成后统一审查 diff |
plan | 读取;满足条件时由 auto 分类器审批探索命令 | 先调研和评审方案,再修改代码 |
auto | 大多数操作,但会经过后台安全检查 | 长任务、减少权限提示 |
dontAsk | 预先允许的操作和只读命令 | CI、脚本、严格白名单环境 |
bypassPermissions | 几乎所有操作,包括受保护路径写入 | 已隔离的容器或 VM |
权限模式不是唯一判断条件。显式 deny 规则在所有模式中都有效,包括 bypassPermissions;显式 ask、要求人工交互的工具、跨会话消息保护和关键路径删除也不会因为使用 bypassPermissions 就自动放行。
审批关系
一次工具调用大致按下面的关系进入权限判断。图中省略了 hooks、组织级 Connector 策略等细节,但能说明模式和规则各自处在哪一层。
allow 规则是预先批准,不等于把工具限制在列表内。要把未列出的动作全部拒绝,应使用 dontAsk;要明确禁止某类操作,应写 deny。
模式区别
Manual 与 acceptEdits
Manual 的配置值是 default。它允许读取,编辑文件和多数命令则进入审批。acceptEdits 会进一步自动批准工作目录或 additionalDirectories 内的文件编辑,以及 mkdir、touch、rm、rmdir、mv、cp、sed 等常见文件系统命令。
这个放宽仍有边界:工作目录之外的路径、受保护路径、关键路径删除,以及其他非只读命令仍会询问。acceptEdits 适合已经确认目标、准备在完成后统一审查 diff 的任务。
plan 与 Manual
plan 会阻止源码编辑,让 Claude 先研究代码并提交方案。当前版本在 auto 可用且 useAutoModeDuringPlan 保持默认开启时,会把探索用 shell 命令交给分类器;否则,非只读命令仍按 Manual 流程询问。
计划获批后,Claude Code 会离开 plan 并进入所选的执行模式。复杂重构和陌生仓库排查适合从这里开始。
有一个高风险例外:如果会话启动时已经把 bypassPermissions 加入模式循环,plan 的编辑阻断也不再是硬边界。此时界面仍要求 Claude 只做计划,但它尝试的编辑或命令可以直接执行。
auto 与 bypassPermissions
auto 用独立分类器审查 shell、网络和其他敏感动作。分类器会结合当前请求、CLAUDE.md 和环境配置,阻止超出任务范围、向陌生基础设施发送数据、破坏既有资源或受可疑内容驱动的操作。它能减少提示,但不是安全保证。
bypassPermissions 会跳过常规权限提示和分类器,受保护路径也可以写入。显式 deny 仍然生效,显式 ask、人工交互工具、跨会话消息保护和关键路径删除仍有额外检查。它只适合没有重要凭据、宿主文件或开放网络的隔离环境。
dontAsk 与 bypassPermissions
这两个模式方向相反。dontAsk 把本来需要询问的动作直接拒绝,只运行预先允许的工具、只读命令和获 PreToolUse hook 批准的调用;bypassPermissions 则默认执行。
无人值守不等于必须完全放权。CI 中通常应选择 dontAsk 加精确白名单:
sh
claude -p "运行测试并解释失败原因" \
--permission-mode dontAsk \
--allowedTools "Bash(npm test)" "Read"路径保护
受保护路径
受保护路径用于避免误改仓库元数据、开发工具和 Claude Code 自身配置。常见目录包括 .git、.config/git、.vscode、.idea、.husky、.cargo、.devcontainer、.yarn、.mvn 和 .claude;常见文件包括 shell 启动文件、包管理器配置、.mcp.json 和 .claude.json。
.claude/worktrees 是 .claude 下的例外,因为 Claude Code 会在那里管理工作树。旧版本曾把 .claude/commands、.claude/agents 和 .claude/skills 也排除在保护之外,当前官方列表已经不再这样定义。
不同模式处理受保护路径的方式如下:
| 模式 | 受保护路径写入 |
|---|---|
default、acceptEdits | 询问 |
plan | 分类、询问,或在已启用 bypass 时放行 |
auto | 交给分类器 |
dontAsk | 拒绝 |
bypassPermissions | 允许 |
关键路径删除
关键路径是另一套保护,专门检查 rm 和 rmdir。文件系统根目录、根目录的直接子目录、用户主目录、当前工作目录及其父目录等都在范围内。
即使处于 bypassPermissions,删除关键路径也会询问;dontAsk 会拒绝,auto 会交给分类器。它与“受保护路径”不是同一概念:前者防止灾难性删除,后者保护配置和仓库状态。
切换方式
启动时可以直接指定模式:
sh
claude --permission-mode plan
claude --permission-mode acceptEdits
claude --permission-mode auto
claude --permission-mode dontAsk
claude --permission-mode bypassPermissions--enable-auto-mode 已在 v2.1.111 移除。现在应使用 --permission-mode auto,或在可用的会话里通过 Shift+Tab 切换。
CLI 的基础循环是 default → acceptEdits → plan。满足账号和模型要求时,auto 会加入循环;dontAsk 永远不会加入。bypassPermissions 只有在启动时通过 --permission-mode bypassPermissions、--dangerously-skip-permissions 或 --allow-dangerously-skip-permissions 等方式启用后才会出现。
默认模式写在 settings.json:
json
{
"permissions": {
"defaultMode": "acceptEdits"
}
}auto 有一条例外:从 v2.1.142 起,项目级 .claude/settings.json 和本地级 .claude/settings.local.json 中的 defaultMode: "auto" 不会生效。要把 auto 设为 CLI 默认模式,应写入用户级 ~/.claude/settings.json 或由管理员写入 managed settings。
auto 的现状
截至 2026 年 8 月 19 日,auto 已支持所有计划,但仍要求受支持的模型。Anthropic API 和 Claude Platform on AWS 支持 Claude Opus 4.6 及以上、Sonnet 4.6 及以上和 Fable 5;Bedrock、Google Cloud Agent Platform、Microsoft Foundry 与已登录的 Claude apps gateway 要求 Sonnet 5、Opus 4.7 及以上或 Fable 5。
在较新的 CLI 版本中,Pro、Max 和 Team 的内置启动模式已经是 auto,不再一律从 Manual 开始。显式 CLI 参数和 permissions.defaultMode 仍优先于内置默认值,组织管理员也可以通过 permissions.disableAutoMode 关闭它。遇到模式不可用时,以当前版本的 /doctor 和状态提示为准。
