Why long Claude Code sessions burn usage: reading /usage and the prompt cache line
TL;DR
Every request resends the whole conversation, so long sessions make each question pricier, plus cache misses after breaks, background loops, subagents and compaction. Use /usage for cache stats and tips, and /clear when switching tasks.
Bạn để một phiên Claude Code mở từ sáng, chỉ hỏi vài câu ngắn buổi chiều, vậy mà thanh hạn mức của gói Pro/Max tụt nhanh bất thường. Không phải lỗi tính tiền: tài liệu chính thức của Claude Code có hẳn một mục giải thích vì sao phiên dài ngốn usage nhiều hơn hoạt động bạn thấy. Hiểu cơ chế này giúp bạn biết lúc nào nên dọn phiên, và đọc đúng các con số trong /usage.
Cơ chế gốc: mỗi request gửi lại toàn bộ hội thoại
Model không "nhớ" giữa các request. Claude Code gửi lại toàn bộ hội thoại mỗi lần, và mỗi lần Claude dùng tool lại thêm một request mang theo kết quả tool. Prompt caching giúp phần lịch sử được đọc lại với giá cache (rẻ hơn nhiều), nhưng không phải miễn phí. Vì vậy một câu hỏi một dòng trong phiên cả ngày vẫn kéo usage cho cả hội thoại.
Bảy nguyên nhân khiến usage leo thang
| Nguyên nhân | Điều gì xảy ra | Cách xử lý |
|---|---|---|
| Context dài | Mọi lịch sử đi kèm mỗi request | /clear khi đổi việc |
| Cache miss sau khi nghỉ | Tin nhắn đầu tiên sau khi quá thời gian sống của cache phải xử lý lại toàn bộ context với giá đầy đủ | Clear trước khi đi họp/nghỉ trưa, hoặc compact trước khi rời máy |
Tác vụ lặp lịch (/loop…) | Chạy theo chu kỳ kể cả khi phiên đang rảnh, mỗi lần gửi cả context | Tắt loop không cần; xem dòng Loops trong /usage |
| Tin nhắn từ phiên khác | Được giao như một lượt mới khi phiên rảnh | Đặt crossSessionInbound = hold |
| Goal check-in | Claude tự kiểm tra tiến độ việc chạy nền, tối đa 3 lần mỗi goal giữa các prompt | CLAUDE_CODE_GOAL_CHECKIN_MINUTES=0 để tắt |
| Subagent và workflow | Mỗi agent con gửi request riêng | Dùng model nhỏ cho subagent |
| Compaction | /compact đọc toàn bộ hội thoại để tóm tắt: bản thân là request lớn | Muốn bắt đầu lại thì dùng /clear (không tốn gì) |
Đọc dòng "Prompt cache" trong /usage
Từ các bản gần đây, khối Session trong /usage có dòng thống kê cache của hội thoại chính, đại ý:
Prompt cache (main): 14 requests · 91% of input tokens from cache
· 2 misses · 1 expected rebuild · warm (1h TTL, last activity 40s ago)
- % from cache: càng cao càng rẻ. Tỉ lệ thấp kéo dài là dấu hiệu có thứ gì đó liên tục phá cache.
- Misses: request phải xử lý lại nội dung lẽ ra đã có trong cache. Bản mới còn ghi nguyên nhân khả dĩ, ví dụ "tool definitions changed" (bật/tắt MCP server giữa phiên sẽ gây ra điều này).
- Expected rebuild: miss do chính Claude Code viết lại hội thoại (compact, xoá kết quả tool cũ), là bình thường.
- Warm/cold: cache còn sống hay đã hết hạn. Đang "cold" mà gửi tin nhắn tiếp là chấp nhận một lần xử lý lại đầy đủ.
Phần gợi ý và phím f
Trên gói Pro, Max, Team, Enterprise, /usage còn có phần Attribution (phần trăm usage theo skill, subagent, plugin, từng MCP server) và Recommendations: mỗi dòng là một hành vi chiếm từ 10% usage gần đây, kèm gợi ý, ví dụ cắt bớt một CLAUDE.md đang tốn hàng chục nghìn token mỗi request, hay hạ effort. Con số phần trăm cho biết gợi ý áp dụng cho bao nhiêu usage, không phải tiết kiệm được bao nhiêu. Khi footer hiện gợi ý như f to fix 2 of 3, nhấn f để Claude Code tự áp dụng những gợi ý nó làm được (đổi effort chạy ngay; các thay đổi file sẽ được trình bày cho bạn duyệt trước). Nhấn d/w để đổi giữa 24 giờ và 7 ngày.
Phân biệt các loại "chạm trần"
- "You've hit your session/weekly limit": hết hạn mức theo cửa sổ thời gian của gói, dùng chung cho mọi model. Đổi model không giải quyết được.
- "You've hit your Opus/Sonnet limit": hết hạn mức riêng của một dòng model; chuyển sang model khác bằng
/modelvẫn làm tiếp được. - Cảnh báo context/auto-compact: không phải giới hạn usage, chỉ là hội thoại sắp đầy cửa sổ context.
Áp dụng thế nào?
- Dev: Tạo thói quen "rời máy thì clear hoặc compact". Mở
/usagemỗi cuối ngày trong một tuần để biết hành vi nào đang tốn nhất. - Tech Lead: Rà các
/loopvà tác vụ lặp lịch chạy trong phiên, vì đây là nguồn tốn "vô hình" phổ biến. Tránh bật/tắt MCP server giữa phiên. - PM / Admin: Khi dev than "hết quota", hỏi đúng thông báo họ thấy để phân biệt hết hạn mức gói, hết spend limit hay chỉ là cảnh báo context.
Sources & references
- Manage costs effectively — Claude Code Docs