Bài 9 · Vận dụng · 22 phút
Dạy AI luật riêng: CLAUDE.md
Biên soạn bởi Nguyễn Anh Tuấn
Dạy AI luật riêng của business bạn qua file CLAUDE.md: ghi quy ước, ngữ cảnh sản phẩm và ràng buộc để Claude bám đúng thay vì đoán mò. Lấy ví dụ web bán hàng: mô tả miền nghiệp vụ (sản phẩm, đơn, thanh toán), quy tắc code và chuẩn chất lượng - để mọi phiên vibe sau đều nhất quán, không phải nhắc lại từ đầu.
Tới giờ mèo con đã có app Next.js, dữ liệu trong PostgreSQL và một lớp cache Redis. Nhưng mỗi lần mở phiên vibe mới, Claude lại như người mới vào việc: nó không nhớ luật riêng của business mèo con. Thế là mèo con phải gõ lại "nhớ là số dư không cache nhé", "tiền lưu số nguyên thôi", "route admin phải kiểm quyền"... mỗi phiên một lần.
Nhắc đi nhắc lại vừa mệt vừa dễ quên - quên một câu là Claude đoán mò, và đoán sai chỗ tiền bạc thì trả giá đắt. Cần một chỗ ghi luật một lần, để mọi phiên sau tự bám.
Chỗ đó là một file tên CLAUDE.md đặt ở gốc repo. Đầu mỗi phiên, Claude Code tự đọc nó - coi như cuốn "nội quy dự án" luôn để sẵn trên bàn. Mèo con ghi vào đây ngữ cảnh sản phẩm, quy ước và những luật đã chốt; từ đó Claude làm theo thay vì đoán.
- ▸Là file Markdown ở gốc repo, tên đúng CLAUDE.md.
- ▸Claude tự nạp vào ngữ cảnh đầu mỗi phiên - không cần nhắc.
- ▸Khác câu chat (chỉ sống trong một phiên): CLAUDE.md là bộ nhớ lâu dài.
Vì Claude đọc CLAUDE.md ở đầu mỗi phiên, luật mèo con ghi một lần sẽ áp cho tất cả các lần vibe sau - trên máy, trên web hay trên điện thoại đều như nhau:
Đây chính là cách biến những điều mèo con phải dặn lặp đi lặp lại thành một bộ nhớ chung, ổn định theo dự án.
Bốn nhóm đáng ghi cho web bán hàng: ngữ cảnh sản phẩm (bán gì, có ví, ai dùng), quy ước code (đặt tên, cấu trúc thư mục), chuẩn chất lượng (a11y, bảo mật, format) và ràng buộc đã chốt. Một file mở đầu có thể trông như sau:
CLAUDE.md mẫu cho web bán hàng (rút gọn) - Claude tự đọc đầu mỗi phiên
# Web bán hàng - Mèo Shop
## Sản phẩm
Web bán hàng online có ví điện tử. Khách tạo tài khoản,
nạp tiền qua QR (SePay), mua hàng thì trừ số dư. Có trang
quản trị (admin) quản lý hàng, kho, giao dịch và số dư.
## Stack
Next.js + PostgreSQL + Redis. Đăng nhập: Better-auth.
Giao diện: shadcn-react + Tailwind. Deploy: VPS riêng.
## Quy ước
- Code chạy qua Prettier trước khi commit.
- Chuỗi bí mật để trong .env, không hardcode.
- Tên bảng/cột tiếng Việt không dấu, snake_case. Mẹo
Quan trọng nhất là phần ràng buộc bất biến - những luật mà sai một cái là hỏng sản phẩm hoặc thất thoát tiền. Ghi rõ để Claude không "tối ưu" lại theo ý nó:
Mục ràng buộc trong CLAUDE.md - mỗi dòng một luật, đọc là hiểu
## Đã chốt - đừng phá
- Tiền lưu bằng SỐ NGUYÊN, đơn vị đồng. KHÔNG dùng float.
- Số dư ví KHÔNG cache - đọc thẳng từ database mỗi lần.
- Mọi route /admin phải kiểm quyền trước khi chạy.
- Nạp tiền phải idempotent: một lần chuyển khoản chỉ
cộng số dư đúng một lần dù webhook gửi lại. Trung thực
CLAUDE.md càng phình thì Claude càng loãng và mèo con càng lười đọc lại. Giữ nó gọn: chỉ luật quan trọng và ngữ cảnh cần thiết. Khi chốt quyết định mới (đổi cách đăng nhập, thêm quy ước), cập nhật rồi commit - để lần vibe sau bám đúng ngay.
- ▸Ngắn gọn, đúng trọng tâm - đừng nhồi mọi thứ.
- ▸Commit CLAUDE.md lên GitHub để đồng bộ khi vibe trên web/điện thoại.
- ▸KHÔNG để bí mật (mật khẩu, khoá API) trong CLAUDE.md - thứ đó thuộc .env.
Bước tiếp theo
Câu hỏi thường gặp
Là một file văn bản (Markdown) đặt ở gốc repo. Claude Code tự đọc nó khi mở phiên, coi như "nội quy dự án" để bám theo. Tên file viết hoa đúng CLAUDE.md để Claude nhận ra.
Tự đọc. Đầu mỗi phiên Claude Code nạp CLAUDE.md vào ngữ cảnh, không cần mèo con nhắc. Đó là điểm khác với việc gõ luật trong một câu chat - câu chat chỉ sống trong phiên đó.
Mô tả trong một phiên (prompt) chỉ có hiệu lực ở phiên đó; mở phiên mới là mất. CLAUDE.md là bộ nhớ lâu dài: ghi một lần, mọi phiên sau đều bám. Luật chung của business thì để CLAUDE.md; yêu cầu nhất thời thì gõ trong phiên.
Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.
Trả lời vài câu để chắc rằng em đã nắm bài.
CLAUDE.md dùng để làm gì?
- 1
Tạo CLAUDE.md với ngữ cảnh sản phẩm
Ở gốc repo web bán hàng, tạo file CLAUDE.md và viết 3-5 câu mô tả sản phẩm: bán gì, có ví điện tử, khách nạp tiền rồi mua, có trang quản trị.
✅ Hoàn thành khi: File CLAUDE.md tồn tại ở gốc repo, mở phiên mới Claude nhắc lại đúng được sản phẩm của bạn khi được hỏi.
- 2
Ghi 3 ràng buộc "đã chốt, đừng phá"
Thêm một mục liệt kê 3 luật bất biến, ví dụ: tiền lưu bằng số nguyên (đồng), số dư KHÔNG cache, mọi route admin phải kiểm quyền trước khi chạy.
✅ Hoàn thành khi: CLAUDE.md có mục ràng buộc với ít nhất 3 luật rõ ràng, mỗi luật một dòng đọc là hiểu.
- 3
Kiểm tra Claude có bám luật
Mở một phiên mới, hỏi Claude "trong dự án này tiền được lưu kiểu gì?" mà không nhắc lại. Xem nó có trả lời theo CLAUDE.md không.
✅ Hoàn thành khi: Claude trả lời đúng theo luật bạn ghi (vd "số nguyên, đơn vị đồng") mà bạn không phải nhắc trong phiên đó.
- 4
Nhờ Claude đề xuất bổ sung
Bật plan mode, nhờ Claude đọc code hiện có và đề xuất vài mục nên thêm vào CLAUDE.md (quy ước đặt tên, cấu trúc thư mục, chuẩn chất lượng). Duyệt rồi thêm những mục hợp lý.
✅ Hoàn thành khi: CLAUDE.md có thêm 2-3 mục bạn đã tự duyệt (không thêm mù quáng), và bạn giải thích được vì sao giữ từng mục.
- 5
Cập nhật sau một quyết định mới
Sau khi chốt một lựa chọn (vd "đăng nhập dùng Better-auth", "giao diện dùng shadcn-react"), ghi quyết định đó vào CLAUDE.md rồi commit.
✅ Hoàn thành khi: CLAUDE.md phản ánh quyết định mới và đã được commit lên GitHub - lần vibe sau Claude bám theo ngay.