Claude Code --safe-mode 怎么用:一个开关关掉 5 道防线,10 秒上手(2026)
(updated )

Claude Code --safe-mode 怎么用:一个开关关掉 5 道防线,10 秒上手(2026)

升级到 Claude Code v2.1.169,第一感觉是老反射 /clear 不灵了。CLAUDE.md 过时、某个插件遮住了内置命令、MCP server 不响应、hook 在背后悄悄改 diff——这些场景下 /clear 只清会话,问题还在 config 里坐着。--safe-mode 就是为这种情况准备的 kill switch。

这篇讲清楚 --safe-mode 到底关掉了哪 5 层、什么场景用它而不是 /clear、Mac/Windows/WSL 怎么 10 秒内开起来,以及一套不用解释就能甩给同事的 3 步排错流程。

开了 safe mode 能做什么,做不了什么

先把边界划清楚再动手。

目标—safe-mode/clear重装
关掉一份坏掉的 CLAUDE.md
关掉一个行为异常的插件部分
关掉在背后改 tool 输出的 hook
关掉卡死的 MCP server部分
让模型看不见自带 Skills
清掉跑飞的会话上下文
重置 API 凭证
切换调用的模型
清 slash 命令历史
10 秒内搞定

一句话规则/clear 跑一两轮还没修好的问题,先 --safe-mode,再考虑卸东西。

什么时候用,什么时候别用

该用 safe mode

  • 从 v2.1.16x 升到 2.1.169 之后 Claude Code 行为变了——升级是唯一变量,先把自定义全关掉确认下。
  • 同事说”我这没事你这有 bug”——把你的 CLAUDE.md 和插件按住,看 bug 还在不在。
  • 最近 24 小时装的插件或 MCP server 开始挡命令、抛错或者返回奇怪的 tool 输出——别急着卸,先隔离。
  • Hook 在背后悄悄改 tool call,你不知道是哪一个——一把全关,一秒定位。
  • 接手别人配好的开发机,想先看一眼”原版” CLI 是什么样,再决定要不要继承别人的 config。

别用 safe mode

  • 只是想清上下文——用 /clear,别重启。
  • 只是想换个模型——ANTHROPIC_MODEL 或用模型选择器,跟 safe mode 没关系。
  • 怀疑 key/上游地址有问题——safe mode 不动 ANTHROPIC_API_KEYANTHROPIC_BASE_URL,先查这俩。
  • 想只关 5 个插件中的某一个——直接改 settings 或者卸掉那个插件,safe mode 是”全关或全开”,没有半开档位。
  • 任务做到一半,会话上下文有价值——safe mode 会开一个全新空会话,半成品上下文会丢。

停止规则

如果开了 safe mode bug 还在,那问题不在你的自定义里。别再花时间删插件了,去查模型、网络、账号、上游 API。

—safe-mode 关掉的 5 道防线(v2.1.169 原话)

官方 v2.1.169 release notes 一句话讲完:start Claude Code with all customizations (CLAUDE.md, plugins, skills, hooks, MCP servers) disabled for troubleshooting。这 5 层每层对应一类常见故障模式。

#防线关掉了什么最常见兜的坑
1CLAUDE.md项目根 + 父目录链 + ~/.claude/CLAUDE.md 全局过期指令覆盖用户 prompt;团队规则相互打架
2插件插件目录里的所有条目,包括 marketplace 装的插件遮住内置命令;插件冷启动崩溃
3Skills~/.claude/skills/ 下你自己加的。要把自带 Skills 也藏掉,再加 CLAUDE_CODE_DISABLE_BUNDLED_SKILLS=1Skill 被错意图触发;Skill 发出错误的 tool call
4Hooks你注册过的所有 hook 事件——约 30 种类型(完整列表见 hooks 官方文档)包括 PreToolUsePostToolUseUserPromptSubmitStopNotificationSessionStartSessionEndPreCompactSubagentStart/StopHook 默默改 diff 或拦 tool call
5MCP servers所有 MCP server,不管来自 settings、--mcp-config、IDE 配置还是企业策略MCP server 冷启动卡死;tool 名冲突;auth 死循环

关的东西:API key、配好的 base URL(所以 ofox 接入照旧)、ANTHROPIC_MODEL 里的模型名、会话历史文件、slash 命令快捷键、当前项目目录的信任弹窗。

第 1 道:CLAUDE.md——隐形的 system prompt 扩展

每次会话启动会从最多 3 个地方加载 CLAUDE.md:项目根目录、所有走到 / 的父目录、~/.claude/CLAUDE.md 全局。里面写的内容会在每次 user prompt 前注入。开了 safe mode,模型表现得像这些文件不存在。“同一个 prompt 今天和昨天行为不一样”——第一个该怀疑的就是 CLAUDE.md,多半是你或同事新加了一条规则把行为带偏了。

第 2 道:插件——第三方扩展面

插件住在 ~/.claude/plugins/(或你配的插件目录),能注册 slash 命令、拦 tool call、暴露 MCP server,甚至改写 prompt。Safe mode 直接跳过插件加载器,意味着冷启动崩溃的插件、遮住 /clear 这种内置命令的插件、在 Windows 上占文件锁的插件全部不出现。升级后行为异常的故障原因里,插件排第二,仅次于 CLAUDE.md。

第 3 道:Skills——用户加的自动关,自带的可选

~/.claude/skills/ 下你自己加的 skills 会被 safe mode 自动关掉。自带 skills、workflows、内置 slash 命令会被 safe mode 单独关,需要再加 CLAUDE_CODE_DISABLE_BUNDLED_SKILLS=1 环境变量或 disableBundledSkills: true 设置(也是 v2.1.169 新加的)。日常排错只开 safe mode 就行;怀疑内置 skill 抢了你自己的逻辑时,再叠 bundled-skills 标志。

第 4 道:Hooks——在背后改 tool call 的隐形手

Hook 在几十种事件上触发——PreToolUsePostToolUseUserPromptSubmitStopNotificationSessionStartSessionEndPreCompactSubagentStart/Stop 等,覆盖 tool 调用、会话生命周期、异步事件。一个 hook 能改写模型的 tool 输入、阻止 tool 执行、吃掉输出,或者只是多打几行话。这层最难手动排查,因为 hook 的影响是沉默的、带外的。Safe mode 一把关掉所有 hook,是确认”是不是 hook 在吃我的 diff”最快的办法。

第 5 道:MCP servers——最长尾的面

MCP server 来源很多:settings 文件、--mcp-config 标志、IDE 配置,以及 v2.1.169 引入的企业级 allowedMcpServers/deniedMcpServers 策略。它们会冷启动卡死、tool 名撞车、陷入 auth 死循环,或者就是响应慢得没法用。一个标志关掉全部,让你能问”零 MCP 这个会话能跑通吗?“——这个问题平时很贵,因为大多数人配了 3-10 个 MCP server。

准备清单

  • Claude Code ≥ v2.1.169(2026-06-08 发)。claude --version 查一下。如果显示 2.1.168 或更低,先升级:npm 装的跑 npm install -g @anthropic-ai/claude-code,原生安装的跑官方 installer。
  • 能设环境变量的终端:zsh、bash、fish、PowerShell、CMD、WSL 都行。
  • API 凭证已配好ANTHROPIC_API_KEY(或同名的 ofox key)必须在。safe mode 关的是自定义,不是认证。
  • (可选)能写 shell rc:如果要在整个排错会话里都用 safe mode,会设 CLAUDE_CODE_SAFE_MODE=1~/.zshrc~/.bashrc 或 PowerShell $PROFILE

7 步:开 safe mode + 排错收尾

第 1 步:确认版本是 v2.1.169 或更高

claude --version
# 期望:2.1.169(或更高)

如果是旧版,按你的安装方式升级,然后重开终端确保 PATH 拿到的是新二进制。

第 2 步:一次性启动

macOS / Linux / WSL

claude --safe-mode

Windows PowerShell

claude --safe-mode

Windows CMD

claude --safe-mode

标志在所有系统上都一样,区别只在 shell 包装。打开的会话会跳过所有 CLAUDE.md、插件、Skills、Hooks 和 MCP server。

第 3 步:(备选)用环境变量持续整个排错会话

想让一个 shell 里的所有 claude 调用都走 safe mode——跨多个 pane 或 repo 排错时很有用:

macOS / Linux / WSL(bash、zsh):

export CLAUDE_CODE_SAFE_MODE=1
claude

Windows PowerShell

$env:CLAUDE_CODE_SAFE_MODE = 1
claude

Windows CMD

set CLAUDE_CODE_SAFE_MODE=1
claude

启动前先确认环境变量生效:

echo $CLAUDE_CODE_SAFE_MODE
# 期望:1

第 4 步:确认 safe mode 真的开了

进会话后,发一个会触发 CLAUDE.md 里项目规则的 prompt。规则没生效,说明 safe mode 在跑。也可以列出加载的 MCP server,列表应该是空的。

第 5 步:干净退出 safe mode

一次性启动的,/quit 关掉,下次直接 claude 就行。

环境变量启动的,relaunch 前先 unset:

# macOS / Linux / WSL
unset CLAUDE_CODE_SAFE_MODE

# PowerShell
Remove-Item Env:CLAUDE_CODE_SAFE_MODE

# CMD
set CLAUDE_CODE_SAFE_MODE=

然后检查 rc 文件(~/.zshrc~/.bashrc$PROFILE)有没有残留的 export,否则下次开 shell 又会重新启用。这是”已经关了 safe mode,几天后 Claude Code 还是不读 CLAUDE.md”最常见的原因。

第 6 步:3 步排错套路

Safe mode 确认 bug 在自定义里之后,用二分搜索缩小范围,别一口气全卸:

  1. 正常 relaunch,保留 CLAUDE.md 和插件,在 settings 里手动关掉 hooks 和 MCP。还能复现?如果能,凶手在 CLAUDE.md 或某个插件——通常是大体量、近期改动那层。
  2. 重新开启 hooks,MCP 还关着。还能复现?如果能,凶手是某个 hook。一个一个关 hook;v2.1.169 hook 按加载顺序求值,先关最近加的那个。
  3. MCP server 一个一个开。重新出现 bug 的那个就是嫌疑。每切一个 MCP 都重启会话——MCP server 在会话启动时缓存 tool 列表,不重启直接切会有假阴性。

大多数情况第 1 步或第 2 步就定位完了,第 3 步只在你跑很多 MCP server 时才用得到——大团队里这种情况越来越多。

第 7 步:给 bug tracker 留一份干净复现

定位到肇事层之后,再跑一次 safe mode,只把那一个坏掉的文件放回去。这样 bug 被精确隔离到一个自定义,能给出极紧的复现。复现内容两行就够:“加了 ~/.claude/plugins/foo/index.ts,safe mode 下行为是 A,把这个插件开回去行为变成 B。” Claude Code 维护者对这种格式响应最快。

配 safe mode 时的高频报错(按现象找)

现象根因修法
Unknown flag: --safe-modeClaude Code 还是 v2.1.168 或更低升到 v2.1.169+,重开终端让 PATH 拿到新二进制
Safe mode “好像没生效”——CLAUDE.md 还在加载PATH 上有两个 claude 二进制,老的赢了Mac/Linux 跑 which claude,Windows 跑 where claude,删掉或改名老的那份
加了 flag 但 CLAUDE.md 还是加载--safe-mode/clear 搞混了,你是在已经加载的会话里跑 /clear整个会话关掉(Ctrl-D/quit),再带 flag 启动
MCP server 还出现在 slash 命令列表里Windows 上 MCPB 插件缓存陈旧(v2.1.169 修过的已知坑)关掉会话,删 MCPB 插件缓存目录,带 --safe-mode 重启
claude -p 在 Windows 上加完 safe mode 后一直 hang不是 safe mode 的问题,是 v2.1.169 已修的 skill-scan 卡死确认在 >=2.1.169;如果是,带 --verbose 输出去开 issue
设了 CLAUDE_CODE_SAFE_MODE= 两边带空格Bash 把 CLAUDE_CODE_SAFE_MODE =1 当命令而不是赋值严格写成 export CLAUDE_CODE_SAFE_MODE=1,不留空格
Safe mode 关掉了你的强制 pre-commit 签名 hook,commit 现在没签名设计如此;safe mode 是为诊断不是为日常工作要 push 的 commit 之前先退 safe mode;safe mode 留给只读排错
企业 allowedMcpServers 列表看起来”还在生效”Safe mode 关的是 MCP server,不是策略 schema 解析器;策略文本还在 settings 里把策略文件当成 safe mode 下的休眠状态——会解析但不会有 MCP server 跑起来

团队/多人协作配置

Safe mode 是团队收到 bug 报告时最干净的复现原语,写进 runbook。

共享排错别名

在团队 dotfiles repo 里塞一行,确保每个工程师入口一致:

# ~/.zshrc 或 ~/.bashrc,提交到团队 dotfiles repo
alias claude-triage='CLAUDE_CODE_SAFE_MODE=1 claude'

同事报 bug,on-call 第一句话就是”跑 claude-triage,把复现贴出来”。一条命令,零上下文,零版本漂移。

排错决策矩阵

Bug 表现报告人跑配置问题表现上游问题表现
Tool 输出像被改过claude-triage 后复现Bug 消失 → 凶手是 hookBug 还在 → 模型/API 问题
Slash 命令被遮住claude-triage/help内置命令回来了 → 是插件在遮命令还是没有 → CLI bug
CLAUDE.md 规则被忽略claude-triage 后问只有那条规则才答对的问题行为没变 → 你的 CLAUDE.md 本来就读不到(路径问题)只在 safe mode 下行为变 → CLAUDE.md 在加载但被覆盖
MCP tool 报错claude-triage 后再试没 MCP 也能跑通 → server 坏了同样的错 → 不是 MCP 的事

CI/脚本里别带 safe mode

--safe-mode 是诊断标志,不是部署目标。把它加到 CI 的 claude -pclaude agents 调用里——你会悄悄丢掉团队的 CLAUDE.md、hooks 和所有 MCP 集成。怀疑 CI 撞到自定义 bug 时,本地跑 safe mode 确认,然后修那个肇事自定义。CI YAML 里多一行 --safe-mode 就是一次等着发生的事故,把这标志留在能让人看见的地方。

新人入职

入职第一天给新工程师一个 5 分钟练习:跑 claude-triage,问跟正常模式下完全一样的问题,看差异。他走的时候就知道团队的自定义到底干了什么,而不是把 CLAUDE.md 当成”自动会发生的魔法”。

进阶:safe mode + disableBundledSkills + /cd 组合

v2.1.169 一共放出 3 个相关控制项,组合用很顺手。

--safe-mode + CLAUDE_CODE_DISABLE_BUNDLED_SKILLS=1

--safe-mode 关的是 ~/.claude/skills/用户加的 skills。要让自带 skills、workflows 和内置 slash 命令也对模型不可见,就加 CLAUDE_CODE_DISABLE_BUNDLED_SKILLS=1(或 settings 里 disableBundledSkills: true)。两个一起,模型看到的就是一个什么都没加的裸 CLI——想对比”原版模型行为” vs “你定制后的行为”时很有用。

CLAUDE_CODE_SAFE_MODE=1 CLAUDE_CODE_DISABLE_BUNDLED_SKILLS=1 claude

safe mode + /cd

v2.1.169 还加了 /cd,能在不打断 prompt 缓存的前提下切会话的工作目录。跨多个 repo 排错时把两个组合起来:带 --safe-mode 启动一次,然后 /cd 在 repo 之间跳。冷启动成本只付一次,排错全程都在同一个模型上下文窗口里。

safe mode + ofox 上游

如果你通过 ofox 这类多 provider 网关接 Claude Code——也就是 ANTHROPIC_BASE_URL=https://api.ofox.ai/anthropic——safe mode 不动这条路由,本地自定义全部按住的同时上游照常工作。这种分离正是它的价值:能在不动上游凭证的前提下把”本地 config”这个变量摘干净。Safe mode 是唯一能让你 10 秒内得到”问题是我还是我装的所有东西”诚实答案的 CLI 标志。

排错完想深入用法,可以看 Claude Code 接 ofox 配置指南Claude Code Hooks/Skills/Worktrees 防误删实战Claude Code Token 优化 5 招——这三篇讨论的话题都建立在 safe mode 关掉的那 5 层自定义之上。

延伸阅读

本文核实过的来源