Mục tiêu học tập
Sau bài này, bạn sẽ có thể:- ✅ Giải thích context window là gì và tại sao nó là tài nguyên quan trọng nhất khi dùng Claude Code
- ✅ Phân biệt khi nào nên dùng /compact và khi nào nên dùng /clear
- ✅ Đọc kết quả lệnh /context để biết phần nào đang chiếm chỗ trong bộ nhớ làm việc
- ✅ Áp dụng 5 chiến thuật tiết kiệm context: prompt cụ thể, CLAUDE.md, subagent, skill, MCP cleanup
- ✅ Tránh được 4 anti-patterns thường gặp khiến context “phình to vô tội vạ”
Mở đầu: Khi Claude bắt đầu “quên” giữa chừng
Hãy tưởng tượng bạn là một backend engineer đang debug một bug authentication phức tạp. Bạn mở Claude Code, kể bối cảnh, share file auth.ts, share log lỗi, share schema database. Claude đọc, tìm hiểu, đề xuất hướng fix. Bạn approve. Claude bắt đầu sửa. 30 phút sau, sau khi đã đọc 18 file, chạy 12 lệnh test, gọi 4 lần web search để tra cứu library docs — Claude bỗng dừng lại và nói:“Tôi đang nén lại cuộc hội thoại để giải phóng context window…”Vài giây sau, Claude tiếp tục — nhưng bạn nhận ra nó “quên” mất chi tiết bạn nói lúc đầu rằng JWT secret được rotate mỗi 7 ngày. Claude lại đề xuất một fix mà bỏ qua chi tiết đó. Bạn phải nhắc lại. Mất 5 phút. Tệ hơn nữa: Bạn chuyển sang task khác — implement một feature notification mới — nhưng bug auth vẫn còn trong context. Claude bị “ám” bởi authentication patterns, đề xuất một solution overly defensive với try-catch khắp nơi như đang sợ JWT lại bị rotate. Cả hai vấn đề trên đều xuất phát từ một gốc rễ: bạn chưa quản lý context window đúng cách. Context không phải là vô hạn. Nó là tài nguyên quý nhất khi làm việc với Claude Code — và nếu bạn không chủ động quản lý, nó sẽ tự “hết” và Claude sẽ bắt đầu “quên” hoặc “lệch hướng” theo những cách khó dự đoán. Bài này sẽ dạy bạn 3 thứ: (1) hiểu context window dưới capot, (2) biết khi nào dùng /compact vs /clear vs /context, và (3) áp dụng 5 chiến thuật tiết kiệm context để session của bạn dài và mượt hơn.
Context window là gì?
Context window là toàn bộ “bộ nhớ làm việc” mà Claude có thể nhìn thấy tại một thời điểm. Mỗi tin nhắn bạn gõ, mỗi file Claude đọc, mỗi kết quả của tool call (bash command, web search, grep, edit) — tất cả đều được nhồi vào cái “túi context” này. Trên các model Anthropic hiện tại, context window mặc định là 200.000 token (~150.000 từ tiếng Anh, hoặc ~80-100 file mã nguồn cỡ trung bình). Nghe nhiều, nhưng tiêu rất nhanh.Context window dưới góc nhìn dev
Mọi thứ bên trong “túi” đều là đầu vào cho lần inference tiếp theo của model. Đầu vào càng dài → mỗi câu trả lời càng đắt (về tiền) và càng chậm (về thời gian). Quan trọng hơn: khi gần đầy, model bắt đầu “loãng” attention — chi tiết nằm xa ở đầu hội thoại bị Claude xao lãng.Phép so sánh dễ nhớ
Phép so sánh thứ 4 chuẩn nhất cho thực tế bạn sẽ thấy.
Chuyện gì xảy ra khi context “đầy”?
Khi context window gần chạm trần (~ 80% hoặc khi tool call kế tiếp sẽ vượt giới hạn), Claude Code tự động kích hoạt compaction. Đây là một quá trình:- Claude đọc lại toàn bộ cuộc hội thoại và tool results đã có
- Tóm tắt các điểm quan trọng (decisions, file đang sửa, blockers, các giả định đã thiết lập)
- Vứt bỏ các tool result chi tiết không còn cần thiết (ví dụ: nội dung file mà giờ không liên quan, kết quả grep cũ)
- Thay thế phần đã vứt bằng đoạn tóm tắt
- Tiếp tục cuộc hội thoại từ điểm hiện tại
3 lệnh cốt lõi
Claude Code cho bạn 3 lệnh để cầm cương context: Cả 3 đều gõ trong terminal session của Claude Code (với prefix /). Hãy đi từng cái./context — chẩn đoán trước khi quyết định
Lệnh này hiển thị một bảng phân tích context đang chiếm bao nhiêu, chia theo category:/compact — nén thông minh, giữ ký ức
Khi bạn vẫn đang làm dở task hiện tại nhưng context gần đầy:/clear — xóa sạch, bắt đầu lại
Khi bạn xong feature A và chuyển qua feature B hoàn toàn khác:- System prompt của Claude Code
- CLAUDE.md (project + user + nested)
- MCP tool definitions (vẫn ở đó)
- Skills definitions (chỉ name + description, chưa load full)
Bảng so sánh quyết định: /compact vs /clear vs Auto-compact
Quy tắc vàng: Đừng để auto-compact tự kích hoạt. Cứ mỗi 30-45 phút làm việc, gõ /context xem trạng thái. Quyết định chủ động giữa /compact (nếu còn task dở) hoặc /clear (nếu đổi task).
Ví dụ thực chiến: Một ngày làm dev với context-aware Claude Code
Tình huống
Bạn là full-stack developer ở một fintech startup. Sáng thứ Ba bạn có 3 việc:- Fix bug — webhook payment đang gửi notification 2 lần
- Implement — feature export báo cáo CSV cho admin dashboard
- Review — PR của teammate về module KYC
9:00 — Bắt đầu fix webhook bug
“Webhook handler tại src/webhooks/payment.ts đang gửi notifyUser() 2 lần khi nhận event payment.success. Tôi nghi ngờ có duplicate registration trong webhookRouter.ts. Đọc 2 file này, kiểm tra log gần nhất ở logs/webhook-2026-04-19.log (chỉ 50 dòng cuối là đủ), và đề xuất fix.”Claude đọc 3 file, tìm ra: webhookRouter.ts đăng ký handler ở cả setup function lẫn middleware chain. Sau 25 phút, fix xong, test pass. Context check:
10:30 — Chuyển sang feature CSV export
Đây là task hoàn toàn mới. Không liên quan gì webhook, payment, log file. Nếu giữ context cũ:- Claude vẫn “nhớ” file webhookRouter.ts → có thể đề xuất design solution cho CSV theo pattern của webhook handler (không liên quan)
- Tốn 38k token cho không gì cả
11:30 — Review PR KYC của teammate
Đây lại là task khác hoàn toàn. Hơn nữa, bạn không muốn context của 2 task trước “bias” cách review.Kết quả
3 task hoàn thành trong sáng thứ Ba. Không lần nào auto-compact kích hoạt. Không lần nào Claude “quên” giữa chừng. Tổng tiêu thụ token chia đều, không có session nào phình quá 90k. So với cách làm “cứ chạy không quản lý”: Cách cũ: Một session liên tục, ~3 tiếng → context lên 180k → auto-compact 2 lần → mất chi tiết về security constraints → buổi chiều phải sửa lỗi do Claude “quên”. Cách mới: 3 session quản lý, mỗi session focus → 0 lần mất ngữ cảnh, code chất lượng cao hơn.5 chiến thuật tiết kiệm context
Quản lý compact/clear là phòng thủ. Còn 5 chiến thuật chủ động dưới đây giúp bạn dùng ít context hơn từ đầu.Chiến thuật 1: Be specific (prompt cụ thể tiết kiệm context)
Đây là điều phản trực giác nhất. Nhiều người nghĩ prompt ngắn = tiết kiệm. Sai. Prompt mơ hồ:- Đọc src/auth/* (10+ file) để hiểu architecture
- Grep “auth” trong toàn project (50+ matches)
- Đọc tests/auth/* để tìm xem bug “ý là gì”
- Hỏi lại bạn (hoặc tệ hơn: đoán sai và làm lệch)
- Đọc 1 file (login.ts), 1 test file
- Sửa, test, xong
Chiến thuật 2: Đẩy ngữ cảnh thường dùng vào CLAUDE.md
Mỗi lần bạn phải nhắc Claude:- “Project này dùng pnpm, không phải npm”
- “Test command là pnpm test —run, không phải pnpm test”
- “Database migration ở db/migrations/, không tự sinh ở chỗ khác”
- “Dùng named export, không default export”
Chiến thuật 3: Subagent — outsource exploration
Khi bạn cần thông tin “chỉ một câu trả lời”:“Authentication endpoint đang nằm ở đâu trong codebase?""File nào đang dùng deprecated function oldFn()?""Tìm tất cả TODO trong project, group theo module.”Đây là task read-heavy, kết quả read-light (chỉ 1 đoạn answer). Đừng để main context phải “thấm” 50 file vừa đọc. Spawn subagent:
Chiến thuật 4: Skills thay vì hardcode trong CLAUDE.md
CLAUDE.md load mọi lúc — bất kể bạn đang làm gì. Nếu CLAUDE.md có 200 dòng về “PR review checklist”, “commit message format”, “code review standards” — toàn bộ 200 dòng đó vẫn ngồi trong context khi bạn debug bug runtime hoàn toàn không liên quan. Skills (xem Bài 2.9) load on-demand — Claude đọc tên + description, chỉ load full khi nó match request của bạn. PR review checklist chỉ load khi bạn ask review, không load khi bạn debug. Quy tắc chuyển đổi:Chiến thuật 5: Dọn dẹp MCP servers không dùng
MCP servers (xem Bài 2.10) load toàn bộ tool definitions vào context, ngay cả khi bạn không dùng tool nào trong session đó. Mỗi MCP server có thể tốn 2-15k token chỉ cho định nghĩa tools. Có 5 server không relevant → mất 30k token vô nghĩa.Case studies — quản lý context theo role
🛠️ Backend Engineer — long feature development
Tình huống: Implement payment refund flow, ước tính 4-6 giờ, cần đọc 20+ file, sửa 8 file, viết 15 test cases. Cách dùng context:- Bắt đầu: prompt cực kỳ chi tiết (kèm spec, decision rationale, edge cases) → tiết kiệm 30k token “thám tử”
- Mỗi 1 giờ: gõ /context, nếu >60% → /compact
- Khi research dependency: spawn subagent để đọc docs library, không nhồi docs vào main context
- Khi xong và chuyển sang viết tests: /compact thêm lần nữa, tổng kết “đã implement xong A, B, C, giờ viết test cho từng cái”
📣 Product Designer ship code (designer-as-developer)
Tình huống: Bạn là Product Designer (không phải engineer hardcore), muốn tự ship 2% polish design (margin, color, animation) sau khi engineer handoff feature lớn. Cách dùng context:- /clear mỗi khi chuyển sang component khác
- CLAUDE.md project có sẵn design tokens (color, spacing, font scale) — dùng được ngay
- Skill /polish-design đã pre-built với checklist (contrast, hover state, focus ring)
- Subagent dùng để check accessibility (WCAG) — bạn không cần xem report dài
⚙️ DevOps Engineer — incident response
Tình huống: Production alert lúc 2h sáng. Cần hiểu nhanh: service nào down, log nói gì, fix tạm thế nào. Cách dùng context:- Prompt cực ngắn nhưng cực cụ thể: “Service payments-api đang return 503. Đọc logs/payments-api/2026-04-19/*.log 1000 dòng cuối. Tìm error patterns. Trả về top 3 root cause khả thi.”
- Subagent đọc log (vài MB) — main context không bị nhồi log
- Khi quyết định fix: /clear, prompt fresh “Apply hotfix: tăng connection pool size từ 10 → 25 trong config/db.yaml. Deploy.”
- Sau khi service recover: /clear, viết postmortem từ subagent’s findings
🎓 CS Student học một codebase mới
Tình huống: Open-source contributor lần đầu vào một dự án 200k LOC. Muốn hiểu kiến trúc trước khi đề xuất PR. Cách dùng context:- KHÔNG đọc tất cả file (sẽ ngốn 150k+ token, không học được gì)
- Spawn 4 subagents song song, mỗi cái explore một module: auth, api-routing, db-layer, frontend
- Mỗi subagent trả về 1 trang summary của module đó
- Main context: tập hợp 4 summary → ~10k token → có cái nhìn toàn cảnh
Anti-patterns — Những sai lầm hủy context
❌ Anti-pattern 1: “Just keep going” — không bao giờ compact/clear
Triệu chứng: Session 4 tiếng không gõ /context lần nào. Auto-compact nhảy 3 lần. Claude bắt đầu đề xuất giải pháp lệch lạc. Tại sao tệ: Auto-compact mất nuance. Mỗi lần auto-compact = 1 lần Claude “quên” thêm chi tiết. Cộng dồn 3 lần → coi như Claude bị mất trí nhớ ngắn hạn. Cách đúng: Cứ 30-45 phút gõ /context. Quyết định: nếu còn task dở → /compact. Nếu chuyển task → /clear.❌ Anti-pattern 2: “Tải tất cả file để Claude hiểu”
Triệu chứng: Bắt đầu session bằng “đọc toàn bộ src/, tests/, docs/ để hiểu project.” Tại sao tệ: Project 1000+ file → 500k+ token → không vừa context. Claude sẽ chỉ đọc subset (random hoặc theo glob), nhưng bạn đã tốn sạch context cho việc “thấm” mơ hồ. Cách đúng:- Để CLAUDE.md mô tả high-level architecture
- Khi cần hiểu sâu module nào → spawn subagent explore module đó
- Đừng bao giờ ask Claude “đọc toàn bộ project”
❌ Anti-pattern 3: Mix nhiều task khác nhau trong cùng 1 session
Triệu chứng: Trong 1 session bạn vừa fix bug auth, vừa implement feature notification, vừa refactor database layer. Mỗi task đẩy thêm 30-50k token. Tại sao tệ: Context loãng. Claude bị “ám” bởi auth khi bạn đang refactor DB. Đề xuất design pattern không phù hợp. Cách đúng: Một session = một task tập trung. Xong → /clear → task tiếp.❌ Anti-pattern 4: Bật mọi MCP server “phòng khi cần”
Triệu chứng: /mcp show 12 server connected. Tổng MCP overhead 50k token. Bạn chỉ thực sự dùng 2 server / session. Tại sao tệ: 50k token = 25% context window đã mất trước khi gõ prompt đầu tiên. Cách đúng:- Dùng claude mcp để cấu hình per-project (file .mcp.json)
- Mỗi project chỉ enable MCP server thực sự cần
- Disable rộng rãi: thà cài lại khi cần còn hơn để context bị ăn mòn
❌ Anti-pattern 5: Dùng /clear khi đang dở task quan trọng
Triệu chứng: Đang implement feature 3 tiếng, gõ /clear vì context cao → mất hết quyết định, file đang sửa, edge case đã thảo luận. Tại sao tệ: /clear không thương tiếc. Bạn sẽ phải brief lại Claude từ đầu — tốn nhiều thời gian hơn cả compact. Cách đúng: Đang dở task = /compact, không bao giờ /clear. Chỉ /clear khi thực sự xong task hoặc đổi task hoàn toàn.Mẹo nâng cao
Mẹo 1: Pin quan trọng vào CLAUDE.md trước khi /compact
Nếu bạn vừa thiết lập một quyết định quan trọng và sắp /compact, đảm bảo decision đó được “pin”:Mẹo 2: Dùng # shortcut cho memory
Trong khi Claude đang làm, gõ # rồi nhập note:Mẹo 3: Multi-session cho task song song
Thay vì gộp 2 task vào 1 session (dùng nhiều context):Mẹo 4: Estimate context trước khi prompt
Trước khi prompt task lớn, ước lượng:- Task có cần đọc bao nhiêu file? Mỗi file ~500-2000 token.
- Có grep/search không? Mỗi grep toàn project ~1-3k token kết quả.
- Có web search không? Mỗi search ~2-5k token nội dung trang.
- Có chạy test suite không? Output có thể 5-50k token.
Áp dụng ngay
Bài tập 1: Audit context trong session hiện tại (~10 phút)
Mở Claude Code trong một project bạn quen, làm 1 task vừa phải (15-30 phút làm việc), sau đó: Bước 1: Gõ /context. Ghi lại:- Tổng % context đã dùng: _________
- Category nào chiếm nhiều nhất: _________
- MCP có vượt 10% không: _________
- ☐ Có MCP server không dùng → disable
- ☐ Có CLAUDE.md quá dài → trim những thứ không lặp lại
- ☐ Có conversation cũ không relevant → /compact
- Trước: _____ token
- Sau: _____ token
- Tiết kiệm: _____ token
Bài tập 2: Workflow /compact vs /clear (~15 phút)
Trong 1 sáng làm việc: Bước 1: Trước khi mở Claude, list 3 task khác nhau bạn cần làm. Bước 2: Bắt đầu task 1. Khi xong: Quyết định: task 2 có liên quan task 1 không?- Có liên quan → /compact
- Không liên quan → /clear
- Số lần /compact: _____
- Số lần /clear: _____
- Số lần auto-compact tự kích hoạt: _____ (mục tiêu: 0)
Bài tập 3 (nâng cao): Design context budget cho 1 task lớn
Chọn 1 task lớn sắp tới (~3-5 giờ). Trước khi bắt đầu, viết “context budget”:Tóm tắt bài học
🎯 Context là tài nguyên giới hạn 200k token — mọi prompt, file read, tool call đều ăn vào nó. Quản lý chủ động > phó mặc auto-compact. 🎯 3 lệnh phải thuộc: /context (chẩn đoán) → /compact (nén, giữ task hiện tại) → /clear (reset hoàn toàn). 🎯 Quy tắc compact vs clear: Còn dở task → /compact. Đổi task → /clear. Đừng nhầm — nhầm /clear khi đang dở thì mất rất nhiều thời gian rebrief. 🎯 Be specific tiết kiệm context. Một prompt chi tiết 50 từ có thể tiết kiệm 20k token mà Claude phải tốn để đoán ý bạn. 🎯 5 chiến thuật giảm context: prompt cụ thể → CLAUDE.md cho repeat → subagent cho exploration → skill thay CLAUDE.md cho task-specific → tắt MCP không dùng.Bài tiếp theo
Bạn đã biết cách quản lý context khi đang làm việc. Nhưng còn cách prevent việc phải repeat ngữ cảnh mỗi session — đó là dùng CLAUDE.md để Claude tự nhớ giữa các session. Bài 2.7 sẽ đi sâu vào file CLAUDE.md: cấu trúc nên có gì, hierarchy 3 cấp (project/user/nested), khi nào nên /init, và những anti-pattern thường gặp khi viết CLAUDE.md. Trước đó, Bài 2.6 sẽ giải quyết một topic mà bạn đã thoáng gặp ở Bài 2.4: dùng subagent để code review trước khi commit, kết hợp với GitHub Actions để Claude tự fix PR comments. ➡️ Bài tiếp theo: Bài 2.6 — Code review và Git workflowTài liệu tham khảo
- Claude Code best practices — Anthropic engineering blog
- Anatomy of context window — Official docs
- Lệnh trong session: /context, /compact, /clear, /mcp — gõ trực tiếp trong Claude Code
- Transcript “A conversation on Claude Code” — Boris Cherny & team Anthropic về philosophy memory mode (# shortcut)