Windows 10/11 · DeepSeek V4 Pro / Anthropic 兼容 API · CC-Switch ≥ v3.14.0 · Claude Code CLI ≥ v2.0 · 2026-04-30
一、这篇教程解决什么问题·国内如何能够使用Claude code Cli的Auto模式
一句话定位 :在《梦开始的地方:Claude Code 在 Windows & DeepseekV4Pro上的国内环境安装与调试指南 - 掘金》已完成基础环境配置的前提下,
1.Claude Code 每执行一步都弹出确认框,开发效率被权限提示打断到崩溃? 本文从机制层面拆解 Claude Code 的六种权限模式(Default / Plan / AcceptEdits / Auto / DontAsk / Bypass),讲清每种模式的行为边界、安全分类器原理和三层配置优先级。
2.重点解决国内 DeepSeek 用户的核心痛点:通过 CC-Switch 本地路由,在非 Anthropic 官方模型上也能激活 Auto 模式,让 Claude Code 从"步步请示"变成"自主执行"。
3.** 附 6 个真实 Debug 场景的五段式排错**,覆盖 VSCode 扩展与 CLI 行为差异、settings.json 配置冲突、企业策略覆盖等常见问题。深入理解六种权限模式的工作原理、差异和适用场景,掌握 settings.json 精细控制与 CC-Switch 可视化管理两种配置路径,让使用 DeepSeek V4 Pro 等第三方模型的用户也能开启 Auto 模式。
为什么我的Claude Code Cli像一个智障?什么都要问我!DeepSeek 用户必看:Claude Code Auto 模式怎么开?CC-Switch 一键搞定权限配置
阅读前提(可逐条验证):
- 已完成《Node.js + Claude Code 国内环境安装教程》的全部步骤,
claude命令可正常启动 C:\Users\<用户名>\.claude\settings.json已配置且 API 连通(/model显示deepseek-v4-pro)- 已安装 CC-Switch 桌面应用(系统托盘可见)
powershell
claude --version # 应输出 v2.0.xx 或更高
读完能得到什么:
- 六种模式的精确行为边界、CLI 参数、配置字段名(不是 "ask mode" 之类不存在的叫法)
- Auto 模式的三层分类器架构原理------知道它"为什么安全"而非只知道"怎么开"
- [通过 CC-Switch 本地路由在 DeepSeek V4 Pro 上激活 Auto 模式的完整步骤](#通过 CC-Switch 本地路由在 DeepSeek V4 Pro 上激活 Auto 模式的完整步骤 "#local-routing-auto-mode")
- 六种真实 Debug 场景的五段式排错(含 VSCode 扩展与 CLI 的行为差异)
- 企业管理员禁用特定模式的托管策略机制
二、前置知识速览
本教程假定以下文件已经存在且正确配置(详见《梦开始的地方:Claude Code 在 Windows & DeepseekV4Pro上的国内环境安装与调试指南 - 掘金》第 3.6 节):
文件一 :C:\Users\<用户名>\.claude.json
json
{
"hasCompletedOnboarding": true
}
文件二 :C:\Users\<用户名>\.claude\settings.json(基础配置,未涉及权限模式)
json
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
"ANTHROPIC_AUTH_TOKEN": "sk-你的DeepSeek-API-Key",
"ANTHROPIC_MODEL": "deepseek-v4-pro",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-v4-pro",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek-v4-flash",
"ANTHROPIC_SMALL_FAST_MODEL": "deepseek-v4-flash",
"CLAUDE_CODE_EFFORT_LEVEL": "max",
"API_TIMEOUT_MS": "3000000"
},
"model": "deepseek-v4-pro"
}
本文后续所有权限配置都是在这个基础配置文件之上追加
"permissions"块,不要覆盖已有的"env"和"model"字段。
三、配置文件层级(settings.json 优先级体系)
在开始配置权限之前,先理解配置文件的多层覆盖关系。Claude Code 加载配置时按以下顺序,后者覆盖前者:
| 层级 | 文件路径 (Windows) | 用途 | 谁控制 |
|---|---|---|---|
| ① 用户全局 | C:\Users\<用户名>\.claude\settings.json |
所有项目共享的默认值 | 用户 |
| ② 项目共享 | <项目根>\.claude\settings.json |
团队共享,可提交 Git | 项目 |
| ③ 本地覆盖 | <项目根>\.claude\settings.local.json |
个人偏好,应加入 .gitignore |
用户 |
| ④ CLI 参数 | 启动时传入 | 临时覆盖,仅当前会话 | 用户 |
| ⑤ 企业托管 | C:\Program Files\ClaudeCode\managed-settings.json |
IT 管理员下发,不可被覆盖 | 管理员 |
⑤ 仅在企业部署场景中存在。个人用户只有 ①~④ 四个层级。
macOS 托管策略路径:
/Library/Application Support/ClaudeCode/managed-settings.jsonLinux/WSL 托管策略路径:
/etc/claude-code/managed-settings.json
四、六种权限模式深度解析
4.1 模式总览表
| 模式 | CLI 启动方式 | defaultMode 值 |
读文件 | 写文件 | 执行命令 | 安全护栏 |
|---|---|---|---|---|---|---|
| Default | claude(默认) |
"default" |
自动 | 每次提示 | 每次提示 | 完整 |
| Accept Edits | --permission-mode acceptEdits |
"acceptEdits" |
自动 | 自动* | 每次提示 | 完整 |
| Plan | --permission-mode plan |
"plan" |
自动 | 禁止 | 禁止 | 只读保证 |
| Dont Ask | --permission-mode dontAsk |
"dontAsk" |
看规则 | 看规则 | 看规则** | 仅预批准 |
| Auto | --permission-mode auto --enable-auto-mode |
"auto" |
自动 | 项目内自动 | AI 分类器 | Sonnet 4.6 分类器 |
| Bypass | --dangerously-skip-permissions |
"bypassPermissions" |
自动 | 自动 | 自动 | 零护栏 |
* Accept Edits 模式下,对受保护目录(
.git、.claude、.vscode、.idea、.husky)的写入仍会提示确认。** Dont Ask 模式下,不在
allow列表中的命令被静默拒绝(不提示,直接跳过)。这是它与 Default 模式的关键区别。
bypassPermissions对受保护目录的写入也仍会提示确认(取决于版本)。
4.2 模式逐一说明
模式 1:Default(默认模式)
精确行为 :读取类操作(Read、Glob、Grep)自动通过;写入(Edit、Write、MultiEdit)和执行(Bash)每次都弹出确认提示。首次使用某工具时额外显示工具说明。
适用场景:新手、不熟悉的代码库、安全敏感项目。
启动:
powershell
claude
# 状态栏显示 "default"
settings.json 显式配置(不写也是这个):
json
{
"permissions": {
"defaultMode": "default"
}
}
模式 2:Accept Edits(接受编辑模式)
精确行为 :文件读取和项目内文件编辑自动批准;受保护目录(.git、.claude、.vscode、.idea、.husky)的写入仍需确认;所有 Bash 命令仍每次提示。
适用场景:日常开发中最常用的模式。编辑代码无需频繁确认,但危险命令仍被拦截。Anthropic 推荐的日常开发默认模式。
启动:
powershell
claude --permission-mode acceptEdits
settings.json 配置:
json
{
"permissions": {
"defaultMode": "acceptEdits"
}
}
Accept Edits 是日常开发的"甜点区"------编辑不打断思路,但
rm -rf、git push --force等命令仍然需要你手动确认。
模式 3:Plan(计划模式)
精确行为 :完全只读 。Claude 可以读取和分析代码,但不能做任何修改或执行任何命令。Edit、Write、Bash 等所有写入/执行类工具全部禁用。
适用场景:代码审查、架构探索、评估陌生代码库、审阅 PR。
启动:
powershell
claude --permission-mode plan
或在交互会话中输入斜杠命令:
bash
/plan
settings.json 配置:
json
{
"permissions": {
"defaultMode": "plan"
}
}
模式 4:Dont Ask(不询问模式)
精确行为 :只有 permissions.allow 白名单中的操作会被静默执行。不在白名单中的操作被直接拒绝,不弹出提示。 这与很多人以为的"全自动通过"完全不同------它是一个严格的白名单执行模式。
适用场景:受限执行环境、CI/CD 管道、给新人用的安全沙箱。适合"只让 Claude 做特定几件事"的场景。
启动:
powershell
claude --permission-mode dontAsk
settings.json 配置:
json
{
"permissions": {
"defaultMode": "dontAsk",
"allow": [
"Read",
"Glob",
"Grep",
"Edit(./src/**)",
"Write(./src/**)",
"Bash(git status)",
"Bash(git diff)",
"Bash(npm test)",
"Bash(npm run build)"
],
"deny": [
"Bash(rm *)",
"Bash(curl *)",
"Bash(sudo *)"
]
}
}
关键区别 :
Dont Ask != Bypass。Dont Ask 下未批准的操作会失败(不会执行),Bypass 下所有操作都会执行。
模式 5:Auto(自动模式)★ 核心章节
Auto 模式是 Anthropic 于 2026 年 3 月 推出的新权限模式,目标是在"手动逐条审批(Default)"和"完全跳过权限(Bypass)"之间提供安全中间档。
技术架构:三层决策 + 两阶段分类器
三层过滤管道(Tier 1 → Tier 2 → Tier 3):
bash
操作请求
│
├─ Tier 1:固定白名单
│ 包含:Read、Glob、Grep、Todo、Plan 模式切换
│ → 直接通过,零延迟
│
├─ Tier 2:项目内编辑
│ 包含:当前工作目录内的 Write、Edit(可被 Git 审查)
│ → 直接通过,不经分类器
│
└─ Tier 3:Transcript Classifier(AI 分类器)
包含:Shell 命令、网络请求、外部工具、子 Agent、项目目录外操作
│
├─ Stage 1:快速单 token 过滤(yes/no)
│ 指令偏向"宁可误拦",多数操作在此判定为安全
│
└─ Stage 2:Chain-of-thought 推理
仅 Stage 1 标记为可疑时触发
完整推理链重新评估,减少误判
关键设计:Reasoning-Blind(推理盲区)
分类器只能看到两样东西:
- 用户的原始消息(user messages)
- Agent 产生的工具调用(tool calls)
分类器看不到:
- Claude 自己的文本输出/推理过程
- 工具执行结果(tool outputs)
- 文件内容
为什么这样设计? 如果分类器能读到 agent 的推理过程,恶意注入的内容可能通过 agent 的"说服性推理"操纵分类器放行危险操作。剥离推理层后,分类器纯粹基于"用户要求了什么 vs 即将执行什么"来判断,形成结构性防御。
分类器判断三要素(自然语言规则,非正则匹配)
| 判断维度 | 分类器问的问题 |
|---|---|
| 任务范围偏离 | 这个操作是否超出了用户实际请求的范围? |
| 目标可信度 | 是否在尝试操作分类器无法验证为可信的基础设施? |
| 意图转变 | 是否有迹象表明 Claude 被它读取的内容影响(prompt injection)? |
默认拦截行为
分类器内置 20+ 条自然语言规则,分四大类:
| 类别 | 拦截示例 |
|---|---|
| 破坏/泄露 | force push 覆盖历史、批量删除云存储、向外部发送内部数据 |
| 降低安全态势 | 禁用日志、安装持久化后门(SSH key / cronjob)、修改 agent 自身权限配置 |
| 跨越信任边界 | 运行从外部仓库克隆的代码、扫描凭证存储、向用户未指定的服务发送数据 |
| 绕过审查 | 直接推送到 main、执行生产部署、修改共享基础设施 |
默认放行:项目内文件操作、只读 HTTP 请求、lockfile 中已声明的依赖安装、读取 .env 并将凭证仅发送到对应 API。
回退机制
| 触发条件 | 行为 |
|---|---|
| 分类器连续拦截 3 次 | 退回人工确认模式 |
| 同一会话内总计拦截 20 次 | 退回人工确认模式 |
非交互模式(claude -p)触发回退 |
会话直接中止 |
手动批准一个操作后,计数器重置。
性能数据(Anthropic 官方公开)
| 指标 | 数值 |
|---|---|
| 误拦合法操作(False Positive) | 0.4% |
| 漏拦过度操作(False Negative) | 17%(Anthropic 称"诚实的数字") |
| 对比:人类审批者疲劳不看就批 | 93% |
0.4% 的误拦率意味着约每 250 次操作遇到一次不必要的拦截;17% 的漏拦率意味着仍有约 1/6 的过度操作未被拦截------Auto 模式是安全辅助,不是安全保证。
启动方式
powershell
# 首次启用(需要 --enable-auto-mode,一次性注册分类器)
claude --enable-auto-mode
# 此后可以直接指定模式启动
claude --permission-mode auto
# 交互会话中按 Shift+Tab 循环到 auto
settings.json 持久化:
json
{
"permissions": {
"defaultMode": "auto"
}
}
限制:Auto 模式仅支持 Anthropic 官方 Claude 模型(Sonnet 4.6、Opus 4.6)。使用 DeepSeek V4 Pro 等第三方模型时,需要通过 CC-Switch 的本地路由功能启用(见第六章)。
模式 6:Bypass Permissions(绕过权限)⚠️
精确行为 :所有权限检查完全关闭。每个工具调用都自动批准,不经过任何安全检查。这是最高权限模式。
适用场景:CI/CD 流水线(无人值守)、Docker 沙箱容器(无生产环境访问)、完全信任的自动化任务。
启动:
powershell
# 方式一
claude --dangerously-skip-permissions
# 方式二
claude --permission-mode bypassPermissions
settings.json 配置:
json
{
"permissions": {
"defaultMode": "bypassPermissions"
}
}
⚠️ 警告:
- Claude 可以删除分支、修改任意文件、执行任意命令
- Anthropic 官方建议仅在隔离的沙箱环境中使用
- 管理员可通过
"permissions.disableBypassPermissionsMode": "disable"在企业托管策略中全局禁用- 不要在连接生产环境或包含敏感数据的机器上使用
4.3 模式切换方式汇总
| 切换方式 | 操作 | 持久性 |
|---|---|---|
| 交互会话中循环切换 | Shift+Tab(Windows 上也可 Alt+M) |
仅当前会话 |
| 斜杠命令 | /plan 进入计划模式 |
仅当前会话 |
| CLI 启动参数 | --permission-mode <模式名> |
仅当次启动 |
settings.json 持久化 |
"permissions.defaultMode": "<模式名>" |
永久 |
| CC-Switch GUI 下拉菜单 | 配置Json | 永久(写入 settings.json) |

五、权限规则精细控制(allow / ask / deny)
5.1 优先级
deny > ask > allow
一个操作如果同时匹配 allow 和 deny 规则,deny 生效。规则顺序无影响------只按类型优先级判断。
5.2 规则语法
| 规则类型 | 语法 | 示例 |
|---|---|---|
| 工具级匹配 | 工具名 |
Read 匹配所有读操作 |
| 精确参数匹配 | 工具名(参数) |
Bash(git status) |
| 通配符 | * 匹配任意字符串 |
Bash(git *) 匹配所有 git 命令 |
| 路径通配符 | ** 匹配任意层级 |
Edit(./src/**) |
| 绝对路径 | //C:/Users/... |
Read(//C:/Users/<用户名>/.ssh/**) |
| Home 目录 | ~/** |
Read(~/.ssh/**) |
| 相对路径 | 相对当前工作目录 | Read(./.env) |
5.3 完整配置示例
文件:C:\Users\<用户名>\.claude\settings.json(在已有的 "env" 和 "model" 之外追加 "permissions")
json
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
"ANTHROPIC_AUTH_TOKEN": "sk-你的DeepSeek-API-Key",
"ANTHROPIC_MODEL": "deepseek-v4-pro",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-v4-pro",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek-v4-flash",
"ANTHROPIC_SMALL_FAST_MODEL": "deepseek-v4-flash",
"CLAUDE_CODE_EFFORT_LEVEL": "max",
"API_TIMEOUT_MS": "3000000"
},
"model": "deepseek-v4-pro",
"permissions": {
"defaultMode": "acceptEdits",
"allow": [
"Read",
"Glob",
"Grep",
"Edit(./src/**)",
"Write(./src/**)",
"MultiEdit(./src/**)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(git add *)",
"Bash(git commit *)",
"Bash(npm test)",
"Bash(npm run build)",
"Bash(npm run lint)",
"Bash(node --version)",
"Bash(ls *)",
"Bash(cat *)"
],
"ask": [
"Bash(git push *)",
"Bash(npm publish *)",
"Bash(docker *)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(sudo *)",
"Bash(curl *)",
"Bash(wget *)",
"Bash(shutdown *)",
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Read(~/.ssh/**)",
"Edit(./.env*)",
"WebFetch"
]
}
}
六、CC-Switch 集成:GUI 管理权限 + 本地路由解锁 Auto 模式
6.1 CC-Switch 与手动配置的关系
CC-Switch 本质上是一个图形化的 settings.json 编辑器 。它修改的也是 C:\Users\<用户名>\.claude\settings.json。所有数据存储在本地 SQLite 数据库,不上传。
两种方式的关系:
- 如果你已经手动编辑了
settings.json,CC-Switch 启动后自动识别已有配置 - CC-Switch 的 Provider 配置会覆盖
env相关字段 - 权限相关字段(
permissions)由对应设置面板控制 - 如果你两边都做了修改,以最后写入的为准
6.2 在 CC-Switch GUI 中设置权限模式
- 打开 CC-Switch 桌面应用
- 选择一个实例,编辑它
- 进入 Claude Code 配置区(配置 JSON)
- 手动加入配置:
Default/Accept Edits/Plan/Dont Ask/Auto/Bypass Permissions
6.3 核心功能:本地路由(Local Routing)解锁 Auto 模式 ★
问题
Auto 模式的 Sonnet 4.6 分类器是 Anthropic 服务端的组件。当 ANTHROPIC_BASE_URL 指向 DeepSeek 等第三方端点时,服务端无法执行分类逻辑,Auto 模式被自动降级为 Accept Edits。
CC-Switch 的解决方案
CC-Switch 的本地路由 功能(v3.14.0 前称"本地代理接管")在本地启动一个 HTTP 代理,对请求/响应做重写,让 Claude Code 客户端以为自己在跟真正的 Claude 模型通信,从而启用 Auto 模式。分类器判断仍在本地客户端侧完成。
原理
css
Claude Code 客户端
│
├─ 权限模式检查:"我在跟 Claude 模型对话吗?"
│ 如果 ANTHROPIC_BASE_URL 指向第三方 → 降级
│ 如果指向本地代理 → 通过检查,启用 Auto
│
└─ 请求发出后:
Claude Code → 本地代理 (127.0.0.1:15721) → DeepSeek API
本地代理对请求头做重写,让客户端认为在跟 Claude 通信
关键理解:本地路由不是"欺骗分类器"------它只是让客户端通过模型检查。Auto 模式的分类判断在客户端本地完成,不需要 Anthropic 服务端参与。
操作步骤
步骤 1 --- 打开 CC-Switch 设置:
- CC-Switch 主面板左上角,点击 齿轮图标(设置)
- 点击 路由
- 选择本地路由
步骤 2 --- 启用应用接管:
- 在路由面板中,找到 路由总开关
- 开启 Claude 开关
- CC-Switch 自动修改
settings.json,将 API 端点指向本地代理 - 确认 Local Routing(本地路由) 开关为开启状态

步骤 3 --- 启动 Claude Code:
powershell
claude --permission-mode auto --enable-auto-mode # Auto(首次一定要用这个命令)
后续可以使用CC switch启动

步骤 4 --- 验证:
查看状态栏,应显示 auto。 
或者在 Claude Code 内执行一个 Tier 3 操作(如 WebFetch 抓取网页)------如果能无需确认直接执行,说明 Auto 模式已生效。
⚠️ 重要限制(v3.14.0+) :CC-Switch 在本地路由激活时会自动阻止切换到 Anthropic 官方 Provider,以防止请求经过重写后到达 Anthropic 服务器导致账号封禁风险。这是预期行为,不是 Bug。需要使用官方 Provider 时,先关闭本地路由再切换。
6.4 代理参数配置
| 参数 | 默认值 | 说明 |
|---|---|---|
| 监听地址 | 127.0.0.1 |
仅本地可访问,安全性好 |
| 监听端口 | 15721 |
可修改(端口冲突时) |
| 最大重试 | 3 |
单次请求失败重试次数 |
| 请求超时 | 120 秒 |
大文件操作时建议保持 |
七、Debug #1 --- Auto 模式无法启用(状态栏不显示 Auto)
报错现象
启动命令 claude --permission-mode auto 后,状态栏显示的仍是 acceptEdits 或 default。或者直接报错:
vbnet
Auto mode is not available with the current model provider.
Auto mode requires Anthropic's official Claude models.
根因
Claude Code 客户端在启动时检查当前 API 端点是否是 Anthropic 官方服务。当 ANTHROPIC_BASE_URL 指向 https://api.deepseek.com/anthropic 等第三方端点时,客户端判定"非 Claude 模型",拒绝启用 Auto 模式。CC-Switch 本地路由通过将 ANTHROPIC_BASE_URL 重写为 http://127.0.0.1:15721 绕过此检查------但如果代理未启动或接管未生效,检查不通过。
检查链条:
--permission-mode auto是否传入了?- CC-Switch Proxy 是否显示绿色运行状态?
- App Takeover → Claude 开关是否开启?
- 本地路由开关是否开启?
settings.json中的ANTHROPIC_BASE_URL是否已被 CC-Switch 修改为http://127.0.0.1:15721?
一览对比表
| 对比维度 | 修复前 | 修复后 |
|---|---|---|
ANTHROPIC_BASE_URL |
https://api.deepseek.com/anthropic |
http://127.0.0.1:15721(CC-Switch 自动改) |
| CC-Switch Proxy 状态 | 未启动 / 灰色 | 绿色 Running |
| App Takeover - Claude | 关闭 | 开启 |
| 权限模式 | 降级为 acceptEdits | Auto 正常 |
代码修复
如果 CC-Switch 代理已启动但 settings.json 没有被自动修改,手动确认:
文件:C:\Users\<用户名>\.claude\settings.json
json
{
"env": {
"ANTHROPIC_BASE_URL": "http://127.0.0.1:15721",
...其他字段保持不变...
}
}
注意这是调试手段。正常情况下 CC-Switch 会自动管理这个值------启动代理时改,停止代理时还原。手动改了之后如果停止代理,CC-Switch 可能无法正确还原。
验证
powershell
# 确认代理端口在监听
Test-NetConnection -ComputerName 127.0.0.1 -Port 15721
# 预期:TcpTestSucceeded : True
# 启动后检查状态栏
claude --permission-mode auto
# 状态栏应显示 [auto]
八、Debug #2 --- 本地路由开启后无法切换到 Anthropic 官方 Provider
报错现象
在 CC-Switch 中尝试切换到 Anthropic 官方 Provider 时操作被阻止,界面提示无法切换。
根因
CC-Switch v3.14.0 引入的保护机制:本地路由修改了请求特征(headers 重写),如果这些修改后的请求到达 Anthropic 官方服务器,可能被识别为异常流量,触发安全风控甚至账号封禁。因此 CC-Switch 在本地路由激活时主动阻止切换到官方 Provider,而非技术上做不到。
一览对比表
| 对比维度 | 需要 Auto 模式(第三方模型) | 需要 Anthropic 官方 |
|---|---|---|
| 本地路由 | 开启 | 必须关闭 |
| App Takeover - Claude | 开启 | 必须关闭 |
| Provider 可选项 | 仅第三方 Provider | 任意 |
操作步骤
如果要切回 Anthropic 官方:
- CC-Switch Proxy 面板 → 停止代理
- 关闭 App Takeover → Claude 开关
- 现在可以切换到 Anthropic 官方 Provider
如果只是要用第三方模型的 Auto 模式: 无需任何操作------这是 CC-Switch 的保护行为,继续使用当前配置即可。
九、Debug #3 --- Bypass 或 Auto 模式被管理员禁用
报错日志
vbnet
Error: bypassPermissions mode has been disabled by your administrator.
或启动时 --permission-mode auto 被拒绝,Auto 选项从 Shift+Tab 循环中消失。
根因
企业 IT 管理员通过 C:\Program Files\ClaudeCode\managed-settings.json 下发了禁用策略。该文件的优先级高于所有用户级和项目级配置,无法被覆盖。相关配置字段有两个:
| 配置 | 作用 |
|---|---|
"permissions.disableBypassPermissionsMode": "disable" |
禁用 Bypass,从 Shift+Tab 中移除 |
"disableAutoMode": "disable" |
禁用 Auto,从 Shift+Tab 中移除 |
一览对比表
| 对比维度 | 用户配置 | 企业托管策略 |
|---|---|---|
| 文件位置 | .claude/settings.json / .claude/settings.local.json |
C:\Program Files\ClaudeCode\managed-settings.json |
| 可修改 | 是 | 否(需管理员权限) |
| 优先级 | 低于托管策略 | 最高 |
替代方案
如果 Bypass 被禁用但需要自动化,用 Accept Edits + 细粒度 allow 列表替代:
json
{
"permissions": {
"defaultMode": "acceptEdits",
"allow": [
"Read", "Glob", "Grep",
"Edit(./src/**)",
"Write(./src/**)",
"Bash(git status)",
"Bash(git diff)",
"Bash(npm test)",
"Bash(npm run build)"
]
}
}
验证
powershell
# 检查是否存在企业托管策略
Test-Path "C:\Program Files\ClaudeCode\managed-settings.json"
# 如果返回 True,用 Get-Content 查看内容确认
十、Debug #4 --- Dont Ask 模式下操作被静默拒绝
报错现象
Dont Ask 模式下,Claude 试图执行某个不在 allow 列表中的操作时,操作被跳过但没有提示。Claude 可能回复"I cannot perform that operation"或直接转入下一个操作,没有明确的权限错误信息。
根因
Dont Ask 模式的设计哲学是"不询问"------对于不在白名单中的操作,它不会弹出确认提示(那等于"询问"),而是直接拒绝。这与 Default 模式的行为截然不同(Default 会弹出确认提示让你决定)。很多用户误以为 Dont Ask = Bypass(全自动通过),实际上它们是相反的------Dont Ask 是严格白名单模式,Bypass 是零护栏模式。
一览对比表
| 对比维度 | Dont Ask(实际行为) | Dont Ask(常见误解) | Default |
|---|---|---|---|
| allow 列表中的操作 | 静默执行 | 静默执行 | 首次提示 |
| allow 列表外的操作 | 静默拒绝 | 自动执行(误解) | 弹出提示 |
| 提示频率 | 零(不询问 = 不提示) | --- | 每次未批准操作 |
代码修复
如果某个操作被静默拒绝但你希望它自动执行,将其加入 allow 列表:
json
{
"permissions": {
"allow": [
"Bash(git status)",
"Bash(git diff)",
"Bash(git log)"
]
}
}
规则按
deny > ask > allow优先级判断,确保该操作不在deny列表中。
如果希望被拒绝时有提示而非静默跳过,不应该用 Dont Ask------用 Default 或 Accept Edits 模式。
验证
在 Claude Code 中执行一个已知在 allow 列表外的命令:
markdown
> Run git branch
Dont Ask 下应直接拒绝执行(无提示);Default 下应弹出确认提示。
十一、Debug #5 --- Shift+Tab 切换模式无反应(Windows)
报错现象
在 Claude Code 交互会话中按 Shift+Tab,当前模式没有切换。
根因
Windows 上部分键盘布局/终端模拟器中 Shift+Tab 被系统或终端占用(例如 Windows Terminal 中用于切换选项卡)。Claude Code 提供了备用快捷键 Alt+M。
一览对比表
| 对比维度 | Shift+Tab | Alt+M |
|---|---|---|
| 默认用途 | Claude Code 模式切换 | Claude Code 模式切换(备用) |
| 冲突场景 | Windows Terminal 选项卡切换、某些输入法 | 较少冲突 |
| 推荐 | 日常使用 | 冲突时备用 |
操作
直接按 Alt+M 替代 Shift+Tab,循环顺序:
scss
default → acceptEdits → plan → auto(如已启用) → bypassPermissions(如已启用) → default
如果 Auto 或 Bypass 被企业策略禁用,它们会从循环中跳过。
验证
按 Alt+M 后观察状态栏模式标识是否变化。
十二、Debug #6 --- VSCode 扩展中 bypassPermissions 不生效
报错现象
在 VSCode 中使用 Claude Code 扩展,settings.json 配置了 "defaultMode": "bypassPermissions" 或启动时传了 --dangerously-skip-permissions,但命令执行时仍然弹出确认提示。
根因
VSCode 扩展和 CLI 有两套独立的权限控制通道 。CLI 读取 settings.json 中的 permissions 配置;VSCode 扩展有自己的扩展设置项,需要单独配置:
| 设置项 | 作用 |
|---|---|
claudeCode.allowDangerouslySkipPermissions |
允许扩展使用 bypass 模式(需设为 true) |
claudeCode.initialPermissionMode |
扩展的初始权限模式(设为 "bypassPermissions") |
只配了 settings.json 而没配 VSCode 扩展设置,bypass 不会在扩展中生效。这是两个独立配置层,不是 Bug------但文档中不够显眼,导致社区大量反馈(GitHub Issue #12604、#15921)。
一览对比表
| 对比维度 | CLI | VSCode 扩展 |
|---|---|---|
| 权限配置来源 | .claude/settings.json |
VSCode 扩展设置 (settings.json) |
| bypass 开关 | --dangerously-skip-permissions |
claudeCode.allowDangerouslySkipPermissions: true |
| 配置写法 | JSON "permissions.defaultMode" |
VSCode UI 或 JSON 设置 |
代码修复
VSCode settings.json(Code → Preferences → Settings → 搜索 "Claude Code"):
json
{
"claudeCode.allowDangerouslySkipPermissions": true,
"claudeCode.initialPermissionMode": "bypassPermissions"
}
验证
在 VSCode 中使用 Claude Code 执行一个命令(如 git status),不应再弹出确认提示。
十三、日常维护
13.1 模式切换速查
powershell
# 临时启动指定模式
claude # Default
claude --permission-mode acceptEdits # Accept Edits
claude --permission-mode plan # Plan(只读)
claude --permission-mode dontAsk # Dont Ask
claude --permission-mode auto --enable-auto-mode # Auto(首次)
claude --permission-mode auto # Auto(后续)
claude --dangerously-skip-permissions # Bypass
# 交互会话中:Alt+M 或 Shift+Tab 循环切换
# 斜杠命令:/plan 进入计划模式
13.2 更新组件
powershell
# Claude Code
npm update -g @anthropic-ai/claude-code --registry=https://registry.npmmirror.com
# CC-Switch
# 应用内自动更新提示,或从 https://github.com/farion1231/cc-switch/releases 下载
# Node.js
nvm install 22
nvm use 22
13.3 日志位置
| 日志类型 | 路径 | 关键搜索词 |
|---|---|---|
| Claude Code 权限日志 | C:\Users\<用户名>\.claude\logs\ |
permission, auto mode, classifier |
| CC-Switch 代理日志 | C:\Users\<用户名>\AppData\Roaming\cc-switch\logs\ |
proxy, routing, error |
powershell
# Claude Code 权限相关日志
findstr /i "permission" C:\Users\%USERNAME%\.claude\logs\*.log
# CC-Switch 代理相关日志
findstr /i "proxy" C:\Users\%USERNAME%\AppData\Roaming\cc-switch\logs\*.log
13.4 已知安全漏洞提醒
| CVE / 问题 | 严重度 | 影响版本 | 修复版本 |
|---|---|---|---|
| GHSA-qxfv-fcpc-w36x(命令解析绕过确认提示) | HIGH (CVSS 8.7) | < v1.0.105 | v1.0.105+ |
| backslash-escaped flag 权限绕过 | HIGH | < v2.1.98 | v2.1.98+ |
| Compound Bash 命令绕过强制权限提示 | MEDIUM | < v2.1.98 | v2.1.98+ |
定期
npm update -g @anthropic-ai/claude-code以确保安全补丁到位。
十四、速查卡
14.1 文件路径汇总
| 文件 | 绝对路径 |
|---|---|
| 用户全局设置 | C:\Users\<用户名>\.claude\settings.json |
| 登录跳过标记 | C:\Users\<用户名>\.claude.json |
| 项目共享设置 | <项目根>\.claude\settings.json |
| 本地个人覆盖 | <项目根>\.claude\settings.local.json |
| 企业托管策略 (Windows) | C:\Program Files\ClaudeCode\managed-settings.json |
| 企业托管策略 (macOS) | /Library/Application Support/ClaudeCode/managed-settings.json |
| Claude Code 日志 | C:\Users\<用户名>\.claude\logs\ |
| CC-Switch 安装目录 | C:\Program Files\CC-Switch\ |
| CC-Switch 数据目录 | C:\Users\<用户名>\AppData\Roaming\CC-Switch\ |
| CC-Switch 日志 | C:\Users\<用户名>\AppData\Roaming\cc-switch\logs\ |
14.2 关键配置字段速查
| 配置字段 | 可选值 / 示例 | 说明 |
|---|---|---|
permissions.defaultMode |
"default" / "acceptEdits" / "plan" / "dontAsk" / "auto" / "bypassPermissions" |
默认权限模式 |
permissions.allow |
["Read", "Bash(git *)"] |
自动批准的操作白名单 |
permissions.ask |
["Bash(git push *)"] |
始终提示确认的操作列表 |
permissions.deny |
["Bash(rm *)", "Read(./.env*)"] |
始终拒绝的操作黑名单 |
permissions.disableBypassPermissionsMode |
"allow" / "disable" |
企业管理员禁用 bypass |
disableAutoMode |
"allow" / "disable" |
企业管理员禁用 auto |
allowManagedPermissionRulesOnly |
true / false |
仅允许托管层定义的权限规则 |
14.3 常见报错 → 解决方案映射
| 报错特征 | 解决方案 | 详见 |
|---|---|---|
| Auto 模式不生效 / 状态栏显示降级 | CC-Switch 启动代理 + 开启本地路由 + App Takeover | Debug #1 |
| 本地路由开启后无法切 Anthropic 官方 | v3.14.0 保护机制,先关本地路由再切换 | Debug #2 |
bypassPermissions mode has been disabled |
管理员策略限制,改用 Accept Edits + allow 白名单 | Debug #3 |
| Dont Ask 下操作静默不执行 | 需加入 permissions.allow------Dont Ask ≠ Bypass |
Debug #4 |
| Shift+Tab 切换没反应 (Windows) | 改用 Alt+M |
Debug #5 |
| VSCode 中 Bypass 不生效 | 配 VSCode 扩展专属设置 claudeCode.allowDangerouslySkipPermissions |
Debug #6 |
Permission denied: Bash(...) |
检查 deny 列表是否拦截,deny 优先级高于 allow |
第五章 |
| CC-Switch 代理端口 15721 被占用 | Proxy 设置中改端口,或关掉占用端口的程序 | 第六章 |
14.4 模式选择决策树
scss
需要执行 Shell 命令吗?
├── 不需要(只看代码/分析/审查)
│ └── Plan 模式(只读,零风险)
│
└── 需要
├── 是否完全信任当前环境(CI/CD/隔离沙箱)?
│ └── 是 → Bypass Permissions(零护栏)
│
├── 是否使用 Anthropic 官方 Claude 模型?
│ └── 是 → Auto 模式(分类器自动判断)
│
├── 是否使用 DeepSeek/GLM 等第三方模型但想开 Auto?
│ └── 是 → CC-Switch 本地路由 + Auto 模式
│
├── 是否只想让 Claude 做白名单内的事?
│ └── 是 → Dont Ask + allow 列表(严格白名单)
│
├── 不想每次编辑都确认但命令还是要批?
│ └── 是 → Accept Edits(日常推荐)
│
└── 不确定 → Default(最安全)
参考来源: