CoreCode文件

用好 CoreCode

CLAUDE.md 怎麼寫

最後更新:

CLAUDE.md 是寫給 Claude Code 的專案說明,每次工作階段開始時都會讀一遍。寫得好,Claude 少犯重複的錯;寫得長而亂,它每一輪都在浪費上下文。這一頁按 Anthropic 的 官方說明 整理,加上它對花費的影響。

要點
  • CLAUDE.md 是上下文,不是強制設定:Claude 會參考它,但不保證每條都照做。必須攔住的操作要用 hook。
  • 使用者級放 ~/.claude/CLAUDE.md,專案級放 ./CLAUDE.md 或 ./.claude/CLAUDE.md,個人的專案偏好放 ./CLAUDE.local.md 並加進 .gitignore。
  • 寫具體、能檢驗的規則,每個檔案控制在 200 行以內,用標題和清單組織。
  • 只對部分程式碼有效的規則放進 .claude/rules/,用 paths 限定範圍;多步流程寫成 skill。
  • 它每一輪都隨請求傳送;工作階段中途改了它,要等 /clear、/compact 或重啟才生效。

CLAUDE.md 是什麼

一個純文字的 Markdown 檔案,寫著 Claude 在這個專案裡應該知道的事:怎麼建置和測試、程式碼約定、目錄結構、“總是要這樣做”的規則。Claude Code 每次啟動工作階段都會讀它,把它當作上下文。

它不是強制設定。規則寫得越具體、越簡潔,Claude 越穩定地遵守;但要“無論如何都不許做”的事,比如不許改某個目錄,應該用 PreToolUse hook 攔截。

另外 Claude Code 還有一套“自動記憶”:你糾正過它的事,它會自己記下來,存在 ~/.claude/projects/<專案>/memory/。CLAUDE.md 是你寫的規則,自動記憶是它學到的經驗,兩者每次工作階段都會載入。

放在哪

範圍位置適合寫什麼
使用者級~/.claude/CLAUDE.md你所有專案通用的偏好,比如回覆語言、常用工具
專案級./CLAUDE.md 或 ./.claude/CLAUDE.md團隊共享的規則:建置命令、程式碼規範、架構說明。提交進版本庫
本地./CLAUDE.local.md只屬於你的專案偏好,比如本地測試地址。加進 .gitignore

啟動時,Claude Code 讀取當前目錄和它所有上級目錄裡的 CLAUDE.md,內容按從上到下的順序拼在一起,越靠近當前目錄的越後讀。子目錄裡的 CLAUDE.md 不在啟動時讀,而是等 Claude 讀寫那個子目錄裡的檔案時才載入。

從哪開始

在專案裡執行 /init。Claude 會分析程式碼庫,生成一份包含建置命令、測試方法和專案約定的 CLAUDE.md;已經有的話,它會提出修改建議而不是覆蓋。然後再補上 Claude 自己發現不了的東西。

寫什麼

把它當作“不寫下來就得每次重複解釋”的地方。出現下面這些情況,就該往裡加一條:

只寫每次工作階段都該知道的事實。多步驟的操作流程寫成 skill,需要時才載入;只對某一部分程式碼有效的規則,放進 .claude/rules。

怎麼寫才有效

寫能檢驗的具體規則,不寫籠統的要求:

不要寫寫成
程式碼格式要規範用 2 空格縮排
改完要測試提交前執行 npm test
檔案要組織好API 處理函式放在 src/api/handlers/

一個簡短的示例:

# 專案說明

## 命令
- 安裝依賴:pnpm install(不要用 npm)
- 執行測試:pnpm test,提交前必須透過
- 本地啟動:pnpm dev,埠 3000

## 約定
- TypeScript 嚴格模式,不用 any
- API 處理函式放在 src/api/handlers/,每個檔案一個路由
- 資料庫變更只透過 prisma migrate,不手改表結構

## 回覆
- 用中文回覆,程式碼註釋用英文

匯入其他檔案

用 @路徑 把別的檔案匯入進來,比如 詳見 @README 和 @docs/git-instructions.md。相對路徑以 CLAUDE.md 所在位置為準,匯入可以巢狀,最多四層。寫在反引號裡的 `@README` 不會被匯入。

匯入只是讓檔案更好組織,不會減少上下文開銷:被匯入的內容同樣每次都會載入。第一次遇到匯入專案目錄以外的檔案時,Claude Code 會彈出視窗請你確認。

用 .claude/rules 按範圍拆分

專案大了,可以在 .claude/rules/ 下按主題拆成多個 .md 檔案,比如 testing.md、api-design.md。沒有 paths 的規則和 CLAUDE.md 一樣在啟動時載入;加上 paths 的只在 Claude 處理匹配的檔案時才載入:

---
paths:
  - "src/api/**/*.ts"
---
# API 規則
- 所有介面都要做輸入校驗
- 錯誤統一用 ApiError 返回

CLAUDE.md 裡某一段已經長成多步流程的,可以改寫成 skill,用到時才載入,見 Skills 使用教程。

已經有 AGENTS.md 怎麼辦

Claude Code v2.1.277 起可以直接讀 AGENTS.md:專案裡沒有 CLAUDE.md 時,它讀 AGENTS.md;有 CLAUDE.md 時只讀 CLAUDE.md。想讓幾個程式設計工具共用一份說明,在 CLAUDE.md 裡寫一行 @AGENTS.md 匯入即可。

和花費、快取的關係

更多省錢做法見 省錢指南。

怎麼確認它被讀到了

常見問題

CLAUDE.md 寫多長合適?

官方建議每個檔案控制在 200 行以內。只對部分程式碼有效的規則挪進帶 paths 的 .claude/rules/,多步流程寫成 skill。

為什麼 Claude 不照著 CLAUDE.md 做?

常見原因是規則太籠統、檔案太長、規則之間互相矛盾,或者工作階段中途改的內容還沒生效。用 /context 確認檔案被載入了,把規則改得具體可檢驗;必須執行的約束用 hook。

改了 CLAUDE.md 為什麼沒生效?

當前工作階段不會重新讀它。執行 /clear、/compact 或重啟 Claude Code 後才會讀到新內容。

CLAUDE.md 和 AGENTS.md 能同時用嗎?

有 CLAUDE.md 時預設只讀 CLAUDE.md。在 CLAUDE.md 里加一行 @AGENTS.md,就能兩邊共用一份說明。