Context compaction trong Claude Code là quá trình nén conversation history khi context window gân đầy. Claude Code xoá tool outputs cû̃ trước, rồi tóm tắt toàn bộ conversation nếu cần. Mục tiêu: giữ thông tin quan trọng, loại bỏ data thừa, không làm gián đoạn workflow.
Claude Code auto-compact khi context dùng khoảng 75% window (khoảng 150K/200K tokens). Quá trình nén có nhiều tầng: xoá tool outputs cû̃ trước, giữ file reads lâu hơn bash outputs, rồi mới summary toàn bộ conversation. Bạn kiểm soát được gì được giữ lại qua /compact focus on X và “Compact Instructions” trong CLAUDE.md. Xem thêm 10 mẹo tiết kiệm token.
trigger threshold
dành cho compaction
→ micro → full compact
context đang dùng gì
Nếu bạn đã dùng Claude Code quá 1 tuần, chắc bạn đã thấy dòng “Context left until auto-compact: X%.” Nhưng chuyện gì xảy ra khi con số đó về 0%? Và tại sao đôi khi compact xong, Claude lại “quên” những gì bạn nói ở đầu session?
Mình viết bài này sau khi mất nửa ngày debug một lỗi mà Claude đã fix trước đó 20 messages, nhưng sau compact, nó không còn nhớ. Hiểu cách compaction hoạt động bên trong sẽ giúp bạn tránh tình huống này. Nếu chưa biết Claude Code là gì, đọc bài hướng dẫn trước nhé.

Compaction Pipeline Hoạt Động Thế Nào?
Theo Claude Code Documentation (2026), khi context gần đầy, Claude Code không nén tất cả cùng lúc. Nó đi qua nhiều tầng, từ nhẹ đến nặng. Mỗi tầng loại bỏ một loại data khác nhau.
Tầng 1: Xoá tool outputs cû̃. Đây là bước đầu tiên và nhẹ nhất. Kết quả từ các lệnh bash, file reads, search results từ nhiều turns trước bị replace bằng placeholder. Bạn không mất conversation, chỉ mất raw data đã cû̃.
Tầng 2: Ưu tiên giữ file reads. Không phải tool output nào cû̃ng bị xóa như nhau. Kết quả từ read_file được giữ lâu hơn kết quả từ bash. Lý do: file content thường là context quan trọng cho các sửa đổi tiếp theo, còn bash output (nhû ls, git status) thường là transient.
Tầng 3: Full conversation summary. Nếu sau khi xoá tool outputs mà context vẫn quá lớn, Claude Code pause workflow, inject một yêu cầu summary vào conversation, và tạo bản tóm tắt. Requests và key code snippets được giữ lại. Chi tiết instructions từ đầu session có thể bị mất, đây là lý do bạn nên đặt rules quan trọng vào CLAUDE.md thay vì nói trong chat.
/compact vs Auto-Compact, Khác Nhau Thế Nào?
Hai cách compact, hai use cases khác nhau. Hiểu sai sẽ mất thông tin không đáng mất.
Auto-compact trigger tự động khi context dùng khoảng 75% window (ClaudeFast, 2026). Buffer còn lại (~33K tokens) dành cho quá trình summary. Bạn không kiểm soát được gì bị xóa, Claude tự quyết định.
/compact là manual command bạn gọi bất cứ lúc nào. Sức mạnh thực sự nằm ở option focus:
# Compact generic, Claude tự quyết giữ gì
/compact
# Compact có focus, bạn chỉ định giữ gì
/compact focus on the auth module changes and test results
# Compact cho blog writing
/compact focus on outline, draft content, and image URLs
# Compact cho debug session
/compact focus on error traces and attempted fixes
Mình luôn dùng /compact focus on X thay vì /compact không. Lý do: khi bạn nói rõ cần giữ gì, Claude không phải đoán, và không đoán sai.
Override threshold: Nếu muốn compact sớm hơn (hoặc muộn hơn), dùng biến môi trường:
# Compact sớm hơn (50% thay vì 75%)
export CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=50
# Compact muộn hơn (90%, rủi ro cao)
export CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=90
Làm Sao Kiểm Soát Gì Được Giữ Khi Compact?
Theo Claude Code Docs (2026), bạn có thể thêm section “Compact Instructions” vào CLAUDE.md để chỉ định gì luôn được giữ lại khi compact xảy ra, cả auto lẫn manual.
# CLAUDE.md, Ví dụ từ ongboit.com
## Compact Instructions
When compacting, always preserve:
- Current task objective and acceptance criteria
- File paths that have been modified this session
- Test results (pass/fail) from most recent run
- Blog outline and draft URLs if writing content
- Error messages being investigated
Mình thêm section này vào CLAUDE.md của ongboit.com sau khi bị mất outline giữa chù̀ng viết bài. Kể từ đó chưa bị lại lần nào. Cách này hiệu quả vì CLAUDE.md được đọc mỗi session và cached, nó không bị compact.
Thrashing Error Là Gì Và Fix Thế Nào?
Có một edge case ít ai biết: nếu một file hoặc tool output quá lớn khiến context đầy lại ngay sau compact, Claude Code sẽ dừng auto-compact và báo lỗi thay vì loop vô hạn (Claude Code Docs, 2026).
Dấu hiệu: bạn thấy “auto-compaction thrashing” error. Nguyên nhân thường là:
- Đọc file quá lớn (>50K tokens) vào context
- Paste nội dung lớn vào prompt
- Nhiều MCP servers active cùng lúc (tool descriptions chiếm context)
Cách fix: /clear để reset, rồi chỉ đọc phần file cần thiết thay vì toàn bộ. Hoặc tắt MCP servers không dùng, check bằng /mcp.
Làm Sao Biết Context Đang Dùng Bao Nhiêu?
Trước khi lo về compact, bạn cần biết context đang chiếm bao nhiêu và bởi cái gì. Lệnh /context cho bạn breakdown chi tiết.
# Xem context usage
/context
# Output dạng:
# System prompt: 12,000 tokens
# CLAUDE.md: 2,100 tokens
# Auto memory: 680 tokens
# Skill descriptions: 1,500 tokens
# MCP tool definitions: 3,200 tokens
# Conversation: 145,000 tokens
# Total: 164,480 / 200,000 (82%)
Từ output này, bạn biết ngay: MCP tool definitions đang chiếm 3.200 tokens mỗi message dù không dùng. /mcp để xem chi tiết từng server, disable cái không cần.
MCP tool definitions giờ đây được deferred by default, chỉ tên tool chiếm context cho đến khi Claude thực sự dùng tool đó (Claude Code Docs, 2026). Nhưng nhiều servers vẫn tốn token đáng kể cho tên + descriptions.
Nên Dùng Chiến Lược Compact Nào Cho Từng Use Case?
Không có một chiến lược compact phù hợp tất cả. Mình dùng 3 strategies khác nhau tùy task:
Debug session dài: Sau mỗi hypothesis đã test (dù pass hay fail), /compact focus on error traces and attempted fixes that failed. Giữ lại gì đã thử, loại bỏ stack traces cû̃.
Refactor lớn: Trước khi chuyển sang module tiếp theo, /compact focus on modified files list and test results. Không cần giữ code cũ, đã có trong file.
Blog writing: Trước khi viết section mới, /compact focus on outline, image URLs, and draft structure. Mình mất outline 2 lần trước khi học được trick này.
Hoặc đơn giản nhất: /clear giữa các tasks hoàn toàn khác nhau. Không cần compact, reset hẳn về 0. Bài tiết kiệm token giải thích chi tiết.
Câu Hỏi Thường Gặp
Auto-compact trigger ở bao nhiêu %?
Khoảng 75% context window (150K/200K tokens). Buffer còn lại (~33K tokens) dành cho quá trình summary. Override bằng CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=50 nếu muốn compact sớm hơn (Claude Code Docs, 2026).
/compact có mất thông tin không?
Có thể mất chi tiết nhỏ. Dùng /compact focus on X để chỉ rõ gì cần giữ. Thêm “Compact Instructions” vào CLAUDE.md cho auto-compact. Theo kinh nghiệm mình, compact giữ được 90%+ thông tin quan trọng nếu bạn hướng dẫn rõ.
/clear khác gì /compact?
/clear xóa sạch conversation, reset về 0. /compact nén nhưng giữ lại summary. Dùng /clear khi chuyển task hoàn toàn mới. Dùng /compact khi muốn tiếp tục task hiện tại nhưng context đã lớn. Xem 10 mẹo tiết kiệm token.
Thrashing error là gì?
Khi một file hoặc tool output quá lớn khiến context đầy lại ngay sau compact, Claude dừng và báo lỗi. Fix: /clear rồi đọc file nhỏ hơn, hoặc tắt MCP servers không dùng bằng /mcp.
Subagents có bị compact không?
Sub-agents có context riêng, tách biệt hoàn toàn. Khi subagent xong, chỉ summary ngắn quay về context chính. Đây là lý do subagents giúp session dài, chúng không làm phồng context.
Kết Luận
Ba điều cần nhớ về context compaction:
- Compact là pipeline nhiều tầng, tool outputs bị xoá trước, file reads giữ lâu hơn, conversation summary là bước cuối.
- Kiểm soát được,
/compact focus on X+ “Compact Instructions” trong CLAUDE.md. Không phái ngồi chó Claude tự quyết. - /context là bạn, biết context đang chiếm bao nhiêu, bởi cái gì, trước khi bị surprises.
Xem thêm Memory & Context để hiểu hệ thống bộ nhớ toàn diện hơn. Cần tối ưu chi phí? Đọc 10 mẹo tiết kiệm token. Muốn tự động hoá toàn bộ workflow? Xem Autonomous Agents và lộ trình đầy đủ để biết bước tiếp theo.
