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.
- 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ạ"
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.
| Context window là... | Vì... |
|---|---|
| Bộ nhớ RAM của Claude | Mọi tool call, file read, prompt đều "load vào RAM" để model thấy |
| Whiteboard trong phòng họp | Viết kín → phải xoá bớt mới viết tiếp được |
| Túi đi chợ có giới hạn | Càng nhồi thứ không cần thiết, càng ít chỗ cho thứ quan trọng |
| Trí nhớ ngắn hạn của con người | Nhớ chi tiết ~7 phút trước rõ. Nhớ chi tiết 2 giờ trước thì mơ hồ |
┌────────────────────────────────────────────────────────────┐ │ CONTEXT WINDOW (200k tokens) │ ├────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ System prompt (Claude Code core) ~5k tokens │ │ │ ├──────────────────────────────────────────────────────┤ │ │ │ CLAUDE.md (project + user + nested) ~2-10k tokens │ │ │ ├──────────────────────────────────────────────────────┤ │ │ │ MCP server tool definitions ~5-30k tokens │ │ │ ├──────────────────────────────────────────────────────┤ │ │ │ Cuộc hội thoại + tool calls + results ... │ │ │ │ ↓ Nhồi xuống đây mỗi khi bạn prompt thêm │ │ │ │ ↓ Nhồi xuống đây mỗi khi Claude đọc file │ │ │ │ ↓ Nhồi xuống đây mỗi khi chạy bash/grep/web │ │ │ │ │ │ │ │ ↓ ↓ ↓ Lấp đầy theo thời gian ↓ ↓ ↓ │ │ │ │ │ │ │ └──────────────────────────────────────────────────────┘ │ │ │ │ Khi đầy ~80%: Auto-compact kích hoạt │ └────────────────────────────────────────────────────────────┘
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:
Vì vậy bạn không nên "phó mặc" cho auto-compact. Bạn nên chủ động quản lý.
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:
Đây là điểm khởi đầu của mọi quyết định. Đừng /compact hay /clear mù — gõ /context trước, nhìn xem cái gì đang phình to. Nếu MCP đang ăn 30%, có thể tắt vài server giúp ngay mà không phải compact.
/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:
- 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
┌─────────────┬────────────────────────────────────────────────┐ │ /context │ XEM — context đang dùng bao nhiêu, từ đâu │ ├─────────────┼────────────────────────────────────────────────┤ │ /compact │ TÓM — nén hội thoại, GIỮ tóm tắt bộ nhớ │ ├─────────────┼────────────────────────────────────────────────┤ │ /clear │ XÓA — về zero, KHÔNG giữ gì (trừ CLAUDE.md) │ └─────────────┴────────────────────────────────────────────────┘
Context usage: 142,300 / 200,000 tokens (71%)
Breakdown:
System prompt + Claude Code core ........ 5,200 (3.7%)
CLAUDE.md (project + user) .............. 4,100 (2.9%)
MCP server tool definitions ............ 18,500 (13.0%)
Conversation history ................... 67,400 (47.4%)
Tool call results ...................... 43,800 (30.8%)
Skills (loaded) ......................... 3,300 (2.3%)
⚠️ MCP tool definitions are using >10% of context.
Consider disabling unused servers with /mcp./compact — nén thông minh, giữ ký ức
Claude tóm tắt rồi tiếp tục. Bạn không mất "ký ức về task hiện tại", nhưng hội thoại gọn lại đáng kể.
Khi nào nên /compact: đang làm dở 1 feature, context >70%, vẫn cần ngữ cảnh để hoàn thành feature đó.
/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:
> /compact
Compacting conversation...
✓ Reduced from 142k → 38k tokens
✓ Summary: Currently implementing JWT refresh logic in auth/refresh.ts.
Decided to use sliding window (per user request, see Decision #3).
Tests in auth.test.ts updated for new flow. 2 tests still failing —
related to token expiry edge case.
Continue? Yes/clear — xóa sạch, bắt đầu lại
/clear xóa toàn bộ tool calls, hội thoại, mọi thứ trong session. Chỉ giữ:
Khi nào nên /clear: bắt đầu task mới hoàn toàn, không muốn task cũ "bias" task mới.
- 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)
> /clear
✓ Conversation cleared.
✓ CLAUDE.md re-loaded (project + user).
✓ Context: 9,300 / 200,000 tokens (4.7%)
>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).
| Tiêu chí | /compact | /clear | Auto-compact |
|---|---|---|---|
| Trigger | Bạn chủ động | Bạn chủ động | Hệ thống tự động khi gần đầy |
| Giữ tóm tắt task hiện tại | ✅ Có | ❌ Không | ✅ Có (nhưng có thể mất chi tiết) |
| Khi nào dùng | Đang dở task, cần tiếp tục | Xong task, đổi sang task khác | Bạn quên quản lý → fallback |
| Risk mất nuance | Thấp | Không applicable (xóa hết) | Trung bình → Cao |
| Token sau khi xong | ~20-40k | ~5-10k | ~60-100k |
| Tốt cho | Long feature dev session | Workflow nhiều task nhỏ | Bảo hiểm cuối cùng |
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:
Cả 3 việc khác nhau hoàn toàn. Đây là cách quản lý context xuyên suốt:
9:00 — Bắt đầu fix webhook bug
Bạn prompt cụ thể (nhớ nguyên tắc: prompt mơ hồ tốn nhiều context hơn prompt cụ thể):
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:
- 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
$ cd ~/work/payment-service
$ claude9:00 — Bắt đầu fix webhook bug
Còn rất nhiều chỗ. Không cần compact.
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ũ:
Quyết định: /clear
- 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ả
> /context
Context usage: 38,200 / 200,000 tokens (19%)10:30 — Chuyển sang feature CSV export
Claude bắt đầu fresh, không bị bias bởi pattern webhook. Sau 45 phút và vài lần Claude đọc test fixtures, bạn xong feature.
Context check:
> /clear
✓ Conversation cleared.
✓ Context: 9,300 / 200,000 tokens (4.7%)
> Implement feature export CSV cho trang admin/reports. Yêu cầu:
> - Endpoint: GET /api/admin/reports/export?type=transactions&from=...&to=...
> - Stream CSV để không load hết vào memory (transactions có thể vài trăm nghìn rows)
> - Authorization: chỉ admin role
>
> Đọc current admin reports trong src/admin/reports.ts để giữ consistency.Ví dụ thực chiến: Một ngày làm dev với context-aware Claude Code (tiếp)
Đang ở mức an toàn. Chuyển task tiếp.
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.
> /context
Context usage: 87,400 / 200,000 tokens (44%)11:30 — Review PR KYC của teammate
Bạn cố tình dùng subagent ở đây — vì bạn chỉ cần kết quả review, không cần context của 30+ file KYC vào main thread. Subagent chạy với context window riêng, trả về 1 trang summary, kết thúc.
Context check:
> /clear
> Đây là PR #847 của teammate về KYC module.
> Branch: feature/kyc-document-upload
> Files thay đổi: src/kyc/*, tests/kyc/*
> Spawn subagent để đọc các file này, check:
> - Tuân thủ rules trong CLAUDE.md không
> - Có security issues nào không (đặc biệt khi handle uploaded docs)
> - Test coverage đủ chưa
> Trả về summary, đừng cho tôi xem từng file.Ví dụ thực chiến: Một ngày làm dev với context-aware Claude Code (tiếp)
Mặc dù review 30+ file, main context của bạn vẫn nhẹ — vì subagent gánh hết context của exploration đó.
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.
> /context
Context usage: 14,200 / 200,000 tokens (7%)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ồ:
Claude phải:
→ Tốn ~25k token chỉ để hiểu yêu cầu.
Prompt cụ thể:
- Đọ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)
Sửa cái bug authentication đi.Chiến thuật 1: Be specific (prompt cụ thể tiết kiệm context)
Claude:
→ Tốn ~3k token.
Bài học: Một câu prompt chi tiết hơn 50 từ có thể tiết kiệm cho bạn 20.000 token "thám tử" của Claude. Ngược lại nếu bạn lười 30 giây gõ specific, Claude sẽ phải bù bằng 20-30 lần đọc file.
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:
→ Đó là context phải repeat mỗi session. Đẩy vào CLAUDE.md (xem chi tiết ở Bài 2.7: File CLAUDE.md) — Claude tự load vào context một lần ở đầu session, không cần bạn nhắc lại.
Trade-off: CLAUDE.md cũng tốn context. Quy tắc: chỉ đưa vào CLAUDE.md những gì bạn lặp lại ≥ 3 lần trong các session khác nhau.
Chiến thuật 3: Subagent — outsource exploration
Khi bạn cần thông tin "chỉ một câu trả lời":
Đâ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:
- Đọc 1 file (login.ts), 1 test file
- Sửa, test, xong
- "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"
File src/auth/login.ts dòng 42-58: hàm verifyPassword() đang return true
khi password rỗng. Lý do: bcrypt.compare() throw error mà bị catch silent
và default về true. Fix: throw error đó ra (KHÔNG dùng try-catch nuốt lỗi).
Update test trong tests/auth/login.test.ts để cover case password rỗng.Chiến thuật 3: Subagent — outsource exploration
Subagent chạy parallel với main, có context window riêng (cũng 200k), khi xong chỉ trả về summary. Toàn bộ 50 file nó đọc bị discard. Main context của bạn vẫn sạch.
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.
| Đặt trong... | Khi... |
|---|---|
| CLAUDE.md | Luôn relevant cho mọi task (project layout, build commands, code style) |
| Skill | Chỉ relevant cho 1 loại task cụ thể (review, commit, format report) |
Spawn subagent để tìm tất cả TODO trong project,
group theo module/folder, trả về summary.Chiến thuật 5: Dọn dẹp MCP servers không dùng
Tắt server không dùng:
> /mcp
Connected MCP servers:
✓ linear (12 tools, ~8k tokens)
✓ slack (6 tools, ~4k tokens)
✓ context7 (3 tools, ~2k tokens)
✓ figma (15 tools, ~12k tokens) ← bạn không design hôm nay
✓ jira (10 tools, ~7k tokens) ← team không dùng nữa
Total MCP overhead: ~33k tokens (16.5% context)5 chiến thuật tiết kiệm context (tiếp)
Hoặc cài skill thay thế: skill chỉ load name + description (~200 token) cho tới khi cần.
> /mcp disable figma
> /mcp disable jira
✓ Disabled. Restart session for changes to take effect.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:
Kết quả: Session 6 giờ không bị auto-compact, không mất chi tiết về spec ban đầu, code quality consistent.
📣 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:
Kết quả: Ship 8 polish PRs trong 1 ngày, mỗi PR session ngắn 15-20 phút, context never above 30%.
⚙️ 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:
Kết quả: Incident xử lý trong 35 phút, không bị "lạc" giữa exploration và action.
🎓 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:
Kết quả: Hiểu kiến trúc trong 30 phút thay vì 2 ngày, sẵn sàng làm contribution ý nghĩa.
- 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"
- /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
- 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
- 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:
❌ 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:
❌ 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.
- Để 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"
- 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
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":
Sau compact, dù tóm tắt có drop chi tiết, CLAUDE.md vẫn giữ rule này cho mọi session sau.
Mẹo 2: Dùng # shortcut cho memory
Trong khi Claude đang làm, gõ # rồi nhập note:
Trước khi tôi compact: hãy ghi vào CLAUDE.md project rằng
"JWT secret được rotate mỗi 7 ngày, không được hardcode duration".Mẹo 2: Dùng # shortcut cho memory
Claude tự động hỏi bạn: "Lưu vào CLAUDE.md project, user, hay nested?". Đây là cách nhanh nhất để biến corrections thành persistent memory.
Mẹo 3: Multi-session cho task song song
Thay vì gộp 2 task vào 1 session (dùng nhiều context):
# Note: Database migrations phải chạy bằng `pnpm db:migrate`,
KHÔNG dùng `drizzle-kit migrate` trực tiếp (sẽ skip seed data).Mẹo 3: Multi-session cho task song song
Mỗi tab có context window riêng. Không "ám" lẫn nhau. Bạn cần dùng git worktree (xem git worktree add) để tránh conflict file system.
Mẹo 4: Estimate context trước khi prompt
Trước khi prompt task lớn, ước lượng:
Nếu tổng dự kiến >60k token → đã chiếm 30% context. Cân nhắc tách task hoặc dùng subagent.
- 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.
# Terminal tab 1
$ cd ~/work/project && claude
> Implement feature A
# Terminal tab 2 (cùng project)
$ cd ~/work/project-worktree-feature-b && claude
> Implement feature BÁ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:
Bước 2: Identify 1 thứ có thể giảm:
Bước 3: Áp dụng action, gõ lại /context. So sánh:
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:
Bước 3: Lặp lại cho task 2 → task 3.
Bước 4: Cuối ngày ghi:
Nếu auto-compact > 0, review: lần nào bạn nên /clear mà quên?
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":
Sau khi xong task, so sánh estimate vs actual. Học từ delta.
- 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
- 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)
Task: ___________________________________________
Estimated context cost:
- Initial CLAUDE.md + system: 10k
- File reads dự kiến: __ files × 1k = __k
- Web searches dự kiến: __ × 3k = __k
- Tool calls (grep, bash, test): __k
- Conversation overhead: __k
TOTAL: __k
Plan:
- Compact mỗi: __ phút (nếu > 60% context)
- Subagent dùng cho: ____________
- MCP cần thiết: _______________
- MCP tắt trước khi bắt đầu: ______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.
- 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)