← Lập trình với Claude Code

Bài 5 · Vận dụng · 20 phút· Cập nhật 11/06/2026

CLAUDE.md & bộ nhớ dự án

Biên soạn bởi Nguyễn Anh Tuấn

Ghi quy ước để AI bám đúng: CLAUDE.md (dự án/cá nhân), phím tắt #, /memory, import @, /init và bộ nhớ tự động.

Bạn không muốn mỗi phiên lại phải nhắc “dự án này dùng pnpm”, “test bằng Vitest”, “đừng sửa thư mục legacy”. CLAUDE.md là một file Claude tự đọc khi mở phiên - nơi bạn ghi quy ước một lần để nó bám đúng mãi.

  • CLAUDE.md = trí nhớ dài hạn do BẠN viết cho dự án; Claude đọc tự động mỗi phiên.
  • Chứa: lệnh build/test, quy ước, cấu trúc, “luật” cần tuân thủ.
  • Được nạp lại sau khi ngữ cảnh bị nén (compact) - quy ước cốt lõi không bị quên giữa chừng.

Đỡ lặp lại = bớt sai

Mỗi điều bạn ghi vào CLAUDE.md là một điều bạn không phải nhắc lại và Claude không đoán sai. Đây là cách rẻ nhất để nâng chất lượng kết quả cho cả nhóm.

Có nhiều tầng CLAUDE.md, gộp với nhau (tầng ngoài rộng, tầng trong cụ thể). Từ rộng đến hẹp:

Tổ chức (managed policy)

Chính sách do công ty đặt - áp cho mọi người (nếu có).

~/.claude/CLAUDE.md - cá nhân

Sở thích của bạn, áp cho MỌI dự án trên máy.

./CLAUDE.md - dự án (commit, chia sẻ cả nhóm)

Quy ước & lệnh của dự án này - quan trọng nhất.

./CLAUDE.local.md - cục bộ (KHÔNG commit)

Ghi chú riêng bạn trong dự án này; để trong .gitignore.

  • Quy ước CẢ NHÓM → ./CLAUDE.md và commit vào git.
  • Sở thích RIÊNG → ~/.claude/CLAUDE.md (mọi dự án) hoặc CLAUDE.local.md (dự án này).
  • Gõ /init để Claude sinh CLAUDE.md ban đầu từ chính code của bạn.

Thử bật/tắt từng tầng để thấy tầng nào thắng khi có xung đột quy ước:

Xung đột quy ước: Thụt lề (indentation) - mỗi tầng khai báo một giá trị khác nhau. Bật/tắt từng tầng để xem tầng nào thắng và vì sao:

Kết quả (2 tầng đang nạp)

~/.claude/CLAUDE.md (cá nhân) ./CLAUDE.md (dự án)
./CLAUDE.md (dự án) "2 dấu cách"

Tầng cụ thể nhất (nạp cuối) có khai báo quy ước → thắng. Tầng còn lại (kể cả rộng hơn) đều bị ghi đè.

Bí quyết: ngắn, cụ thể, hành động được. Dưới đây là một ví dụ gọn cho dự án web:

CLAUDE.md

# Dự án: Cửa hàng X (web)

## Lệnh
- Cài: pnpm install
- Chạy dev: pnpm dev
- Test: pnpm test   (LUÔN chạy trước khi commit)
- Build: pnpm build

## Quy ước
- TypeScript; thụt lề 2 dấu cách; dùng nháy đơn.
- Component đặt trong src/lib/components, đặt tên PascalCase.
- Không sửa thư mục legacy/ (mã cũ, chỉ tham khảo).

## Quy trình
- Làm trên nhánh; mở PR vào main; không commit thẳng main.
  • “Dùng thụt lề 2 dấu cách” thắng “format cho đẹp” - cụ thể luôn tốt hơn chung chung.
  • Ưu tiên: lệnh build/test, quy ước, cấu trúc, vài luật hay bị phá.
  • Giữ ngắn (thường < ~200 dòng): dài quá làm loãng ngữ cảnh, Claude bám kém.

Khi nào KHÔNG nên nhồi vào CLAUDE.md

Quy trình nhiều bước, ít dùng (vd “cách phát hành phiên bản”) nên gói thành Skill (bài sau) thay vì nhét hết vào CLAUDE.md. CLAUDE.md là sự thật & luật luôn đúng; Skill là quy trình gọi khi cần.

Không cần mở file thủ công. Đang làm mà nghĩ ra một quy ước, gõ một dòng bắt đầu bằng # - Claude lưu vào bộ nhớ ngay:

claude - ~/cua-hang-x

# Luôn chạy `pnpm test` trước khi commit

Đã thêm vào CLAUDE.md của dự án. Tôi sẽ nhớ ở phiên này và các phiên sau.

/memory

Đang nạp: ./CLAUDE.md (dự án - commit) ~/.claude/CLAUDE.md (cá nhân) bộ nhớ tự động: MEMORY.md

  • # <ghi chú> - thêm nhanh một điều cần nhớ vào CLAUDE.md (Claude hỏi lưu ở tầng nào).
  • /memory - mở danh sách file nhớ đang nạp để xem & sửa trực tiếp.
  • @đường-dẫn trong CLAUDE.md - gộp nội dung file khác vào (vd @docs/quy-uoc.md).

Dạy Claude ngay lúc nó sai

Thấy Claude lặp lại một lỗi quy ước? Đừng chỉ sửa lần này - gõ một dòng # để ghi luật đó. Lần sau (và mọi phiên sau) nó sẽ tự tuân theo.

Ngoài CLAUDE.md (do bạn viết), Claude Code còn có bộ nhớ tự động: nó tự ghi lại những điều học được qua các phiên - quyết định dự án, mẹo gỡ lỗi, thứ bạn từng chỉnh. Lần sau quay lại, nó “nhớ” mà không cần bạn nhắc.

  • CLAUDE.md = BẠN viết (chỉ dẫn). Bộ nhớ tự động = CLAUDE viết (ghi chú cho chính nó).
  • Lưu cục bộ trên máy bạn, là markdown thường - xem/sửa/xoá tuỳ ý (qua /memory).
  • Bật/tắt được; nếu thấy nó nhớ điều không nên, cứ mở file ra sửa hoặc xoá.

Tổng kết

Giờ Claude đã biết quy ước dự án của bạnnhớ qua các phiên. Phần tiếp theo của khoá là mở rộng năng lực: tạo slash command riêng, đóng gói Skills, giao việc cho Subagents, tự động hoá bằng Hooks, và kết nối công cụ ngoài qua MCP.

Câu hỏi thường gặp

Là một file markdown Claude TỰ ĐỌC mỗi khi bắt đầu phiên trong dự án. Nó chứa quy ước, lệnh build/test, cấu trúc, những điều bạn muốn Claude luôn nhớ. Nhờ vậy bạn khỏi lặp lại “dự án này dùng pnpm”, “test bằng vitest”… mỗi lần. Nó cũng được nạp lại sau khi ngữ cảnh bị nén (compact), nên các quy ước cốt lõi không bị quên giữa chừng.

Cấp DỰ ÁN ./CLAUDE.md (chia sẻ cả nhóm - NÊN commit). Cấp CÁ NHÂN ~/.claude/CLAUDE.md (áp cho mọi dự án của riêng bạn). Cấp CỤC BỘ CLAUDE.local.md (riêng bạn trong dự án này - KHÔNG commit, để trong .gitignore). Tổ chức có thể đặt thêm chính sách cấp cao. Các tầng GỘP lại với nhau.

/init trong dự án - Claude khảo sát code và sinh một CLAUDE.md ban đầu (ngôn ngữ, lệnh build/test, cấu trúc). Sau đó bạn tỉa lại cho đúng. Không cần viết từ con số 0.

Càng ngắn-gọn-cụ thể càng tốt (thường dưới ~200 dòng). File quá dài làm loãng ngữ cảnh và Claude bám kém hơn. Ưu tiên: lệnh build/test, quy ước đặt tên, cấu trúc thư mục, và những “luật” bạn thấy Claude hay phá. Viết “dùng thụt lề 2 dấu cách” thắng “format code cho đẹp”.

Đang làm mà muốn ghi nhớ một điều, gõ một dòng bắt đầu bằng # (vd “# luôn chạy test trước khi commit”) - Claude lưu vào CLAUDE.md cho bạn. Gõ /memory để mở danh sách các file nhớ và sửa trực tiếp. Đây là cách “dạy” Claude ngay trong lúc làm.

CLAUDE.md là do BẠN viết để chỉ dẫn Claude. Bộ nhớ tự động là do CHÍNH CLAUDE tự ghi chú cho mình qua các phiên (vd “dự án này deploy bằng Workers”, các phát hiện khi sửa lỗi). Nó lưu cục bộ trên máy bạn, là markdown thường - bạn xem/sửa/xoá được bất cứ lúc nào. Hai thứ bổ trợ nhau.

Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.

Tick những điều em tự tin làm được sau khi học bài này. 0/6

Trả lời vài câu để chắc rằng em đã nắm bài.

Câu 1/3 Điểm: 0

CLAUDE.md là gì theo bài học?

  1. 1

    Khởi tạo bằng /init

    Trong một dự án thật, chạy /init và để Claude sinh CLAUDE.md. Đọc kết quả: nó nắm đúng lệnh build/test chưa?

    Hoàn thành khi: Có file CLAUDE.md ở gốc dự án; bạn kiểm và sửa cho khớp thực tế (vd đổi npm → pnpm nếu cần).

  2. 2

    Tỉa cho gọn

    Rút gọn CLAUDE.md xuống còn những điều CỐT LÕI: lệnh build/test, quy ước đặt tên, cấu trúc, 1-2 luật quan trọng.

    Hoàn thành khi: File ngắn, mỗi dòng cụ thể & hành động được; bỏ những câu chung chung vô thưởng vô phạt.

  3. 3

    Ghi nhớ bằng #

    Đang trong phiên, gõ một dòng bắt đầu bằng # để dạy Claude một quy ước (vd “# luôn dùng dấu nháy đơn trong JS”).

    Hoàn thành khi: Claude xác nhận đã lưu; mở CLAUDE.md thấy dòng vừa thêm.

  4. 4

    Tầng nào commit?

    Bằng lời: một quy ước CHO CẢ NHÓM nên đặt ở file nào? Còn sở thích RIÊNG bạn (vd editor) nên ở đâu?

    Hoàn thành khi: Quy ước nhóm → ./CLAUDE.md (commit). Sở thích riêng → CLAUDE.local.md (gitignore) hoặc ~/.claude/CLAUDE.md.

  5. 5

    Xem bộ nhớ

    /memory để xem các file nhớ đang được nạp. Có CLAUDE.md cấp nào? Có bộ nhớ tự động không?

    Hoàn thành khi: Bạn liệt kê được các file đang ảnh hưởng tới phiên và phân biệt cái nào do bạn viết, cái nào Claude tự ghi.