先問你一個會決定要不要讀下去的問題:你的 Claude Code,是不是已經被你自己改到認不出來了?

裝了五六個 plugin、寫了一份越長越像憲法的 CLAUDE.md、掛了幾個 hook 在存檔時自動跑、接了三四個 MCP server。某天它開始怪怪的——一進 session 第一句話就莫名其妙切去 fallback 模型、某個指令行為跟昨天不一樣、或者就是慢得不正常。這時候你要回答的問題只有一個:這麼多客製化,到底是哪一個在搞鬼?

過去的答案很土法煉鋼:一個一個關掉,關一個試一次,看什麼時候恢復正常。Claude Code 在 6 月 8 日的 v2.1.169 加進來的 --safe-mode,就是來終結這個過程的。但這篇真正想講清楚的,是它「救得了」跟「救不了」的那條界線——因為搞錯這條線,你會對著一個它根本治不了的病猛灌它的藥。

它在做的事,就是醫生的「停藥觀察」

想像你身體出了狀況,同時在吃五種保健食品、三種藥。醫生不會猜,他會請你全部停掉,看症狀還在不在。如果停光了就好了,問題出在某個你吃的東西,再一個一個加回來找兇手;如果全停了症狀還在,那代表病根本不在這些藥上,得往別的方向查。

--safe-mode 就是 Claude Code 的「全部停藥」。

1
claude --safe-mode

這一個 flag 下去,它會開一個乾淨的 session,一次停用你所有的客製化CLAUDE.md 不讀了、plugins 不載入、skills 不啟用、hooks 不觸發、MCP servers 全部不連。等於把你疊上去的東西整層剝掉,露出原廠的 Claude Code 給你看。

如果你要寫進腳本或 CI 環境裡排錯,有等效的環境變數:

1
export CLAUDE_CODE_SAFE_MODE=1

邏輯跟停藥觀察一模一樣。在 safe-mode 下問題消失了 → 兇手在你的客製化裡,接下來把 plugin、hook、MCP 一項一項開回來,哪一項開了問題復發,就是它。在 safe-mode 下問題還在 → 恭喜,你省下了翻遍所有設定的冤枉時間,因為病根不在那。

最典型的場景:一開 session 就被降級

舉一個很多人遇過、但想破頭的狀況:你的 session 才剛開、第一個 request 都還沒做什麼正事,模型就自己掉到 fallback 去了。

為什麼第一句話就出事?因為 session 的第一個 request 並不「乾淨」。它會夾帶一堆你看不到的東西一起送出去——其中就包括你那份 CLAUDE.md 的完整內容。如果你的 CLAUDE.md 寫得又臭又長,或者裡面剛好有些字眼觸發了某些判斷,第一個 request 就可能因為「太重」或「內容敏感」而被處理成需要降級。

這種時候 --safe-mode 特別好用:開乾淨 session,CLAUDE.md 不送了,如果模型不再一開場就掉下去,你就抓到方向了——problem 出在那份你親手寫的設定檔。

重點來了:它救不了的那種情況

這才是這篇最該記住的一段,也是 --safe-mode 最容易被誤用的地方。

--safe-mode 關掉的是「你加上去的客製化」。但 Claude Code 送出去的 context 裡,有些東西不算客製化,所以 safe-mode 不會把它們關掉——最關鍵的兩個是:你的 git status,跟你的工作目錄名稱

這兩樣東西,不管你開不開 safe-mode,都會被送進 context。

於是就有了一個很多人踩過的坑:假設你的專案目錄叫 bioweapon-detector,或者你 repo 裡某個檔名、某段 diff 剛好踩到了內容分類器的敏感詞。這會讓你的 request 被降級或被擋。你開了 --safe-mode,滿心期待它救你——結果一點用都沒有,因為真正的兇手是目錄名和 git status,而這兩個 safe-mode 根本不碰

這就是停藥觀察的盲點:停藥能排除「藥」的嫌疑,但如果你生病是因為住的房子有問題,停再多藥都沒用。--safe-mode 隔離的是你疊上去的那層,隔離不了你「人在哪個 repo、那個 repo 長什麼樣」這個底層事實。

搞懂這條界線,你才知道 safe-mode 給你的是什麼答案:它不是「修好我的 Claude Code」按鈕,它是一個二分法的探針。它幫你把問題切成兩半——「是不是我的客製化造成的」。答案如果是「不是」,它的任務就完成了,剩下的(git status、目錄名、網路、版本)要你自己往下查。

順手認識它的小兄弟

同一版還出了一個更精細的工具,適合你已經知道「大概是 skill 的問題」但不想連 plugin、hook、MCP 都一起關掉的時候:

1
export CLAUDE_CODE_DISABLE_BUNDLED_SKILLS=1

它只藏掉 Claude Code 內建的那些 skill,其他你的客製化照常運作。--safe-mode 是核彈級的「全部關」,這個是手術刀級的「只關內建 skill」。除錯的精神是一樣的——每次只動一個變因——差別只在你要隔離的範圍多大。

所以,什麼時候該用它

把判準講白,省得你下次出事還在猶豫:

只要你的問題有可能是「我裝的東西造成的」——plugin 衝突、hook 跑出奇怪結果、某個 skill 行為異常、MCP 拖慢速度——第一件事就是 claude --safe-mode 跑一次。它幾秒鐘就能告訴你方向往哪走,比你瞎猜半小時划算太多。

但如果你的問題是「一進某個特定的 repo 才會發生」、「換個目錄就正常」、「跟我裝什麼無關」,那就別浪費時間開 safe-mode 了——直接去看你的目錄名稱、git status、還有那個 repo 裡有沒有什麼會踩線的內容。

工具最大的價值,往往不在它能做什麼,而在你清不清楚它不能做什麼。一個只會無腦開 safe-mode 的人,跟一個知道「這次開了也沒用、得往別處查」的人,差的不是這個指令,是對自己工具的理解到哪。

原文來源:Claude Code Changelog (v2.1.169)