Công cụ AI Coding

Quản lý context & memory trong Claude Code: /compact, CLAUDE.md & token budget (2026)

Aug 14, 202614 phút đọc

Trong Claude Code, context là bộ nhớ làm việc của một phiên (prompt, file đã đọc, lịch sử chat, output tool) - mất khi bạn /clear hoặc đóng phiên; còn memory là kiến thức xuyên phiên gồm CLAUDE.md bạn tự viết và auto memory Claude tự ghi. Quản lý context và memory Claude Code hiệu quả nghĩa là: đo bằng /context, nén sớm bằng /compact quanh mức 60%, reset bằng /clear khi đổi task, và chốt mọi quyết định quan trọng vào CLAUDE.md để không bị "quên". Đó là cách giữ phiên dài bền và tiết kiệm token.

Nếu bạn đã dùng Claude Code cho những phiên dài, chạm nhiều file, chắc bạn gặp cảnh này: đang làm ngon thì Claude bắt đầu "quên" quyết định đã chốt 20 phút trước, hoặc terminal báo context sắp đầy. Bài này gộp cả ba mảnh mà đa số hướng dẫn tiếng Việt để rời nhau - context trong phiên, memory xuyên phiên, và token budget - thành một quy trình thực chiến. Nếu bạn mới hoàn toàn, nên đọc trước bài dành cho người mới; còn nếu đã chạy phiên multi-file hằng ngày, đây là bài của bạn.

Context vs memory trong Claude Code khác gì nhau?

Hai từ này hay bị dùng lẫn, nhưng chúng là hai thứ khác hẳn nhau - và hiểu sai chính là nguồn gốc của phần lớn rắc rối khi quản lý context Claude Code. Context (context window) là vùng nhớ ngắn hạn Claude "nhìn thấy" ngay lúc này: câu hỏi của bạn, nội dung các file đã đọc, lịch sử hội thoại, kết quả tool đã chạy, cộng với CLAUDE.md đã được nạp vào đầu phiên. Nó hữu hạn và biến mất khi bạn kết thúc phiên hoặc gõ /clear.

Memory (bộ nhớ Claude Code) thì tồn tại xuyên phiên. Có hai loại: CLAUDE.md - file bạn tự viết để dặn Claude về dự án - và auto memory - nơi Claude tự lưu lại những gì nó học được. Điểm mấu chốt: memory không sống trong context, nó được nạp lại vào context mỗi khi phiên mới bắt đầu.

Tiêu chíContext (in-session)Memory (xuyên phiên)
Gồm những gìPrompt, file đã đọc, lịch sử chat, output tool, CLAUDE.md đã nạpCLAUDE.md (bạn viết) + auto memory (Claude viết)
Tồn tại bao lâuChỉ trong phiên; mất khi /clear hoặc đóng phiênLưu trên đĩa, nạp lại mỗi phiên mới
Ai kiểm soátTự đầy lên khi bạn làm việcBạn chủ động viết / Claude tự ghi
Khi context đầyCần /compact hoặc /clearKhông bị ảnh hưởng - vẫn nạp lại

Nhớ một câu để không nhầm nữa: context là Claude đang nghĩ gì, memory là Claude luôn biết gì.

Vì sao mỗi phiên Claude Code bắt đầu với context trống?

Nhiều người ngầm cho rằng Claude "nhớ" cuộc trò chuyện hôm qua như một đồng nghiệp. Không phải vậy. Về bản chất, mô hình ngôn ngữ không có trí nhớ dài hạn nội tại - Claude không thực sự nhớ cuộc trò chuyện. Mỗi phiên mới là một context window sạch trơn. Cảm giác "nó nhớ dự án của mình" thực ra đến từ việc Claude Code tự động nạp lại memory (CLAUDE.md và auto memory) vào đầu mỗi phiên, chứ không phải mô hình tự nhớ.

Đây chính là lý do memory tồn tại: nó là cầu nối bù đắp cho context window vốn "mất trí nhớ" sau mỗi lần reset. Khi bạn hiểu điều này, bạn sẽ ngừng kỳ vọng Claude tự nhớ và bắt đầu chủ động ghi những gì cần nhớ ra file. Cơ chế context window fresh mỗi phiên được mô tả trong tài liệu chính thức về context window của Claude Code (truy cập 09/08/2026).

Hệ quả thực tế: bất kỳ quyết định nào chỉ nói trong chat mà không ghi ra file đều có nguy cơ bốc hơi - khi phiên kết thúc, hoặc thậm chí sớm hơn nếu context bị nén. Ta sẽ quay lại điểm này ở phần /compact.

Đo context bằng /context và trạng thái token

Bạn không thể quản lý thứ mình không đo được. Lệnh đầu tiên cần thuộc lòng là /context. Gõ nó trong phiên, Claude Code sẽ liệt kê những Memory files đang được nạp (các CLAUDE.md nào đã vào context) và phần trăm context window đang dùng.

/context

Đây là cách kiểm tra chắc chắn nhất xem CLAUDE.md của bạn có thật sự vào context hay không - đừng đoán, hãy nhìn danh sách Memory files. Ngoài ra, status line trong terminal hiển thị % token đang dùng theo thời gian thực. Khi context chạm ngưỡng cao, Claude Code sẽ tự động nén (auto-compact) để phiên không đứng.

Mức dùng contextTrạng tháiNên làm
< 60%An toànCứ làm bình thường
60-80%Cảnh giácChủ động /compact hoặc /clear nếu sắp đổi task
~80-83%Auto-compact kích hoạtClaude Code tự nén - nhưng bạn nên nén trước để kiểm soát chất lượng tóm tắt

Ngưỡng auto-compact quanh 80-83% theo tài liệu chính thức Claude Code (truy cập 09/08/2026), nhưng con số này có thể đổi theo phiên bản.

/compact - nén context đúng cách

Đây là lệnh quan trọng nhất bài này. /compact đọc toàn bộ hội thoại hiện tại, tạo một bản tóm tắt cô đọng, rồi thay phần hội thoại cũ bằng bản tóm tắt đó. Kết quả: giải phóng phần lớn token nhưng giữ được mạch việc - Claude vẫn biết bạn đang làm gì, chỉ là ở dạng nén.

# nén tự động
/compact

# nén kèm chỉ định giữ gì
/compact giữ lại quyết định về schema DB và các file đã sửa, bỏ log debug

Khi nào nén? Quy tắc thực chiến của mình: chủ động ở quanh 60%, đừng đợi tới 90%. Nén sớm khi hội thoại còn "sạch" cho ra bản tóm tắt tốt hơn nhiều so với ép nén lúc context đã ngồn ngộn - lúc đó Claude phải bỏ qua nhiều thứ và tóm tắt dễ sót. Dùng /compact <hướng dẫn> để nói rõ cần giữ gì là mẹo tăng chất lượng đáng kể.

⚠️ Lưu ý quan trọng về giới hạn: compaction là lossy - có mất mát. Bất cứ điều gì chỉ tồn tại trong hội thoại mà chưa ghi ra file đều có thể mất vĩnh viễn sau khi nén. Đây là bug thật khiến nhiều người "mất" quyết định giữa chừng. Bảng dưới cho biết cái gì sống sót và cái gì không:

Sống sót qua /compactMất / không tự reload
CLAUDE.md ở gốc dự án (re-inject từ đĩa)Nested CLAUDE.md ở thư mục con
Auto memory MEMORY.md (phần đầu file được nạp lại)Rule path-scoped (khai báo paths:) khi file khớp không còn mở
Rule không giới hạn phạm vi (unscoped) trong .claude/rules/Instruction bạn chỉ nói trong chat, chưa ghi ra file

Bài học rút ra ngắn gọn: trước khi nén, hãy dặn Claude "ghi các quyết định quan trọng vào CLAUDE.md" - rồi mới /compact. Cái gì trên đĩa thì không sợ mất.

/clear vs /compact - chọn cái nào?

Hai lệnh dễ nhầm nhưng dùng cho hai tình huống khác hẳn. Ngắn gọn: /compact khi bạn tiếp tục cùng một việc, /clear khi bạn chuyển sang việc khác.

Yếu tố/compact/clear
Làm gìNén hội thoại thành tóm tắt, giữ mạchXóa hẳn hội thoại, bắt đầu context trống
Dùng khiCùng task nhưng context đầyĐổi sang task/dự án khác không liên quan
Giữ ngữ cảnh cũ?Có (dạng tóm tắt)Không
CLAUDE.md + auto memoryVẫn nạp lạiVẫn nạp lại

Điểm cần nhớ: dù /clear hay /compact, memory xuyên phiên (CLAUDE.md và auto memory) vẫn được nạp lại - nên bạn không mất "kiến thức nền" về dự án, chỉ mất phần hội thoại tạm thời. Khi đổi task, đừng ngại /clear: giữ hội thoại cũ không liên quan chỉ tổ tốn token và làm nhiễu Claude.

CLAUDE.md - bộ nhớ lâu dài bạn tự viết

CLAUDE.md là công cụ memory mạnh nhất bạn kiểm soát trực tiếp. Nó được nạp tự động vào context mỗi phiên, theo thứ tự từ phạm vi rộng đến hẹp. Claude Code đọc nhiều cấp CLAUDE.md, hợp nhất chúng lại:

CấpVị tríDùng cho
Managed policyDo tổ chức/quản trị cấu hìnhChính sách áp cho toàn máy/team
User~/.claude/CLAUDE.mdSở thích cá nhân, áp cho mọi dự án
Project./CLAUDE.mdQuy ước dự án, commit vào git để cả team dùng
Local./CLAUDE.local.mdGhi chú riêng, không commit

Thứ tự nạp broad→specific nghĩa là cấp hẹp hơn (project, local) có thể bổ sung cho cấp rộng hơn. Cách nhanh nhất để bắt đầu: chạy /init - Claude Code sẽ quét codebase và tự dựng một CLAUDE.md khung cho dự án.

/init

Viết CLAUDE.md hiệu quả: giữ nó ngắn - dưới ~200 dòng. File dài hơn không chỉ tốn context mỗi phiên mà còn làm giảm mức tuân thủ (Claude khó ưu tiên khi có quá nhiều lệnh). Viết cụ thể, verify được: "dùng 2-space indent" tốt hơn "format cho đẹp". Với nội dung dài, dùng @path để import file khác, và đặt quy ước theo ngữ cảnh vào .claude/rules/ path-scoped (chỉ nạp khi bạn mở file khớp glob) để tiết kiệm context. Muốn đào sâu cách cấu trúc file này, xem hướng dẫn viết file CLAUDE.md chuẩn - spoke đó sở hữu chi tiết, ở đây mình không lặp lại.

Auto memory - khi Claude tự ghi nhớ qua từng phiên

Đây là surface tương đối mới (2026) mà nhiều bài tiếng Việt cũ bỏ qua. Ngoài CLAUDE.md bạn viết, Claude Code có thể tự lưu những gì nó học được trong lúc làm việc vào một thư mục memory riêng của dự án, đại loại ~/.claude/projects/<project>/memory/.

Trong đó, MEMORY.md đóng vai index và được nạp một phần đầu file vào mỗi phiên; các topic file khác chỉ nạp on-demand khi cần. Bạn quản lý tính năng này qua lệnh /memory (bật/tắt qua tùy chọn autoMemoryEnabled), và sẽ thấy thông báo kiểu "Saved N memories" / "Recalled N memories" khi Claude ghi hoặc gọi lại learnings.

/memory

Phân biệt cho rõ: CLAUDE.md là bạn viết (instructions - cách bạn muốn Claude làm việc), còn auto memory là Claude viết (learnings - những gì nó rút ra được). Hai cái bổ trợ nhau. Cơ chế auto memory và giới hạn nạp được nêu trong tài liệu memory chính thức của Claude Code (truy cập 09/08/2026).

Token budget - làm việc rẻ và bền hơn

Đây là phần đối thủ tiếng Việt gần như bỏ trống. Các model đời mới context-aware: chúng tự theo dõi lượng token còn lại và tự động trả lời gọn hơn, dùng tool tiết kiệm hơn khi context sắp cạn. Nhưng đừng phó mặc - sáu quy tắc dưới đây giúp phiên của bạn vừa rẻ vừa ổn định:

#Quy tắcVì sao
1/compact ở ~60%, không đợi 90%Tóm tắt sớm chất lượng cao hơn, ít mất mát
2Giới hạn 1 phiên < ~120k input tokensPhiên quá dài dễ nhiễu và tốn kém
3Delegate việc đọc nặng sang subagentSubagent có context riêng, không "ăn" context chính
4Task chunking - chia phaseMỗi phase một phiên gọn, dễ compact/clear
5Giữ CLAUDE.md gọnTiết kiệm token nạp MỖI phiên
6Dùng comment HTML trong CLAUDE.md cho ghi chú ngườiComment bị strip khỏi context, không tốn token

Quy tắc số 3 đáng nhấn mạnh: khi cần Claude đọc một thư mục lớn hay cả log dài, hãy giao cho subagent thay vì đọc thẳng trong phiên chính. Subagent làm việc trong context tách biệt rồi chỉ trả về kết luận - context chính của bạn nhẹ nguyên. Cách tổ chức việc này được nói kỹ trong bài dùng subagents để tách context. Với comment ở quy tắc 6, ghi chú cho người trong CLAUDE.md đặt trong cặp dấu <!-- --> sẽ không lọt vào context Claude, giúp bạn chú thích thoải mái mà không tốn token.

Quy trình quản lý context & memory (checklist thực chiến)

Gộp tất cả lại thành một quy trình sáu bước bạn có thể chạy mỗi ngày:

  1. Dựng CLAUDE.md: chạy /init để tạo file khung từ codebase.
  2. Tinh gọn CLAUDE.md: giữ dưới 200 dòng, viết cụ thể, verify được; tách quy ước ngữ cảnh vào .claude/rules/.
  3. Theo dõi:/context định kỳ khi phiên dài, để mắt tới % token trên status line.
  4. Nén sớm: /compact ở quanh 60%, kèm hướng dẫn giữ gì (ví dụ giữ quyết định + file đã sửa).
  5. Reset khi đổi việc: /clear khi chuyển sang task khác không liên quan.
  6. Chốt quyết định: dặn Claude "cập nhật CLAUDE.md với quyết định này" trước khi nén hoặc kết phiên, để không mất qua compaction.

Tăng tốc bằng bộ kit dựng sẵn (AgentKit)

Viết CLAUDE.md, .claude/rules/ và cấu hình subagent tử tế cho từng dự án tốn kha khá thời gian. Nếu muốn đi nhanh, một số bộ kit như bộ kit AgentKit (giảm 20% qua link) đóng gói sẵn CLAUDE.md/rules mẫu cùng các subagent có context riêng - hợp với chính các nguyên tắc token budget ở trên. Mình có một bài xem kỹ AgentKit là gì và có đáng dùng không nếu bạn muốn cân nhắc; còn về quản context thì các lệnh /context, /compact, /clear ở trên vẫn là nền tảng dù bạn có dùng kit hay không.

Lỗi thường gặp & cách tránh

Trung thực mà nói, đây là những chỗ mình và nhiều người vấp phải nhất:

  • Mất quyết định sau /compact: vì chỉ nói trong chat, chưa ghi ra file → luôn ghi quyết định quan trọng vào CLAUDE.md trước khi nén.
  • CLAUDE.md phình to: file quá dài vừa tốn token vừa làm giảm mức tuân thủ → tách bớt sang .claude/rules/ path-scoped.
  • Rule/nested CLAUDE.md không tự reload sau compact: path-scoped rule và CLAUDE.md thư mục con không tự nạp lại → mở lại file khớp glob để kích hoạt.
  • Instruction mâu thuẫn giữa nhiều CLAUDE.md: khi các cấp dặn ngược nhau, Claude có thể chọn không như ý → rà soát cho nhất quán giữa user/project/local.

Nếu bạn gặp thêm các trục trặc khác, xem tổng hợp khắc phục lỗi Claude Code thường gặp. Và để hiểu bức tranh rộng hơn về cách Claude Code ghép các mảnh lại, tham khảo bài phân biệt skills, subagents, hooks và MCP.

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

/compact khác /clear thế nào?

/compact nén hội thoại thành tóm tắt cô đọng và giữ mạch việc - dùng khi bạn tiếp tục cùng một task nhưng context đầy. /clear xóa hẳn hội thoại và bắt đầu context trống - dùng khi bạn chuyển sang task khác. Cả hai đều vẫn nạp lại CLAUDE.md và auto memory.

Auto-compact kích hoạt ở bao nhiêu %?

Theo tài liệu chính thức, auto-compact tự chạy khi context dùng quanh mức 80-83%. Tuy vậy nên chủ động /compact sớm hơn, khoảng 60%, để bản tóm tắt chất lượng cao hơn và ít mất mát hơn. Ngưỡng chính xác có thể đổi theo phiên bản.

CLAUDE.md có sống sót sau /compact không?

Có. CLAUDE.md ở gốc dự án được re-inject từ đĩa nên luôn còn sau khi nén. Nhưng nested CLAUDE.md ở thư mục con và các rule path-scoped thì không tự reload - cần mở lại file khớp để kích hoạt.

Nên /compact khi nào?

Chủ động khi context dùng quanh 60%, đừng đợi tới 90%. Nén sớm khi hội thoại còn "sạch" cho tóm tắt tốt hơn. Nên kèm hướng dẫn, ví dụ /compact giữ quyết định về schema và file đã sửa, để Claude giữ đúng thứ bạn cần.

Auto memory lưu ở đâu?

Claude Code lưu learnings vào thư mục memory riêng của dự án (đại loại ~/.claude/projects/<project>/memory/), với MEMORY.md làm index được nạp một phần đầu file mỗi phiên. Bạn bật/tắt và xem qua lệnh /memory. Đường dẫn cụ thể nên kiểm tra live theo phiên bản.

Làm sao giảm token trong Claude Code?

Nén sớm bằng /compact ở ~60%, giữ CLAUDE.md gọn (< 200 dòng), delegate việc đọc nặng sang subagent để không ăn context chính, chia task thành phase, và /clear khi đổi việc. Đó là các đòn bẩy token budget hiệu quả nhất.

Kết luận + bước tiếp theo

Quy trình gói gọn một dòng: đo bằng /context → nén sớm bằng /compact ở ~60% → /clear khi đổi task → chốt quyết định vào CLAUDE.md, và để auto memory lo phần learnings. Nắm được ba mảnh context, memory và token budget, phiên dài của bạn sẽ hết cảnh "quên" và bớt tốn token rõ rệt. Bước tiếp theo: học cách viết file CLAUDE.md chuẩn để memory của bạn thật sự đắt giá, và tìm hiểu sâu hơn về context engineering là gì khi bạn muốn tối ưu ở tầm kiến trúc.

J

Jasmine

Tác giả · Jasmine Daily

Người viết nên Jasmine Daily - ghi lại những suy nghĩ, trải nghiệm và những khoảnh khắc đời thường. Thật lòng, không vội vàng, không hoàn hảo.

Jasmine Daily

Vẫn còn nhiều điều đang chờ được đọc.

Nếu bài viết này chạm đến bạn, hãy ghé xem thêm vài trang khác trong cuốn nhật ký này.

Đọc tiếp

Bài viết liên quan