CLAUDE.md 是什麼?
CLAUDE.md 是你寫給 Claude Code 的持久指令,每個 session 一開始就載入。官方文件說,Claude 把它當作上下文,而不是強制執行的設定;想無論 Claude 怎麼決定都擋住某個動作,要用 PreToolUse hook。內容越具體、越精簡,Claude 遵守得越一致。
為什麼存在?
每個 Claude Code session 都從全新的 context window 開始,不會記得上一次的對話。官方文件列出兩種跨 session 保存知識的機制:你寫的 CLAUDE.md,與 Claude 根據你的修正自己記下的 auto memory。CLAUDE.md 負責「規則與指令」,auto memory 負責「學到的習慣與模式」。
怎麼載入?
依官方文件:工作目錄與其上層每個目錄的 CLAUDE.md 與 CLAUDE.local.md 在啟動時載入,全部串接而非互相覆蓋,順序從檔案系統根目錄到工作目錄,所以離你較近的指令排在後面。子目錄裡的則等 Claude 讀、寫或編輯該子目錄的檔案時才載入。可用 @path 匯入其他檔案,最多四層。範圍包括 managed policy、專案、使用者與本機(CLAUDE.local.md,建議加進 .gitignore)。若只有 AGENTS.md 而沒有任何 CLAUDE.md,Claude 會讀 AGENTS.md;兩者並存時只讀 CLAUDE.md。
對我有什麼影響?
官方建議每個 CLAUDE.md 控制在約 200 行以內,更長會耗用更多 context 並降低遵守度;只與部分程式碼相關的規則,移到 .claude/rules/ 的路徑限定規則。互相矛盾的指令,Claude 可能任選一個,要定期清理。巨大的巢狀 CLAUDE.md 會造成麻煩:v2.1.309 起超過上限的只載入開頭,避免反覆壓縮。大型 monorepo 可用 claudeMdExcludes 略過別組的檔案,managed policy 的 CLAUDE.md 不能被排除。
官方文件的例子:在 foo/bar/ 啟動 Claude Code,會載入 foo/bar/CLAUDE.md、foo/CLAUDE.md 以及它們旁邊的 CLAUDE.local.md;foo/CLAUDE.md 的內容排在 foo/bar/CLAUDE.md 之前。另一個:auto mode 的分類器也讀同一份 CLAUDE.md,所以寫「never force push」同時約束 Claude 與分類器。
優點是一份文字就能讓每個 session 帶著專案規則;缺點是它占用 context、只是建議而非強制,而且寫太長或互相矛盾會降低遵守度。