~/.claude.json 壞掉時 claude -p 怎麼停、怎麼還原:2.1.318 之前會被換成預設值
2.1.318 的 release notes 有一條,講的是 ~/.claude.json 不是合法 JSON 的時候,claude -p 不會再把它換成預設值。官方錯誤頁還直接承認舊版是這樣:
Before v2.1.318, you were left with defaults in
~/.claude.jsonafter a non-interactive start printed this error, so the next start ran without your configuration.
印了錯誤,檔案卻被換成預設值,下一次啟動就沒有你的設定。
這落到實處會長怎樣,我想像了一個處境。先講清楚,它是我假設的,不是別人回報的案例,也不是我遇過的:有一支腳本,每天凌晨兩點用 claude -p 跑一件事。某天早上你翻 log,指令照樣跑完,可是 MCP 伺服器一個都沒載到,資料夾的信任也被重新問了一遍。前一晚唯一動過的東西,是有人用編輯器開過 ~/.claude.json。
「MCP 不見、信任重來」是我拿官方那句話加上官方對這個檔案內容的描述推出來的症狀:settings 頁說 ~/.claude.json 裝著帳號資訊、MCP 伺服器設定、信任決定這類每個專案的狀態。官方沒有替任何人寫過這個症狀,這一段是推論。
2.1.318 把哪一步改掉了
release notes(2.1.318 的發布時間是 2026-11-04 UTC)跟這個檔案有關的有六條。最重要的是第一條:
Fixed non-interactive launches replacing a
~/.claude.jsonthat isn’t valid JSON with defaults; the start now fails, says how to restore the file, and leaves it as is
非互動啟動遇到壞檔,現在是停下來,講怎麼還原,原檔不碰。官方錯誤頁也寫了後果:claude -p 每次都會 exit 1,直到你把檔案修好。
這條引用了 issue #87551。那張單的內文我是透過 GitHub API 查到的,重現步驟只有四行:有一份正常的 ~/.claude.json、在檔案裡任何位置加一段 /* comment */、存檔、重啟 Claude Code。現象那一欄貼的是同樣的步驟,沒有寫現象,所以我不替它補現象,只能說 release notes 把這個修正掛在那張單底下。
另外有個細節我一直沒查清楚。官方明說 settings.json 是 strict JSON,// 註解或尾逗號都是語法錯誤;對 ~/.claude.json 有沒有同樣的說法,我找不到。所以「在 ~/.claude.json 加註解會不會觸發這個錯誤」,我沒辦法替你斷言有或沒有。
同一台機器,兩個檔壞掉,反應相反
這一節是我讀文件時最意外的。settings 頁「Fix a broken settings file」那段,把兩種壞檔放在一起講。settings.json、專案設定、local 設定壞了,claude -p 的處理是這句:
A
-prun shows no dialog. Unless a managed settings document can’t be parsed, Claude Code skips a broken user, project, or local file or its broken values and continues with the rest.
略過壞檔,用剩下的繼續跑。~/.claude.json 壞了,同一頁寫的是:
A
claude -prun exits, and your file is unchanged.
退出,原檔不動。
兩個檔都可能被手滑弄壞,非互動模式的反應卻是相反的:一個繼續跑,一個停下來。我的解讀是,前者壞掉時少掉的只是某幾條設定,後者裝的是帳號、MCP 和信任決定,沒有它跑下去會悄悄換一個身分。這是我的解讀,文件沒有講設計理由。
release notes 還有一條是「unattended runs 不再每次都重寫 ~/.claude.json,除非裡面有東西真的變了」。換句話說,在這一版之前,每跑一次 -p 都會重寫一次這個檔案。重寫越頻繁,撞上滿碟、或共用網路家目錄存檔出狀況的機會就越多。這個推論是我自己連起來的:2.1.317 另有一條,修的是滿碟或配額用完時 claude -p 丟了 transcript 或 ~/.claude.json 的寫入卻還是 exit 0,現在會印錯誤並 exit 1。至於後面那句 “Full NFS exports may be missed”,原文只有這一句,我不展開。
現在壞掉了,畫面長怎樣、怎麼還原
官方錯誤頁給了輸出範例,我原樣抄在下面。路徑是官方範例的 /home/user,不是我的機器:
1 | Claude configuration file at /home/user/.claude.json is corrupted: <JSON parser's message> |
官方的處理分兩種。輸出裡有 cp 那一行,就在終端機跑那一行(Windows 用 PowerShell),它把壞檔換成備份,也就是 ~/.claude.json 較早的版本。壞掉的那份在第二行已經另存成 .corrupted.<timestamp>,所以 cp -f 蓋掉的不是唯一的一份。
死路在另一種:沒有 cp 那行,或跑了之後錯誤又回來。官方列的退路是三個,修 JSON 本身、從 ~/.claude/backups/ 挑另一份 .claude.json.backup.<timestamp> 複製過去、或把檔案改名。改名的後果要先知道:沒有 ~/.claude.json 的時候,Claude Code 用預設設定啟動,原本檔案裡的東西全都沒有。
最慘的一種是空檔加上備份也是空的。啟動時會印 was empty and no backup holds anything: starting with defaults.,官方的建議是把設定重做一遍,例如用 claude mcp add 把 user 與 local scope 的 MCP 伺服器加回去,要登入就重新登入。settings.json 與 .mcp.json 是另外的檔案,不受影響。另外,空檔又沒有備份的情況,2.1.318 以前會被誤報成損毀,現在改成像檔案不存在一樣直接啟動。
備份從哪來?官方說,Claude Code 每次重寫這個檔案就複製一份,保留最新 5 份,另外多留一份它解析不了的版本。我手邊能驗證的只有份數這一項:
1 | ls -la ~/.claude/backups |
我的 ~/.claude/backups 目前有 5 個 .claude.json.backup.<13 位數字>,剛好 5 份,檔案修改時間都落在今天傍晚。檔名那串數字從 1793961558413 排到 1793962122073,看起來是毫秒 epoch,不過我沒有實際換算過,這只是看起來。當下的 ~/.claude.json 我也只用 json.load 確認過可以解析,沒有看內容。
這篇沒有實際弄壞 ~/.claude.json 再跑 claude -p,因為那會動到我自己的設定檔。上面的錯誤訊息、還原步驟與 2.1.318 之前的行為,全部引自官方文件與 release notes,不是我重現出來的。我實際跑過的只有三件事:claude --version 回 2.1.318、備份目錄有 5 份、現在的檔案可以被解析。
我有一個推測,標明是推測:備份既然是每次重寫就複製一份、只留最新 5 份,頻繁寫入的環境裡,這 5 份有沒有可能全是壞檔之後的版本?官方沒有明講。它只寫了壞掉的版本另外保留一份。所以我不敢保證挑最新那份備份一定是好的,還原後要自己確認。
我會怎麼處理
無人看守的 claude -p,我偏好壞檔時直接失敗。理由是沒有人能回答「要不要重設為預設」,此時照樣換掉設定比停下來更難發現,早上看到的是跑完卻缺東西的結果,而不是一個明確的非 0 exit code。所以我會把腳本裡的 exit code 當成必看的訊號,不吞掉,並且把 Claude Code 升到 2.1.318 以上;要先確認版本,claude --version 就夠了。
還原動作我不會寫進腳本自動跑。cp -f 換回來的是較早的版本,這段時間改過的設定會跟著退回去,該挑哪一份備份、退回去之後少了什麼,是要有人看過才決定的事。腳本做到發現、停下、通知就好。
如果你的腳本每次都在全新、用完即丟的家目錄裡跑,本來就沒有什麼設定可以失去,這篇的備份討論可以直接略過。另外,如果官方哪天寫明 ~/.claude.json 對註解和尾逗號的態度,我會把前面那段「不確定」補成確定的說法。
回到凌晨兩點那支腳本。照 2.1.318 的行為,它不會再安靜地跑完,會在第一次撞到壞檔時 exit 1,輸出裡多一行 Configuration error in,旁邊是一條可以直接複製的 cp。
參考來源:Errors:Configuration error in ~/.claude.json、Settings:Fix a broken settings file、Claude directory:Cleaned up automatically、v2.1.318 release notes、v2.1.317 release notes、Issue #87551

















