Bạn nên xóa hoặc tắt hẳn tính năng tự động tạo file memory.md trong Claude Code: nó gây rác ngữ cảnh (context bloat), lãng phí token và làm sai lệch logic làm việc của bạn.
Cơ chế này vốn sinh ra để AI tự ghi lại "kinh nghiệm" giữa các phiên. Nhưng với một kỹ sư cần sự chính xác, nó thường là nguồn cơn của những lỗi hành vi khó hiểu — và cái giá phải trả nằm ở từng token bạn bỏ ra cho mỗi tin nhắn.
Mỗi khi bạn chat, Claude Code phải gánh thêm một lượng payload vô hình từ các file bộ nhớ này. Tôi chọn cách ngược lại, và khuyên bạn cũng vậy: thay vì để AI tự suy diễn rồi ghi chép lộn xộn, hãy giữ hệ thống ở trạng thái "stateless" (không lưu trạng thái) và tự tay kiểm soát chỉ dẫn, vì đó là cách duy nhất để bạn làm chủ luồng công việc.

Auto memory.md là gì và khác gì CLAUDE.md?
Claude Code vận hành dựa trên hai hệ thống ghi nhớ song song. Chúng khác nhau ở gần như mọi điểm, và chính chỗ khác nhau đó quyết định cái nào đáng giữ lại:
| Đặc điểm | CLAUDE.md | Auto memory (MEMORY.md) |
|---|---|---|
| Người viết | Bạn (kỹ sư) | Claude (AI) |
| Nội dung | Quy tắc, tiêu chuẩn code, kiến trúc | Kinh nghiệm, mẫu hình, tùy chọn cá nhân |
| Giới hạn nạp | Nạp toàn bộ file vào mỗi phiên | Chỉ nạp 200 dòng đầu hoặc 25 KB đầu tiên |
| Mục đích | Định hướng hành vi bền vững | Tự học từ lỗi sai và thói quen của bạn |
File MEMORY.md (nằm trong ~/.claude/projects/<tên-dự-án>/memory/) chính là "entrypoint index", tức là mục lục lối vào. Khi lượng ghi chép lớn dần, Claude tự động tách các chi tiết vào những "topic files" riêng lẻ như debugging.md hay patterns.md.
Có một khác biệt kiến trúc quan trọng: thư mục này nằm cục bộ trên máy (machine-local) và được suy ra từ hash của repo, nên nó dùng chung cho mọi git worktree. Với người hay dùng nhiều worktree, điều này gây rò rỉ ngữ cảnh: các mẫu debug cũ từ một nhánh thử nghiệm có thể lẫn sang một bản vá production. Ngược lại, CLAUDE.md được cả subagent nạp theo để bám đúng chuẩn dự án, còn auto memory của hội thoại chính lại không được subagent kế thừa (trừ fork). Nói cách khác, auto memory là chỗ kém tin cậy để chứa logic bạn muốn tồn tại xuyên suốt một quy trình nhiều agent.
Vì sao memory.md âm thầm ngốn ngữ cảnh của bạn?
Mỗi tin nhắn bạn gửi đi không chỉ chứa prompt của bạn, mà còn kéo theo một "payload" khá lớn: định nghĩa công cụ, chỉ dẫn hệ thống và các file bộ nhớ. Đây là một loại "thuế token" bạn phải trả cho mỗi lượt tương tác (turn), dù bạn có cần đến nó hay không.

- Lãng phí tài nguyên: Ngay cả khi không cần đến những "kỷ niệm" cũ, Claude vẫn nạp 200 dòng đầu của
MEMORY.md. Nếu file vượt giới hạn 25 KB, Claude Code sẽ báo lỗi và bắt AI viết lại mục lục, tốn thêm token và thời gian xử lý. Từ phiên bản 2.1.211, phần đo giới hạn đã bỏ qua YAML frontmatter và comment HTML, nhưng payload vẫn là một khoản hao hụt cố định. - Rác ngữ cảnh: Khi AI "nhớ lại" các topic files từ index, chúng chiếm chỗ của mã nguồn thực tế trong context window. Bạn đang trả tiền cho phần máy móc xung quanh thay vì tập trung vào logic bài toán.
Bạn có thể dùng lệnh /context để kiểm tra thực tế: nó liệt kê chi tiết tỷ lệ phần trăm token mà các file memory đang chiếm trong tổng ngữ cảnh, và con số hiện ra thường xấu hơn bạn tưởng.
Khi trí nhớ tự động bắt đầu "tự vận hành" setup của bạn
Vấn đề lớn nhất là tính thiếu ổn định, vì AI thường "quá nhiệt tình" trong chuyện ghi nhớ. Ví dụ: bạn thử một thư viện tạm thời trong một phiên debug, Claude có thể lưu lựa chọn đó vào bộ nhớ. Ở các phiên sau, nó tự mặc định rằng bạn muốn dùng thư viện đó cho toàn bộ dự án.

Việc tích tụ "tạp chất" trong MEMORY.md khiến hành vi của AI dần trôi dạt và thiếu nhất quán theo thời gian. Với kỹ sư, điều này rất nguy hiểm vì bạn mất đi tính nhất quán của môi trường làm việc, và khó debug hẳn lên khi agent bỗng từ chối tuân theo logic mặc định của dự án. Giữ AI ở trạng thái "stateless" đảm bảo mỗi phiên bắt đầu từ một nền tảng sạch, chỉ tuân theo những gì bạn đã quy định tường minh.