SpyBara
Go Premium

debug-your-config.md 2026-09-17 05:00 UTC to 2026-09-18 23:58 UTC

This page contains 1 addition and 1 deletion.

2026
Thu 10 23:00 Fri 18 23:58 Fri 25 23:58

偵錯您的設定

診斷為什麼 CLAUDE.md、settings、hooks、MCP servers 或 skills 沒有生效。使用 /context、/doctor、/hooks 和 /mcp 查看實際載入的內容。

當 Claude 忽略您的指令或您設定的功能沒有出現時,通常是因為檔案沒有載入、從您預期以外的位置載入,或被另一個檔案覆蓋。本指南展示如何檢查 Claude Code 實際載入的內容,以便您縮小範圍。

如需安裝、驗證和連線問題的協助,請改為參閱 Troubleshoot installation and login。

查看載入到 context 的內容

/context 命令顯示佔用目前工作階段 context 視窗的所有內容,按類別細分:系統提示、系統工具、MCP tools、自訂子代理及其載入來源、記憶檔案、skills 和對話訊息。首先執行它以確認您的 CLAUDE.md、規則或 skill 描述是否存在。/context 中的 skills 部分也包括內建 skills,而 /skills 不會列出這些。

如需特定類別的詳細資訊,請使用專用命令進行後續操作:

命令 顯示
/memory 跨使用者和專案範圍的記憶檔案位置,以及在編輯器中開啟每個檔案的選項,加上存取自動記憶資料夾和自動記憶切換
/skills 來自專案、使用者和外掛程式來源的可用 skills
/hooks 作用中的 hook 設定
/mcp 已連線的 MCP servers 及其狀態
/permissions 目前生效的已解析允許和拒絕規則
/doctor 設定檢查:安裝健康狀況、無效的設定檔案、未使用的擴充功能,以及同一目錄中重複的 subagent 名稱,並提出修復建議
/debug [issue] 啟用工作階段的偵錯日誌記錄,並提示 Claude 使用日誌輸出和設定路徑進行診斷
/status 作用中的設定來源,包括是否啟用了受管設定

如果記憶檔案在 /context 細分中遺失,請根據CLAUDE.md 檔案如何載入檢查其位置。子目錄 CLAUDE.md 檔案在 Claude 使用 Read 工具讀取該目錄中的檔案時按需載入,而不是在工作階段開始時載入。

如果 /context 確認檔案已載入但 Claude 仍未遵循特定指令,問題可能在於指令的編寫方式,而不是是否載入。CLAUDE.md 適用於您會給新隊友的指導類型,例如專案慣例、建置命令和檔案所在位置。

當指令模糊到可以多種方式解釋時、當兩個檔案給出衝突的方向時,或當檔案變得足夠長以至於個別規則獲得較少關注時,遵循度會下降。編寫有效的指令 涵蓋保持遵循度高的特異性、大小和結構模式。

檢查已解析的設定

設定在受管、使用者、專案和本機範圍之間合併。受管設定在存在時始終優先。在其餘的設定中,較近的範圍會按本機、專案、使用者的順序覆蓋較廣的範圍。某些設定也可以由命令列旗標或 環境變數 設定,這些變數充當另一個覆蓋層。當設定似乎不適用時,您設定的值通常被另一個範圍或環境變數覆蓋。

若要找出無效的設定檔案,請從您的終端機執行 claude doctor。它會列印唯讀的安裝和設定診斷,而不會啟動工作階段。如需完整檢查,也會提議修正並在套用前詢問,請在工作階段內執行 /doctor。

執行 /status 以查看哪些設定來源處於作用中,包括是否啟用了受管設定。若要瞭解 Claude Code 對於給定鍵使用哪個範圍,請參閱 設定優先順序。

檢查 MCP servers

執行 /mcp 以查看每個已設定的 server、其連線狀態,以及您是否已為目前專案核准它。server 可以定義正確但仍然不提供 tools,原因有幾個常見的:

  • .mcp.json 中的專案範圍 servers 需要一次性核准。如果提示被關閉,server 將保持停用狀態,直到您從 /mcp 核准它。
  • 啟動失敗的 server 在 /mcp 中顯示為失敗。command 或 args 中的相對檔案路徑是常見原因,因為它們相對於您啟動 Claude Code 的目錄而不是 .mcp.json 的位置進行解析。
  • 顯示為已連線但列出零個 tools 的 server 已成功啟動但未返回 tool 清單。從 /mcp 選擇 Reconnect。如果計數保持為零,執行 claude --debug=mcp 並在 ~/.claude/debug/<session-id>.txt 的偵錯日誌中讀取 server 的 stderr。

如需設定位置和範圍規則,請參閱 MCP。

檢查 hooks

執行 /hooks 以列出為目前工作階段註冊的每個 hook,按事件分組。如果您定義的 hook 沒有出現,則它未被讀取:hooks 位於設定檔案中的 "hooks" 鍵下,而不是在獨立檔案中。

如果 hook 出現但不觸發,通常是 matcher 的問題。檢查它是否有這些錯誤:

  • matcher 欄位是一個使用 | 匹配多個 tool 名稱的單一字串,例如 "Edit|Write"。, 分隔符是等效的,因此 "Edit,Write" 匹配相同的 tools。在 v2.1.191 之前,逗號會進入正規表達式評估,matcher 永遠不會匹配,因此如果您不在 v2.1.191 版本上,請使用 |。
  • 拼寫錯誤的 tool 名稱會產生一個不匹配任何內容的 matcher,因此 hook 會無聲地失敗。
  • 陣列值是 schema 錯誤:Claude Code 顯示設定錯誤通知並拒絕整個使用者、專案或本機設定檔案,claude doctor 報告驗證失敗,該檔案中的任何 hook 都不會出現在 /hooks 中。在受管設定中,Claude Code 會從包含陣列的檔案中刪除整個 hooks 鍵,因此該檔案的 hooks 都不適用。檔案的其他設定仍然適用,claude doctor 會列出已刪除的鍵。

對 settings.json 的編輯在短暫的檔案穩定延遲後在執行中的工作階段中生效,即使您在工作階段開始後才建立檔案或專案的 .claude/ 資料夾。您不需要重新啟動。在 v2.1.257 之前,Claude Code 沒有偵測到在工作階段開始後建立的 .claude/ 資料夾中的編輯。

如果在保存後幾秒鐘 /hooks 仍顯示舊定義,請再次執行 /hooks 以重新整理檢視。

如果 /hooks 顯示 hook 但它仍然不觸發,下一步是即時監視 hook 評估。使用 claude --debug 啟動工作階段並觸發 tool 呼叫。偵錯日誌記錄每個事件、檢查了哪些 matchers 以及 hook 的結束代碼和輸出。如需日誌格式,請參閱 Debug hooks,如需常見失敗模式,請參閱 hooks 疑難排解。

針對乾淨的設定進行測試

使用 claude --safe-mode 開始,它會啟動一個工作階段,其中所有自訂項目都被停用,包括 CLAUDE.md、skills、plugins、hooks、MCP servers 和自訂命令與代理程式。驗證、模型選擇、內建工具和權限正常運作。如果問題在安全模式中消失,則其中一個表面是原因;使用上面的目標檢查來找出是哪一個。安全模式仍然會套用來自您組織的受管 hooks 和設定原則。受管 plugins、skills、CLAUDE.md 和 MCP servers 會被關閉。

如果問題在安全模式中持續存在,或您的設定本身令人懷疑,請與不從您常用設定載入任何內容的工作階段進行比較。將 CLAUDE_CONFIG_DIR 指向空目錄以略過 ~/.claude 下的所有內容,並從沒有 .claude 資料夾、.mcp.json 或 CLAUDE.md 的目錄啟動,以便也跳過專案設定。

cd /tmp && CLAUDE_CONFIG_DIR=/tmp/claude-clean claude

乾淨的工作階段沒有使用者或專案設定、hooks、MCP servers、plugins 或記憶。在首次啟動時,預期會看到首次執行設定畫面,從主題選擇開始。如果您看到它們,乾淨的設定目錄就已生效。稍後使用相同目錄的啟動會跳過這些畫面,因為 Claude Code 會將上線狀態儲存在那裡。

  • 如果您的組織部署受管設定,受管設定仍然適用。Claude Code 會讀取 MDM 設定檔、登錄原則和來自設定目錄外部位置的 managed-settings.json,並在乾淨工作階段取得認證後再次擷取伺服器管理的設定
  • 您將被提示再次登入

如果問題在此消失,原因在於您的真實 ~/.claude 或專案 .claude 檔案中的某處。一次一個地重新引入它們,方法是將檔案複製到臨時目錄或從您的專案啟動,以找到哪一個。如果它在乾淨的工作階段中持續存在,原因在於您的使用者和專案設定之外。執行 /status 以檢查是否啟用了受管設定,查找影響 Claude Code 的 環境變數,然後參閱 Troubleshooting。

檢查常見原因

大多數設定意外可以追溯到一小組位置和語法規則。在假設有 bug 之前檢查這些:

症狀 原因 修正
Hook 永遠不觸發 matcher 是 JSON 陣列而不是字串 使用單一字串搭配 | 來匹配多個 tools,例如 "Edit|Write"。請參閱 matcher 模式。
Hook 永遠不觸發 matcher 在 v2.1.191 之前的版本中使用 , 作為分隔符 Claude Code v2.1.191 或更新版本將 , 視為列表分隔符,如 |。較早的版本將逗號評估為字面字元,因此 "Edit,Write" 不匹配任何內容。改用 |,或升級 Claude Code。
Hook 永遠不觸發 matcher 值是小寫,例如 "bash" 匹配區分大小寫。Tool 名稱是大寫的:Bash、Edit、Write、Read。
Hook 永遠不觸發 Hooks 在獨立檔案而不是 settings.json 中定義 專案或使用者設定沒有獨立的 hooks 檔案。在 settings.json 中的 "hooks" 鍵下定義 hooks。只有 plugins 載入獨立的 hooks/hooks.json。請參閱 hook 設定。
全域設定的 Permissions、hooks 或 env 被忽略 設定已新增到 ~/.claude.json ~/.claude.json 保存應用程式狀態和 UI 切換。permissions、hooks 和 env 屬於 ~/.claude/settings.json。這是兩個不同的檔案。
settings.json 值似乎被忽略 相同的鍵在 settings.local.json 中設定 settings.local.json 覆蓋 settings.json,兩者都覆蓋 ~/.claude/settings.json。請參閱 settings 優先順序。
Skill 不出現在 /skills 中 Skill 檔案位於 .claude/skills/name.md 而不是在資料夾中 使用包含 SKILL.md 的資料夾:.claude/skills/name/SKILL.md。
Skill 出現在 /skills 中但 Claude 永遠不呼叫它 Skill 在其 frontmatter 中有 disable-model-invocation: true,或其描述與您表述請求的方式不符 檢查 /skills 中的徽章:「user-only」標籤表示 Claude 不會自動觸發它。請參閱 skill 呼叫。
子目錄 CLAUDE.md 指令似乎被忽略 子目錄檔案按需載入,而不是在工作階段開始時載入 它們在 Claude 使用 Read 工具讀取該目錄中的檔案時載入,而不是在啟動時,也不是在寫入或建立檔案時。請參閱 CLAUDE.md 檔案如何載入。
子代理忽略 CLAUDE.md 指令 內建的 Explore 和 Plan 代理會跳過 CLAUDE.md。自訂子代理以與主對話相同的方式載入它,除非其定義設定 omitClaudeMd 對於 Explore 或 Plan,在您的委派提示中重新陳述指令。對於設定 omitClaudeMd 的子代理,移除該欄位。對於任何其他自訂子代理,將關鍵指令放在代理檔案主體中,該主體成為代理的系統提示。請參閱 啟動時載入的內容。
清理邏輯在工作階段結束時永遠不執行 未設定 SessionEnd hook 在 settings.json 中新增 SessionEnd hook。請參閱 hook 事件清單。
.mcp.json 中的 MCP servers 永遠不載入 檔案位於 .claude/ 下,或其 servers 位於頂層 servers 鍵下,如 VS Code 的 mcp.json 中,而不是 mcpServers 專案 MCP 設定位於儲存庫根目錄為 .mcp.json,而不是在 .claude/ 內,servers 位於 mcpServers 鍵下。請參閱 MCP 設定。
新增在 settings.json 中的 mcpServers 下的 MCP servers 永遠不出現 settings.json 不讀取 mcpServers 鍵 在儲存庫根目錄的 .mcp.json 中定義專案 servers,或執行 claude mcp add --scope user 以取得使用者範圍的 servers。請參閱 MCP 設定。
新增的專案 MCP server 但不出現 一次性核准提示被關閉 專案範圍 servers 需要核准。執行 /mcp 以查看狀態並核准。
MCP server 從某些目錄啟動失敗 command 或 args 使用相對檔案路徑 對本機指令碼使用絕對路徑。您 PATH 上的可執行檔(如 npx 或 uvx)可以按原樣使用。
MCP server 啟動時沒有預期的環境變數 伺服器的設定項目未設定它們,且它們不在 Claude Code 傳遞給 stdio servers 的環境中:其自身環境,減去 它從子程序中移除的變數 在伺服器的 .mcp.json 項目內設定每個伺服器的 env,這不依賴於啟動環境或工作區信任。
Bash(rm *) 拒絕規則不阻止 /bin/rm 或 find -delete Bash 規則匹配字面命令字串,而不是基礎可執行檔;請參閱 Bash 規則不匹配的內容 使用 PreToolUse hook 或 sandbox 以獲得硬保證。

如需每個設定表面的完整參考,請參閱專用頁面: