CLAUDE.md 專案記憶:讓 Claude 記住你的專案規範

每次開啟 Claude Code,它都是從一張白紙開始。你的專案用什麼框架?程式碼風格有什麼規範?常用的指令是什麼?如果每次都要重新說明一遍,那效率就大打折扣了。這就是 CLAUDE.md 存在的意義——它是 Claude Code 的「專案記憶」,讓你把專案知識寫下來,Claude 每次啟動時都會自動讀取。搭配自動記憶(Auto Memory)功能,Claude 還能在工作過程中自己累積經驗,越用越懂你的專案。

CLAUDE.md 是什麼(What is CLAUDE.md)

CLAUDE.md 是一個純 Markdown 文字檔,Claude Code 在每次對話開始時都會自動讀取它。你只需要寫一次,Claude 就會在每次啟動時載入其中的指示。你可以把它想像成給 Claude 的一份「專案手冊」,裡面記載了 Claude 需要知道的一切:專案架構、程式碼規範、常用指令、命名慣例等等。

簡單來說,CLAUDE.md 解決了以下問題:

  • 避免重複說明:不需要每次開啟 Claude 都重新解釋專案背景
  • 確保一致性:團隊成員使用相同的 CLAUDE.md,Claude 的行為就會一致
  • 提升效率:Claude 一開始就知道你的專案慣例,可以更快進入狀態
  • 知識傳承:新進成員可以直接從 CLAUDE.md 了解專案規範

CLAUDE.md vs 自動記憶(Auto Memory)

Claude Code 有兩套互補的記憶系統,兩者都會在每次對話開始時載入。了解它們的差異,才能更有效地使用:

比較項目CLAUDE.md 檔案自動記憶(Auto Memory)
誰來寫你自己Claude 自動寫入
內容性質指示與規則學習到的模式與知識
適用範圍專案、使用者或組織層級每個工作目錄
載入方式每次對話完整載入每次對話載入前 200 行或 25KB
適合用來記錄程式碼規範、工作流程、專案架構建置指令、除錯心得、偏好設定

建議做法是:用 CLAUDE.md 記錄你希望 Claude 遵守的規則用自動記憶讓 Claude 從你的修正中學習。兩者搭配使用,效果最佳。

CLAUDE.md 的放置位置

CLAUDE.md 可以放在不同位置,每個位置有不同的作用範圍。越具體的位置優先權越高:

範圍位置用途分享對象
組織層級(Managed Policy)macOS: /Library/Application Support/ClaudeCode/CLAUDE.md
Linux/WSL: /etc/claude-code/CLAUDE.md
Windows: C:\Program Files\ClaudeCode\CLAUDE.md
由 IT/DevOps 管理的全組織指示組織內所有使用者
專案層級(Project)./CLAUDE.md 或 ./.claude/CLAUDE.md團隊共用的專案指示透過版本控制分享給團隊成員
使用者層級(User)~/.claude/CLAUDE.md個人偏好,適用所有專案僅自己
本地層級(Local)./CLAUDE.local.md個人的專案特定偏好,加入 .gitignore僅自己(當前專案)

工作目錄上方的 CLAUDE.md 和 CLAUDE.local.md 會在啟動時完整載入。子目錄中的 CLAUDE.md 則會在 Claude 讀取該目錄的檔案時按需載入。

建立你的第一個 CLAUDE.md

使用 /init 自動生成

最快的方式是在 Claude Code 中執行 /init 指令。Claude 會自動分析你的程式碼庫,生成一份包含建置指令、測試指示和專案慣例的 CLAUDE.md 檔案。如果已經存在 CLAUDE.md,/init 會建議改善內容而不是覆蓋它。

# 在專案目錄中啟動 Claude Code
cd your-project
claude

# 執行 /init 生成 CLAUDE.md
/init

你也可以設定環境變數 CLAUDE_CODE_NEW_INIT=1 來啟用互動式多階段流程。這個模式會詢問你要設定哪些項目(CLAUDE.md、Skills、Hooks),然後用子代理探索程式碼庫,透過追問填補資訊缺口,最後在寫入任何檔案前讓你審核。

手動建立

你也可以直接在專案根目錄建立 CLAUDE.md 檔案。以下是一個完整的範例:

# 專案概述
這是一個使用 Next.js 14 + TypeScript 的電商平台後台管理系統。

# 技術棧
- 前端:Next.js 14(App Router)、React 18、TypeScript 5
- 樣式:Tailwind CSS 3
- 狀態管理:Zustand
- API:RESTful API with Express.js
- 資料庫:PostgreSQL + Prisma ORM
- 測試:Jest + React Testing Library

# 常用指令
- 開發伺服器:`npm run dev`
- 執行測試:`npm test`
- 建置專案:`npm run build`
- 資料庫遷移:`npx prisma migrate dev`
- Lint 檢查:`npm run lint`

# 程式碼規範
- 使用 2 格空白縮排
- 元件使用 PascalCase 命名(例如:UserProfile.tsx)
- 工具函數使用 camelCase 命名
- API 路由放在 src/app/api/ 目錄下
- 所有 API 回應使用統一的 ApiResponse 型別
- 提交前必須通過 ESLint 和 TypeScript 檢查

# 專案結構
- src/app/ — Next.js App Router 頁面
- src/components/ — 可重用元件
- src/lib/ — 工具函數和共用邏輯
- src/types/ — TypeScript 型別定義
- prisma/ — 資料庫 Schema 和遷移檔案

# Git 規範
- Commit message 使用 Conventional Commits 格式
- 格式:type(scope): description
- 類型:feat, fix, docs, style, refactor, test, chore

撰寫高效的 CLAUDE.md

CLAUDE.md 的內容會在每次對話開始時載入到 Context Window 中,消耗寶貴的 Token。因此,寫得精準且簡潔非常重要。以下是幾個關鍵原則:

控制大小:目標 200 行以內

每個 CLAUDE.md 檔案建議控制在 200 行以內。過長的檔案會消耗更多 Context,導致 Claude 對指示的遵循度下降。如果你的指示越來越多,可以使用匯入語法或 .claude/rules/ 來拆分。

結構清晰:善用 Markdown 標題和列表

使用 Markdown 標題和項目符號來分組相關指示。Claude 掃描結構化內容的方式和人類閱讀一樣——組織良好的段落比密集的文字更容易遵循。

指示具體:寫出可驗證的規則

模糊的指示容易被忽略,具體的指示更容易被遵守:

不好的寫法好的寫法
格式要正確使用 2 格空白縮排
測試你的修改提交前執行 npm test
檔案要有組織API handlers 放在 src/api/handlers/ 目錄

避免衝突:定期檢查一致性

如果兩條規則互相矛盾,Claude 可能會隨機選擇其中一條。建議定期檢視你的 CLAUDE.md 檔案、子目錄中的 CLAUDE.md 和 .claude/rules/ 規則,移除過時或衝突的指示。

進階功能:匯入、規則與排除

匯入其他檔案(@import)

CLAUDE.md 支援使用 @path/to/file 語法匯入其他檔案。被匯入的檔案會在啟動時一起展開並載入到 Context 中。支援相對路徑和絕對路徑,匯入可以遞迴(最多 5 層)。

# 參考 README 了解專案概述
See @README.md for project overview and @package.json for available npm commands.

# 額外指示
- Git 工作流程 @docs/git-instructions.md
- API 設計規範 @docs/api-design.md

如果你的專案已經有 AGENTS.md 檔案(給其他 AI 工具使用),可以在 CLAUDE.md 中匯入它,避免重複撰寫:

@AGENTS.md

## Claude Code 專屬指示
在修改 src/billing/ 下的檔案時使用 plan mode。

.claude/rules/ 規則目錄

對於大型專案,你可以把指示拆分到 .claude/rules/ 目錄中的多個檔案,每個檔案專注一個主題。這讓指示更容易維護,也能設定路徑範圍,讓規則只在 Claude 處理特定檔案時載入:

your-project/
├── .claude/
│   ├── CLAUDE.md            # 主要專案指示
│   └── rules/
│       ├── code-style.md    # 程式碼風格
│       ├── testing.md          # 測試慣例
│       └── security.md         # 安全要求

你還可以使用 YAML frontmatter 設定路徑範圍,讓規則只在處理特定檔案時觸發:

---
paths:
  - "src/api/**/*.ts"
---

# API 開發規則

- 所有 API 端點必須包含輸入驗證
- 使用標準的錯誤回應格式
- 加入 OpenAPI 文件註解

排除特定 CLAUDE.md 檔案

在大型 Monorepo 中,其他團隊的 CLAUDE.md 可能會被讀取到。你可以用 claudeMdExcludes 設定來跳過不相關的檔案:

// .claude/settings.local.json
{
  "claudeMdExcludes": [
    "**/monorepo/CLAUDE.md",
    "/home/user/monorepo/other-team/.claude/rules/**"
  ]
}

自動記憶(Auto Memory)詳解

自動記憶讓 Claude 在工作過程中自動累積知識,不需要你手動寫入任何內容。Claude 會自行判斷哪些資訊值得記住:建置指令、除錯心得、架構筆記、程式碼風格偏好等等。

開啟與關閉自動記憶

自動記憶預設是開啟的。你可以透過以下方式切換:

  • 在對話中執行 /memory 指令,使用自動記憶切換開關
  • 在專案設定中設定 "autoMemoryEnabled": false
  • 設定環境變數 CLAUDE_CODE_DISABLE_AUTO_MEMORY=1

儲存位置與結構

每個專案的自動記憶存放在 ~/.claude/projects/<project>/memory/ 目錄下。同一個 Git Repository 的所有 worktree 和子目錄共享同一個記憶目錄:

~/.claude/projects//memory/
├── MEMORY.md              # 精簡索引,每次對話都會載入
├── debugging.md           # 除錯模式筆記
├── api-conventions.md # API 設計決策
└── ...                                    # Claude 自行建立的其他主題檔案

其中 MEMORY.md 是索引檔,每次對話會載入前 200 行或 25KB(以先到者為準)。Claude 會將詳細內容移到獨立的主題檔案中,保持 MEMORY.md 精簡。

查看與編輯記憶內容

自動記憶的檔案都是純 Markdown,你可以隨時查看、編輯或刪除。在 Claude Code 中執行 /memory 指令,可以瀏覽所有載入的記憶檔案,也可以開啟自動記憶資料夾。

你也可以在對話中告訴 Claude「記住 XXX」,例如「記住這個專案一律使用 pnpm 而不是 npm」,Claude 就會將它存入自動記憶中。如果你想把指示加到 CLAUDE.md 而不是自動記憶,可以明確說「把這個加到 CLAUDE.md」。

CLAUDE.md 的載入機制

了解 CLAUDE.md 如何被載入,有助於你更好地組織檔案。Claude Code 會從你目前的工作目錄開始,向上逐層搜尋每個目錄中的 CLAUDE.md 和 CLAUDE.local.md。例如,如果你在 foo/bar/ 啟動 Claude Code,它會載入:

  1. foo/bar/CLAUDE.mdfoo/bar/CLAUDE.local.md
  2. foo/CLAUDE.mdfoo/CLAUDE.local.md
  3. 繼續向上直到根目錄

所有找到的檔案會串接在一起,而不是互相覆蓋。在同一個目錄中,CLAUDE.local.md 會附加在 CLAUDE.md 之後,所以當指示衝突時,你的個人設定會是 Claude 最後讀到的內容。

另外,CLAUDE.md 中的 HTML 區塊註解(<!-- 維護者筆記 -->)會在注入 Claude 的 Context 前被移除。你可以用它來留下給人類維護者的筆記,而不消耗 Context Token。

CLAUDE.md 最佳實踐

  1. 從 /init 開始:讓 Claude 先分析專案,再根據需要調整生成的內容
  2. 保持精簡:目標 200 行以內,過長的指示反而降低遵循度
  3. 寫具體的指示:「使用 2 格空白縮排」比「格式要正確」有效得多
  4. 版本控制:將 CLAUDE.md 加入 Git,讓團隊成員共享相同的指示
  5. 個人偏好用 CLAUDE.local.md:將 CLAUDE.local.md 加入 .gitignore,存放個人的沙箱 URL、測試資料等
  6. 大型專案用 rules/:善用 .claude/rules/ 目錄拆分規則,並搭配路徑範圍
  7. 定期維護:隨著專案演進,定期更新 CLAUDE.md,移除過時的指示
  8. 善用匯入:用 @import 引用 README、API 文件等現有文件,避免重複內容

常見問題排除

問題原因與解決方法
Claude 沒有遵守 CLAUDE.md 的指示執行 /memory 確認檔案有被載入。檢查是否有衝突的指示,並將模糊的描述改為具體的規則
/compact 後指示消失了CLAUDE.md 會在壓縮後重新載入,不會遺失。如果指示消失,表示它只是在對話中提到而未寫入 CLAUDE.md
CLAUDE.md 太大了超過 200 行會降低遵循度。使用 @import 匯入或拆分到 .claude/rules/ 目錄
不知道自動記憶存了什麼執行 /memory 瀏覽自動記憶資料夾,所有內容都是純 Markdown,可以自由編輯或刪除

總結

CLAUDE.md 是 Claude Code 最重要的設定機制之一。透過良好的 CLAUDE.md 設定,你可以讓 Claude 從第一句對話就理解你的專案規範,大幅減少溝通成本。搭配自動記憶功能,Claude 還能隨著使用時間越來越了解你的工作方式和偏好。

建議現在就到你的專案中執行 /init,生成你的第一份 CLAUDE.md,然後根據實際需求逐步調整。下一篇文章我們將介紹 Claude Code 的完整 CLI 指令參考,幫助你掌握所有可用的命令。

延伸閱讀