偵錯您的設定
診斷為什麼 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.md 和 permissions 解決不同的問題。CLAUDE.md 告訴 Claude 您的專案如何運作,以便它做出良好決策。Permissions 和 hooks 無論 Claude 決定什麼,都會強制執行限制。使用 CLAUDE.md 表示「我們在這裡這樣做」。使用 permissions 或 hooks 表示安全邊界和任何必須永遠不會發生的事情,其中您需要保證而不是指導。
檢查已解析的設定
設定在受管、使用者、專案和本機範圍之間合併。受管設定在存在時始終優先。在其餘的設定中,較近的範圍會按本機、專案、使用者的順序覆蓋較廣的範圍。某些設定也可以由命令列旗標或 環境變數 設定,這些變數充當另一個覆蓋層。當設定似乎不適用時,您設定的值通常被另一個範圍或環境變數覆蓋。
若要找出無效的設定檔案,請從您的終端機執行 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 以獲得硬保證。 |
相關資源
如需每個設定表面的完整參考,請參閱專用頁面:
.claude目錄參考:每個設定檔案位置及其讀取方式- Settings:使用哪個檔案以及 Claude Code 使用哪個值;settings 參考有完整的鍵清單
- Hooks 參考:事件名稱、承載和
--debug輸出格式 - MCP:server 設定、核准和
/mcp輸出 - Troubleshoot installation and login:
command not found、PATH 和身份驗證問題 - Troubleshooting:效能、掛起和搜尋問題