- Đổi model mid-session là cache miss lập tức - toàn bộ lịch sử phải recompute từ đầu.
- Đội Claude Code xây 7 quyết định kiến trúc xung quanh việc bảo vệ cache, từ deferred tool loading đến fork-based compaction.
- Ba thói quen đơn giản giúp 95% người dùng tận dụng tối đa.
TL;DR
Switch model mid-session (kể cả "opusplan" mode) = cache miss ngay lập tức, toàn bộ context recompute.
Add MCP server hoặc chỉnh tool definitions là invalidate cache cho toàn bộ conversation history.
Đội Claude Code xây 7 quyết định kiến trúc để bảo vệ cache - không phải tips, mà là design decisions.
Ba thói quen thực tế: không dừng quá 1 giờ, handoff thay vì resume, dùng Projects cho big docs.
Những thứ âm thầm phá cache
Cache prefix matching hoạt động theo nguyên tắc giống autocomplete: bất kỳ sự thay đổi nào ở đầu chuỗi đều invalidate toàn bộ phần sau. Dưới đây là 5 tình huống thường gặp nhất:
1. Switch model giữa session: KV cache được tính riêng theo kiến trúc từng model. Opus, Sonnet, Haiku có weights khác nhau - KV cache của cùng một text không thể dùng chéo. Nếu bạn đang ở turn 50 với Opus và switch sang Sonnet để hỏi một câu đơn giản, Sonnet phải build cache từ đầu với zero cache hit.
2. "Opusplan" mode: Setting dùng Opus trong plan mode và Sonnet cho execution. Mỗi lần toggle plan là một lần switch model, một lần cache miss. Trong dài hạn vẫn có lợi cho session limits, nhưng hiểu rõ để không bị ngạc nhiên về chi phí.
3. Thêm MCP server hoặc reload plugin: Tool definitions nằm ở đầu tiên của prefix chain (thứ tự: tools → system → messages). Khi tool list thay đổi, toàn bộ system prompt và conversation history phía sau phải recompute. Claude Code thường đọc MCP config lúc session startup - những lúc nguy hiểm nhất là restart, resume, hoặc plugin reload.
4. Chỉnh CLAUDE.md mid-session: File này là project memory, nằm trong Project layer. Tuy nhiên có điều thú vị: chỉnh CLAUDE.md mid-session thực ra an toàn - edit không apply cho đến lần restart tiếp theo, nên live cache vẫn nguyên vẹn.
5. Idle quá lâu: Claude Code subscription TTL là 1 giờ. Nếu bạn dừng hơn 1 giờ, cache bay hết. Turn tiếp theo rebuild từ đầu với full cost.
7 quyết định kiến trúc của đội Claude Code
Thariq Shihipar, engineer trong đội Claude Code, đã chia sẻ 7 lessons từ quá trình build sản phẩm xung quanh prompt caching. Đây là architectural decisions, không phải tips:
1. Order prompt cho caching: Static content trước, dynamic content sau. System prompt của Claude Code được share globally - mọi user đều hit cùng cache. CLAUDE.md shared per project. Chỉ conversation là unique per session.
2. Dùng messages, không phải prompt edits: Khi data thay đổi (ngày giờ, file content, git status), không update system prompt - update system prompt là phá cache. Thay vào đó, inject thông tin mới vào <system-reminder> tag trong user message tiếp theo. Đây không phải quirk - đây là caching strategy được thiết kế có chủ ý.
3. Không switch model mid-session: Cache per-model. Dùng sub-agents cho side tasks cần model rẻ hơn - sub-agent chạy trong process riêng với cache riêng, không đụng đến main session.
4. Không add/remove tools mid-session: Tool definitions là phần đầu của cached prefix. Claude Code lock tool list lúc session startup, không cho phép MCP server register tool mới sau đó.
5. Design features quanh cache: Ví dụ điển hình là Plan Mode. Cách naive: swap tools - remove Edit/Bash, add PlanMode tool. Vấn đề: thay đổi tool definitions phá cache. Cách cache-aware: giữ nguyên tất cả tools, thêm EnterPlanMode và ExitPlanMode như 2 tool thêm, dùng user message để báo "bạn đang trong plan mode, đừng write files". Tool definitions không bao giờ thay đổi giữa các mode.
6. Defer tools thay vì remove: Claude Code có hàng chục MCP tools mà bạn không dùng hết trong mỗi session. Cách naive: chỉ include tools user cần - nhưng tool list khác nhau giữa các user, cache không thể share. Cách cache-aware: load stub definitions cho tất cả tools ngay từ đầu (chỉ có tên và một dòng mô tả). Khi cần tool cụ thể, gọi ToolSearch để fetch full JSON schema, append vào message - không phải tool definition change. Prefix giống nhau cho mọi user dù config MCP khác nhau.
7. Fork operations kế thừa prefix: Khi context window đầy, Claude Code compact conversation. Thay vì rebuild prompt mới (phá cache), compaction request dùng identical system prompt + tool definitions + CLAUDE.md từ parent session, chỉ append compaction instruction như một user message. KV cache của ~18K token system prompt + tools được reuse. Chi phí: $0.009 thay vì $0.09 - 10 lần rẻ hơn per compaction.
Ba thói quen thực tế cho 95% người dùng

1. Không dừng quá lâu: Idle hơn 1 giờ - cache bay hết, turn tiếp theo rebuild từ đầu. Nếu bạn biết mình sẽ nghỉ lâu, tốt hơn là handoff sang session mới thay vì resume session cũ.
2. Handoff thay vì resume stale session: /compact và /clear đều phá cache anyway. Thay vì dùng /compact (có thể mất vài phút), build một session handoff skill: yêu cầu Claude tóm tắt những gì đã build, open decisions, important files, và exactly where to pick back up. Sau đó /clear, paste summary, tiếp tục. Thường xong dưới 1 phút, không mất context quan trọng.
3. Dùng Projects cho big docs trên Claude.ai: Caching trên claude.ai web chat chưa được document chính thức, nhưng Projects rõ ràng được optimize khác với conversation thread thông thường. Nếu cần paste tài liệu lớn, cho vào Project thay vì paste trực tiếp vào chat.
Nguyên tắc tổng quát nhất: configure before you start, change less after you start. Quyết định model, MCP servers, Skills trước khi bắt đầu task dài. Giữ ổn định trong suốt quá trình làm.
Khi nào không nên dùng cache
Cache chỉ có lợi khi bạn đạt hơn 1.3 cache reads per write. Với API users, những workload sau thường không đáng cache:
Cron jobs mỗi 15-30 phút: TTL 5 phút của API, cache hết trước lần chạy tiếp. Mỗi invocation là một cache write mới.
Serverless functions với traffic thấp: Không có persistent process để giữ cache warm. < 2 requests per 5-minute window thường là lỗ.
Batch processing với gap lớn: Nếu xử lý từng document cách nhau hơn 5 phút, cache expire giữa các run.
Với những trường hợp này: request batching (gom 20 requests trong 30 giây = 1 write + 19 reads) hoặc keep-alive ping mỗi 4 phút nếu có persistent process.
Kết
Prompt caching không phải tính năng bạn bật lên và quên đi. Nó là ràng buộc kiến trúc mà mọi quyết định trong Claude Code đều được xây xung quanh. Hiểu cơ chế không phải để deep dive API - mà để không vô tình phá đi thứ đang làm việc cho bạn trong background.
Tóm lại 80/20: token cached rẻ hơn 10x, TTL là 1 giờ với Claude Code, model switch phá cache, handoff sạch tốt hơn resume stale.
via Thariq Shihipar qua Simon Willison - Claude Code Token-Saving Guide
