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ớ
| 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ồ |
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
Cảnh báo quan trọng: Auto-compact có thể làm mất chi tiết. Nếu bạn đã nói một constraint quan trọng cách đây 50 prompt, sau compact constraint đó có thể chỉ còn 1 dòng tóm tắt — hoặc biến mất hoàn toàn.
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:
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.
Đâ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:
> /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
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:
> /clear
✓ Conversation cleared.
✓ CLAUDE.md re-loaded (project + user).
✓ Context: 9,300 / 200,000 tokens (4.7%)
>
/clear xóa toàn bộ tool calls, hội thoại, mọi thứ trong session. Chỉ giữ:
- 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)
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.
Bảng so sánh quyết định: /compact vs /clear vs Auto-compact
| 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 |
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
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
$ cd ~/work/payment-service
$ claude
Bạn prompt cụ thể (nhớ nguyên tắc: prompt mơ hồ tốn nhiều context hơn prompt cụ thể):
“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:
> /context
Context usage: 38,200 / 200,000 tokens (19%)
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ũ:
- 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ả
Quyết định: /clear
> /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.
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:
> /context
Context usage: 87,400 / 200,000 tokens (44%)
Đ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.
> /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.
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:
> /context
Context usage: 14,200 / 200,000 tokens (7%)
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.
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ồ:
Sửa cái bug authentication đi.
Claude phải:
- Đọ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)
→ Tốn ~25k token chỉ để hiểu yêu cầu.
Prompt cụ thể:
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.
Claude:
- Đọc 1 file (login.ts), 1 test file
- Sửa, test, xong
→ 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:
- “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”
→ Đó 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”:
“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:
Spawn subagent để tìm tất cả TODO trong project,
group theo module/folder, trả về summary.
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.
Mẹo: Quy tắc “answer without journey” — nếu bạn chỉ cần answer, không cần xem journey, hãy dùng subagent. Xem chi tiết ở Bài 2.8: Subagents.
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:
| Đặ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) |
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.
> /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)
Tắt server không dùng:
> /mcp disable figma
> /mcp disable jira
✓ Disabled. Restart session for changes to take effect.
Hoặc cài skill thay thế: skill chỉ load name + description (~200 token) cho tới khi cần.
Trick: Nếu MCP server vượt 10% context, Claude Code tự switch sang tool search mode — chỉ load tool định nghĩa khi cần. Nhưng feature này chưa stable, nên chủ động /mcp disable vẫn tốt hơn.
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”
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:
- /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
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:
- 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
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:
- 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
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.
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”:
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".
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:
# 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).
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):
# 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
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:
- 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.
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.
Á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: _________
Bước 2: Identify 1 thứ có thể giảm:
- ☐ 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
Bước 3: Áp dụng action, gõ lại /context. So sánh:
- 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
Bước 3: Lặp lại cho task 2 → task 3.
Bước 4: Cuối ngày ghi:
- Số lần /compact: _____
- Số lần /clear: _____
- Số lần auto-compact tự kích hoạt: _____ (mục tiêu: 0)
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”:
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: ______
Sau khi xong task, so sánh estimate vs actual. Học từ delta.
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 workflow
Tà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)
Khoá học “Claude Code 101” — bản tiếng Việt v1.0Bản quyền 2026 Anthropic. Mọi quyền được bảo lưu.