常駐檔用了一陣子之後,你會遇到一個很實際的問題:什麼都往同一個檔案塞。
你個人「一律用繁體中文」的偏好、團隊「commit 前要跑測試」的規範、前端「元件用 Tailwind 命名」的細節、後端「資料庫改動要先開 migration」的規矩,全部擠在一份檔案裡。專案一大,這份檔案就開始互相打架:前端的規則出現在後端的對話裡,你個人的癖好被推上團隊的 git。
解法是分層。不同範圍的規則放不同的檔案,工具會依你所在的位置決定讀哪些。
CLAUDE.md 層級疊加
個人全域偏好。
專案共同規範。
本機私密補充。
前端、後端等子資料夾專屬規則。
三層檔案各放什麼
個人層在 ~/.claude/CLAUDE.md。放你在所有專案都想要的東西:回覆語言、你偏好的思考方式、你的個人工具捷徑。這份不會進任何專案的 git,只有你自己的機器讀得到。
專案層在專案根目錄的 CLAUDE.md(或 .claude/CLAUDE.md)。放專案的建置與測試指令、架構決定、命名慣例、共同工作流。這份要 commit 進 git,讓每個協作者的 AI 讀到同一套規範。
個人局部是 CLAUDE.local.md。你在這個專案有些只想自己用的東西——測試用的沙盒網址、你偏好的測試資料、私人的備忘——放這裡,並且加進 .gitignore。它跟專案層的 CLAUDE.md 一起載入,被同等對待。
Codex 那邊的對應是 ~/.codex/AGENTS.md(個人)、專案根目錄 AGENTS.md(專案)、AGENTS.override.md(臨時覆寫)。
另外有一層多數人用不到但該知道:組織層。IT 可以在機器的系統路徑放一份管理版 CLAUDE.md,所有人都會讀、個人設定關不掉,用來放公司的安全政策與合規要求。
子資料夾的規則是「用到才載入」,不是「自動隔絕」
這裡有個常見的誤解要說清楚。很多人以為 AI 改前端檔案時,後端的規則會自動被隔絕、不會干擾。官方文件的描述不是這樣。
實際規則有兩條。第一,你啟動位置以上的檔案全部載入。你在 foo/bar/ 啟動,foo/CLAUDE.md 和 foo/bar/CLAUDE.md 都會讀,而且是串接,前者排前面、後者排後面,不是後者蓋掉前者。第二,你啟動位置以下的子資料夾檔案,是 AI 讀到那個資料夾裡的檔案時才載入。所以 frontend/CLAUDE.md 平常不在對話裡,等 AI 去改 frontend/src/Button.tsx 時才會進來,進來之後就留著了。
它是「按需載入」,不是「隔絕」。同一場對話 AI 先改前端再改後端,兩邊的規則最後都在。這正是為什麼官方一直強調:不同檔案的規則不能互相矛盾,矛盾了它會隨便挑一條。
如果你要的是更精準的「只在碰到某類檔案時才生效」,Claude Code 有一個更適合的機制:.claude/rules/ 資料夾裡的規則檔可以在開頭用 paths: 指定適用的檔案樣式,例如只對 src/api/**/*.ts 生效。這比子資料夾的 CLAUDE.md 更細,也更不容易誤觸。
大型 monorepo 還有一個常見痛點:別的團隊的 CLAUDE.md 也在你的上層路徑,全部被載進來。設定裡的 claudeMdExcludes 可以指定略過哪些檔案。
動手做
網頁版的人兩層就夠。個人層是 Claude 的「個人偏好」設定或 ChatGPT 的「自訂指令」,放語言、語氣、你是誰;專案層是 Claude 專案的「專案指令」或 ChatGPT 專案,放這件事的規則。原則一樣:跨專案都適用的放個人層,只有這個專案適用的放專案層。兩邊都會進對話,所以不要重複寫。
Claude Code 的人,如果一份 CLAUDE.md 已經開始打架,把它逐條分類。可以貼這段讓 AI 幫你分:
下面是我目前的 CLAUDE.md。請把每一條分到四層之一,並輸出四份檔案內容: 1. ~/.claude/CLAUDE.md:我個人在所有專案都適用的偏好(語言、風格、思考方式) 2. ./CLAUDE.md:這個專案所有人都適用的規範(建置、測試、架構、命名) 3. ./CLAUDE.local.md:只有我、只在這個專案的東西(沙盒網址、測試資料、私人備忘) 4. .claude/rules/<主題>.md 並加 paths: 只對某類檔案生效的規則(例如只對 src/api/**/*.ts) 規則:找出互相矛盾的條目並列出來讓我決定;每一條只放一層,不重複。 我的檔案:(貼上)
路徑規則檔的寫法,存成 .claude/rules/api.md:
--- paths: - "src/api/**/*.ts" --- # API 規則 - 每個端點都要做輸入驗證 - 錯誤回應用專案統一格式
分完之後打 /context,確認四種檔案裡該出現的有出現。子資料夾的 CLAUDE.md 和帶 paths: 的規則,要等 AI 讀到對應檔案之後才會出現在清單裡,這是正常的。
分對了的樣子:git status 看不到 CLAUDE.local.md(它在 .gitignore 裡);你個人的語言偏好不在專案的 CLAUDE.md 裡,同事 clone 下去不會被你的癖好影響;前端的規則在 AI 碰前端檔案之前,不出現在 /context 裡;四層加起來沒有一條規則出現兩次,也沒有兩條互相矛盾。
有個快速的檢查:打開你現在的常駐檔,把每一條標上「我」「我們」「只有這裡」三個字之一。標「我」的不該在 git 裡,標「只有這裡」的不該在根目錄。
三層:個人、專案、個人局部。全部串接,近的排後面,不是覆蓋也不是隔絕。子資料夾的檔案用到才載入、載入後就留著;要精準只對某類檔案生效,用 .claude/rules/ 加 paths:。分層之後最要緊的一件事,是各層不能互相矛盾。
站內延伸
來源: Claude Code:How Claude remembers your project(四種位置、串接順序、子資料夾按需載入、.claude/rules/ 的 paths:、claudeMdExcludes);OpenAI Codex:AGENTS.md(~/.codex/AGENTS.md、AGENTS.override.md、由根往下串接)。
規矩放錯層,
會吵到別人
什麼時候看這張:你想把一條規矩寫下來,但不知道該寫進哪一份檔案。
- 三層會一起生效,不是上層蓋掉下層
- 放太上層,別人的工作會被你的習慣綁住
- 放太下層,該守的規矩沒人看得到
第一個動作挑一條你最近重複講過的規矩,決定它屬於哪一層,然後寫下去。五分鐘,先寫一條就好。