Các bài trong khoáBài 13/30

30 bài

Domain 3: Claude Code Configuration & Workflows·Task 3.1

Phân cấp CLAUDE.md, @import và .claude/rules

Đặt CLAUDE.md ở đâu thì ai nhận được, file được nạp lúc nào, và cách chia một CLAUDE.md dài bằng @import hoặc thư mục .claude/rules/.

  • 7 phút đọc
  • Đối chiếu docs 02/11/2026
  • 2 nguồn

Đọc xong bạn nắm được

  • Biết đặt hướng dẫn ở cấp user, project hay thư mục con để đúng người nhận
  • Tìm ra vì sao một người trong nhóm không nhận được hướng dẫn chung
  • Dùng @import để mỗi package chỉ kéo vào tài liệu nó cần
  • Tách một CLAUDE.md dài thành nhiều file theo chủ đề trong .claude/rules/
  • Dùng /memory và /context để kiểm file hướng dẫn nào đang được nạp

CLAUDE.md là file chứa hướng dẫn cho Claude Code: dự án dùng công cụ gì, viết test ra sao, đặt tên thế nào. Mỗi lần bạn mở Claude Code, nó đọc file này trước khi làm việc.

Vấn đề là một máy có thể có nhiều file CLAUDE.md ở nhiều chỗ. Bài này giúp bạn trả lời: đặt file ở đâu thì ai nhận được, và làm sao giữ nó gọn khi dự án ngày càng lớn?

Ví dụ xuyên suốt: monorepo của một app giao đồ ăn

Nhóm bạn làm một app giao đồ ăn, code để chung trong một repo:

food-app/
  CLAUDE.md
  apps/
    web/
    api/
      CLAUDE.md
  packages/
    ui/
  docs/
    standards/

Tuấn làm ở dự án từ đầu. Mỗi lần Tuấn nhờ Claude Code, Claude đều dùng pnpm, viết test bằng Vitest, đặt tên file migration đúng mẫu của nhóm.

Tuần này Hà vào nhóm. Hà clone repo về, nhờ Claude Code thêm một tính năng, và Claude lại chạy npm install, viết test bằng Jest. Cùng một repo, sao Claude trên hai máy làm khác nhau?

Rà một lúc, nhóm phát hiện mấy quy ước đó Tuấn viết trong ~/.claude/CLAUDE.md trên máy mình, chứ không nằm trong repo.

Ba cấp CLAUDE.md

CấpFile nằm ởAi nhận đượcCó trong git không
User (user-level)~/.claude/CLAUDE.mdChỉ bạn, ở mọi dự án trên máy bạnKhông
Project (project-level)CLAUDE.md hoặc .claude/CLAUDE.md ở gốc repoCả nhómCó
Thư mục con (directory-level)Ví dụ apps/api/CLAUDE.mdCả nhóm, khi Claude làm việc trong thư mục đóCó

Quay lại ví dụ: quy ước của Tuấn nằm ở cấp user, nên chỉ máy Tuấn có. Cách sửa là chuyển những dòng cả nhóm cần sang food-app/CLAUDE.md rồi commit. Trong ~/.claude/CLAUDE.md Tuấn chỉ nên giữ thói quen riêng, như "trả lời ngắn gọn" hay "giải thích bằng tiếng Việt".

Ngoài ba cấp trên, Claude Code còn có CLAUDE.local.md cho ghi chú riêng của bạn trong một dự án (nhớ thêm vào .gitignore), và file do bộ phận IT đặt cho cả công ty. Đề thi tập trung vào ba cấp trong bảng.

File nào được đọc, và đọc lúc nào

Không phải file CLAUDE.md nào cũng được đọc ngay từ đầu:

  • Khi mở Claude Code, nó đọc CLAUDE.md ở thư mục bạn đang mở và ở tất cả thư mục cha. Mở ở food-app/ thì food-app/CLAUDE.md được đọc ngay.
  • CLAUDE.md trong thư mục con chỉ được đọc khi Claude bắt đầu đụng tới file trong thư mục đó. apps/api/CLAUDE.md được đọc khi Claude mở, sửa hoặc tạo một file trong apps/api/.

Khi có nhiều file cùng được đọc, chúng được nối lại với nhau, không file nào xoá file nào. File ở gần thư mục bạn đang làm nhất nằm cuối. Nếu hai file dặn ngược nhau, ví dụ file gốc bảo dùng Vitest còn apps/api/CLAUDE.md bảo dùng Jest, thì theo tài liệu của Anthropic, Claude có thể làm theo bên nào cũng được.

Thêm hai điều nên biết:

  • Khi cuộc trò chuyện dài quá và bạn chạy /compact để thu gọn, CLAUDE.md ở gốc dự án được đọc lại từ đầu, nên hướng dẫn trong đó không bị mất. Hướng dẫn bạn chỉ nói miệng trong cuộc trò chuyện thì có thể mất.
  • CLAUDE.md là lời dặn, Claude cố làm theo nhưng không có gì bảo đảm tuyệt đối. Việc nào nhất định phải xảy ra thì dùng hook (đoạn script Claude Code tự chạy ở những thời điểm nhất định).

Giữ CLAUDE.md gọn bằng @import

Tài liệu của Anthropic khuyên mỗi file CLAUDE.md nên dưới khoảng 200 dòng. Khi quy ước nhiều lên, bạn có thể để chúng ở file riêng, rồi kéo vào CLAUDE.md bằng cách viết @ trước đường dẫn.

Nhóm bạn có ba tài liệu chuẩn trong docs/standards/: api-errors.md, database.md và react.md. Package api chỉ cần hai file đầu, nên người phụ trách API viết apps/api/CLAUDE.md như sau:

# API

Mọi endpoint trả lỗi theo chuẩn chung.

@../../docs/standards/api-errors.md
@../../docs/standards/database.md

Còn apps/web thì chỉ import react.md. Mỗi package kéo đúng thứ nó cần, không ai phải đọc quy ước của phần khác.

Mấy điều cần nhớ khi dùng @:

  • Đường dẫn tương đối được tính từ file đang chứa dòng @, không phải từ thư mục bạn mở Claude Code. Vì vậy ở trên phải viết ../../docs/....
  • File được import có thể import tiếp file khác, sâu tối đa 4 tầng.
  • Lần đầu gặp một import trỏ ra ngoài thư mục đang làm việc, Claude Code sẽ hỏi bạn có cho phép không.
  • Import giúp chia file cho dễ sửa, chứ không giúp tiết kiệm: nội dung file được import vẫn được đọc đầy đủ.

Tách theo chủ đề bằng thư mục .claude/rules/

Cách thứ hai là chia một CLAUDE.md dài thành nhiều file nhỏ, mỗi file một chủ đề, để trong thư mục .claude/rules/:

food-app/
  .claude/
    rules/
      testing.md
      migrations.md
      ui.md

Mỗi file là Markdown bình thường. Mặc định chúng được đọc ngay khi mở Claude Code, giống như CLAUDE.md ở gốc. Nhóm muốn sửa quy ước viết test thì chỉ cần mở testing.md, không phải lục trong một file dài.

File trong .claude/rules/ còn có thể chỉ được đọc khi Claude đụng tới những file nhất định, ví dụ chỉ khi sửa file test. Phần đó nằm ở bài 3.3.

Cách làmHợp khi
Một CLAUDE.md ở gốcDự án nhỏ, ít quy ước
@import trong CLAUDE.md của từng packageMỗi package cần một nhóm tài liệu chuẩn khác nhau
Thư mục .claude/rules/Quy ước nhiều, muốn mỗi chủ đề một file cho dễ tìm, dễ sửa
CLAUDE.md trong thư mục conQuy ước chỉ đúng cho đúng một thư mục

Kiểm xem file nào đang được nạp

Khi Claude làm khác nhau giữa hai máy, hoặc hôm nay khác hôm qua, việc đầu tiên là xem những file hướng dẫn nào đang được nạp. Có hai lệnh liên quan:

LệnhLàm gì
/memoryLiệt kê các file CLAUDE.md ở cấp user và project (kể cả file chưa tạo), và mở từng file ra để sửa
/contextCho xem phiên hiện tại đang chiếm context vào những gì, trong đó mục Memory files liệt kê các CLAUDE.md và rules đã được nạp lúc khởi động

Muốn biết chắc file nào thật sự đã được nạp, /context cho câu trả lời trực tiếp nhất. Đề thi thì dùng /memory cho việc kiểm file hướng dẫn đang được nạp, nên nếu câu hỏi về việc này chỉ có /memory trong các đáp án, hãy chọn /memory.

Sau khi biết file nào đang được nạp, dò lỗi theo thứ tự:

  1. Chỉ một người không nhận được hướng dẫn?Hướng dẫn đang nằm ở ~/.claude/CLAUDE.md của người khác: chuyển vào CLAUDE.md của dự án
  2. Chỉ làm sai trong một thư mục?Xem CLAUDE.md của thư mục đó đã được đọc chưa, có dặn khác file gốc không
  3. Hai file dặn ngược nhau?Bỏ một bên, đừng trông vào chuyện file nào thắng
  4. Còn lạiMở /context xem file nào đã nạp, rồi dùng /memory mở từng file ra đọc

Nguồn

  1. Exam Guide CCAR-F v1.0, Task Statement 3.1(mở tab mới)
  2. How Claude remembers your project (Claude Code)(mở tab mới)

Nắm rồi thì thử sức với đề

Xem khoá luyện thi
Phân cấp CLAUDE.md, @import và .claude/rules · Anthropic Exam Pro