Claude memory files là một hệ thống phân tầng các file — CLAUDE.md, rules, skills và hooks — giúp Claude Code duy trì ngữ cảnh (context) và điều hướng hành vi qua từng phiên làm việc.
Quản lý "ngân sách chỉ dẫn" (instruction budget) là yếu tố sống còn: Claude Code không phải một chatbot đơn thuần mà là một hệ thống điều phối tác vụ (agent orchestration). Cấu hình đúng các file này, Claude sẽ tự nắm được stack công nghệ, quy trình test và quy ước viết code của dự án mà không bắt bạn lặp lại trong mỗi phiên làm việc.
Mặc định, mỗi phiên làm việc của Claude Code đều không nhớ gì (stateless). Thiếu hệ thống memory, AI sẽ lặp lại lỗi cũ hoặc bắt bạn cung cấp lại thông tin cơ bản — lãng phí cả token lẫn thời gian.
Cấu hình đúng các cơ chế điều hướng, bạn biến Claude từ một công cụ gõ code tự động (autocomplete) thành một đội ngũ kỹ sư hiểu sâu cấu trúc dự án.

Vì sao bạn cần memory files cho Claude?
Claude Code mặc định bắt đầu mỗi phiên làm việc từ số 0. Không có hệ thống memory, kỹ sư phải đối mặt với một "vòng lặp lãng phí": lặp lại chỉ dẫn về stack công nghệ, quy trình chạy test và các quy ước viết code đặc thù. Hệ quả là AI hoạt động rời rạc, dễ mắc lại lỗi cũ và khó thực hiện những thay đổi phức tạp ở cấp độ kiến trúc.
Khác biệt nằm ở tư duy hệ thống. Đa số người dùng coi Claude như một công cụ gõ code nhanh; nhóm 1% còn lại thì thiết lập hệ thống memory để điều hướng AI ở cấp độ toàn dự án (project-level). Claude Code thuộc nhóm công cụ AI lập trình dẫn đầu nhờ khả năng đọc toàn bộ codebase, thực thi thay đổi và tự sửa lỗi dựa trên các hướng dẫn có sẵn. Hệ thống memory cho Claude "ý thức" về những đánh đổi (trade-off) trong quá khứ, từ đó đưa ra các quyết định nhỏ (micro-decision) chính xác hơn.
Có những cơ chế memory và điều hướng Claude nào?
Điều phối Claude hiệu quả là bài toán cân bằng giữa ba yếu tố: thời điểm tải (loading), hành vi khi nén hội thoại (compaction) và chi phí token. Bảng dưới đây tóm tắt bảy cơ chế điều hướng chính:
| Phương pháp | Khi nào được tải | Hành vi khi nén (compaction) | Chi phí | Khi nào nên dùng |
|---|---|---|---|---|
| CLAUDE.md (root) | Bắt đầu session | Luôn được giữ và tải lại | Cao | Lệnh build, cấu trúc monorepo, quy chuẩn của team |
| CLAUDE.md (sub) | Khi vào thư mục (on-demand) | Mất khi ra khỏi phạm vi | Thấp | Quy chuẩn riêng cho từng module (ví dụ /src/api) |
| Rules | Theo phạm vi (path-scoped) | Rule không giới hạn phạm vi được tiêm lại | Trung bình | Ràng buộc kỹ thuật (ví dụ API phải dùng Zod) |
| Skills | Khi được gọi (/command) | Tái tiêm theo ngân sách | Thấp | Quy trình thủ tục (checklist deploy, release) |
| Subagents | Khi gọi qua Agent tool | Chỉ trả về kết quả cuối | Thấp | Tác vụ chạy song song hoặc cần cô lập ngữ cảnh |
| Hooks | Khi có sự kiện lifecycle | Nằm ngoài luồng nén (bypass) | Rất thấp | Tự động hóa tiền định: chạy lint, chặn rm -rf |
| Output styles | Bắt đầu session | Không bao giờ bị nén | Cao | Thay đổi hoàn toàn vai trò (ghi đè mặc định) |
Cảnh báo: Output styles ghi đè toàn bộ chỉ dẫn mặc định của Claude Code (về an toàn và quy chuẩn
code). Muốn giữ lại các hướng dẫn kỹ thuật cốt lõi, bạn phải đặt keep-coding-instructions: true
trong frontmatter của style đó.

CLAUDE.md hoạt động như thế nào?
File CLAUDE.md ở root hoạt động theo cơ chế "luôn được tải" (always loaded): nó được lưu sẵn vào cache ngay đầu phiên và chỉ đọc lại sau khi nén ngữ cảnh. Với monorepo, hãy dùng các file CLAUDE.md đặt trong thư mục con để nạp thông tin theo nhu cầu (on-demand) — chỉ nạp khi Claude chạm vào file trong thư mục đó, nhờ vậy giảm tải cho ngữ cảnh chính.
Ngân sách chỉ dẫn của CLAUDE.md nên giữ dưới 200 dòng, và nhớ rằng system prompt mặc định đã chiếm khoảng 50 dòng. Vượt ngưỡng này, Claude rơi vào tình trạng bỏ sót chỉ dẫn (instruction dropout) — lờ đi các chỉ dẫn quan trọng nằm ở giữa file. Quy tắc đơn giản: chỉ ghi những gì Claude thường làm sai trên codebase của bạn, đừng ghi lại những điều nó vốn đã làm đúng.
Một file gọn gàng nên bám theo cấu trúc WHAT, WHY, HOW:
- WHAT — stack kỹ thuật. Thay vì liệt kê tất cả, hãy tham chiếu: "Xem
@package.jsonđể biết dependencies". - WHY — lý do đằng sau các quyết định kiến trúc (ví dụ "Dùng SSR vì người dùng ở vùng kết nối chậm"). Điều này giúp AI hiểu bối cảnh tổng thể của dự án.
- HOW — các lệnh thực thi cụ thể (chạy test, lint) và những "điểm mù" Claude hay gặp trên dự án của bạn.
Để đi sâu vào cách viết và tối ưu một file CLAUDE.md, xem CLAUDE.md: Tối ưu hóa ngữ cảnh cho Claude Code.
Chọn đúng cơ chế: rules, skills, subagents hay hooks?
Để tối ưu luồng công việc, hãy áp dụng khung quyết định sau:
- Skills — dùng cho các playbook quy trình. Ví dụ, một skill
/deploythực hiện đúng 10 bước checklist review mà không bỏ sót. Khác với MCP (kết nối thực thi), skills tập trung cung cấp hướng dẫn và logic thực hiện. - Subagents — dùng để cô lập các tác vụ nặng (rà soát phụ thuộc, phân tích log dài). Kỹ thuật "Two-Claude review" là một cách làm đáng học theo: Session A viết code, sau đó gọi một subagent (Session B) để review độc lập. Vì subagent không mang theo ngữ cảnh về các đánh đổi của Session A, nó cho nhận xét khách quan hơn. Xem thêm Làm chủ subagents trong Claude Code.
- Hooks — dùng cho các rào chắn (guardrail) tiền định 100%. Một
PreToolUsehook có thể kiểm tra lệnh bash và trả về exit code 2 để chặn thực thi, thay vì chỉ dặn dò bằng lời trong CLAUDE.md.

Thiết lập đúng cách: các nguyên tắc tối ưu
Hệ thống memory hiện đại nên kết hợp hai logic: tinh lọc sự kiện (kiểu Hermes) và truy xuất vector (kiểu memsearch). Cụ thể, chia hệ thống thành ba lớp:
- Storage (lưu trữ): dùng
PostToolUsehook để một model giá rẻ (như Haiku) tự tóm tắt mỗi lượt hội thoại thành các gạch đầu dòng và lưu vào memory file theo ngày (memory/date.md). - Injection (tiêm dữ liệu): dùng chiến lược "ảnh chụp đông cứng" (frozen snapshot) — đầu phiên,
tiêm khoảng 1.300 token gồm
memory.md(biến môi trường),user.md(hồ sơ người dùng) vàsoul.md. Dữ liệu này được lưu cache nên tiết kiệm chi phí suốt phiên. - Recall (truy xuất): dùng
/loopđể theo dõi CI/CD chạy nền (ví dụ/loop 5m check CI status), giúp bạn giữ luồng công việc chính mà không phải liên tục chuyển ngữ cảnh.

Ví dụ cấu hình settings.json để chặn lệnh nguy hiểm và tự động lint sau mỗi lần ghi file:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [{ "type": "command", "command": "python .claude/hooks/block_dangerous.py" }]
}
],
"PostToolUse": [
{
"matcher": "Write",
"hooks": [{ "type": "command", "command": "npm run lint --fix" }]
}
]
}
}Nếu file block_dangerous.py trả về exit code 2, Claude sẽ bị chặn không thực thi lệnh bash đó.
Các câu hỏi thường gặp
Sự khác biệt cốt lõi giữa Skill và MCP là gì? Skill là file Markdown chứa playbook hướng dẫn quy trình. MCP (Model Context Protocol — giao thức kết nối) là cầu nối để Claude truy cập dữ liệu thực như database, Jira hoặc Slack.
Khi nào nên chạy /compact thủ công? Khi bộ nhớ ngữ cảnh đạt khoảng 50%. Chủ động nén giúp bạn
kiểm soát thông tin nào cần giữ lại (qua chỉ dẫn trong CLAUDE.md), thay vì để hệ thống tự tóm tắt
ngẫu nhiên.
CLAUDE.local.md dùng để làm gì? Dùng cho các tùy chỉnh cá nhân (kiểu commit message, sở thích riêng) mà bạn không muốn commit vào repository chung của cả nhóm.