Hầu hết user mới nghĩ "càng nói chuyện nhiều với Claude càng thông minh hơn." Sai.
- Dùng Escape để dừng Claude khi đi sai hướng, redirect cho đúng
- Dùng Esc Esc (double escape) để rewind conversation về message trước
- Phân biệt /compact (giữ context, tóm tắt) và /clear (xóa hết, bắt đầu mới)
- Kết hợp Escape với memory mode (#) để vá lỗi lặp lại
- Biết khi nào keep conversation, khi nào compact, khi nào clear
Mở đầu: Tại sao conversation dài lại tệ?
Claude có context window 200,000 token — nghe nhiều, nhưng mỗi session dài nghĩa là:
- Chậm hơn — mỗi request Claude phải đọc lại toàn bộ history
- Đắt hơn — 50,000 token input × $3/1M × mỗi request = tăng dần
- Dễ lạc hơn — Claude "nhớ" cả lỗi cũ, quyết định đã rollback, context không liên quan
- Dễ hallucinate — khi prompt quá dài, model đôi khi miss instruction ở giữa
Giải pháp: quản lý context trong session — biết khi nào giữ, khi nào compact, khi nào clear.
Bài này dạy bạn 4 "reset tool": Escape, Esc Esc, /compact, /clear. Dùng tốt = khác biệt giữa Claude hoạt động mượt cả ngày vs Claude "nặng" dần mỗi giờ.
1. Escape — "Dừng lại, tôi muốn redirect"
Khi nào cần Escape?
Đang trong một conversation, Claude đang chạy — bạn thấy:
- Claude đang
Readđúng thứ sai (ví dụ: hỏi sửa file A, Claude đọc file B, C, D không liên quan) - Claude đang lập plan quá lớn, muốn quy mô nhỏ hơn
- Claude đang make assumption sai bạn nhận ra
- Claude stuck trong loop đọc-search-đọc
Cách dùng
Nhấn phím Escape một lần → Claude dừng response hiện tại ngay lập tức.
Sau đó bạn gõ prompt mới để redirect:
Đợi, tôi không muốn bạn scan toàn bộ src/. Chỉ tập trung
@src/features/auth/ thôi.
Claude tiếp tục với focus đúng.
Ví dụ thực tế
Prompt ban đầu:
Viết test cho toàn bộ utility functions.
Claude bắt đầu:
[Glob] src/lib/**/*.ts
[Read] src/lib/utils.ts
[Read] src/lib/date.ts
[Read] src/lib/string.ts
[Read] src/lib/numbers.ts
[Read] ...
Bạn nhận ra: Claude đang đọc 40+ file. Scope bạn nghĩ là "10 utility chính" nhưng Claude hiểu rộng hơn.
Nhấn Escape.
Prompt redirect:
Dừng. Chỉ viết test cho 5 function sau:
- formatDate (lib/date.ts)
- truncate (lib/string.ts)
- clamp (lib/numbers.ts)
- slugify (lib/string.ts)
- formatCurrency (lib/currency.ts)
Dùng pattern tests hiện có trong lib/date.test.ts làm reference.
Claude focus lại, làm đúng scope.
Tiết kiệm: Nếu không Escape, Claude tốn 10 phút + 50,000 token lập plan cho 40 file, sau đó bạn phải rollback.
2. Escape + Memory Mode — Vá lỗi lặp lại vĩnh viễn
Đây là kỹ thuật mạnh nhất của Escape.
Tình huống
Bạn thấy Claude lặp lại lỗi cụ thể qua nhiều session:
- Luôn thêm
// TODO: add commentsau mỗi function - Luôn dùng
anytype dù codebase là strict mode - Luôn viết commit kiểu
"Updated files"không theo Conventional Commits
Flow vá vĩnh viễn
1. Escape ← Dừng Claude ngay khi thấy lỗi
2. Gõ # + rule ← Ghi vào memory (CLAUDE.md)
3. Tiếp tục prompt ← Claude từ giờ nhớ luôn
Ví dụ
Đang trong session. Claude vừa sửa file, thêm một dòng // TODO: refactor later vô nghĩa.
Nhấn Escape.
Claude xác nhận đã append vào project CLAUDE.md.
Prompt tiếp tục:
Xóa dòng TODO vừa thêm và tiếp tục task đang làm.
Từ giờ trở đi, Claude sẽ:
- Không thêm TODO comment (trong session này)
- Không thêm TODO comment (trong session tương lai — vì CLAUDE.md đã update)
Bạn vá lỗi một lần, áp dụng cho mọi session tương lai. Đây là compound learning.
3. Double Escape — Rewind conversation
Khi nào cần?
Conversation đi sâu rồi bạn nhận ra: "Hỏng từ 3 message trước." Muốn quay lại trạng thái tốt thay vì tiếp tục với debt context.
Cách dùng
Nhấn Escape hai lần nhanh.
Claude Code hiện list tất cả message bạn đã gửi trong session. Chọn message bạn muốn rewind về → conversation trở lại trạng thái đó.
Ví dụ
Flow đã xảy ra:
- You: "Thêm feature pagination cho /invoices"
- Claude: Gather context, lập plan
- You: approve
- Claude: Edit 4 file
- You: "Có bug — test fail"
- Claude: Đọc error, debug, làm quá phức tạp (nested try-catch 3 tầng)
- You: "Không, đơn giản hóa"
- Claude: Không đơn giản được vì stuck vào approach cũ
Esc Esc.
Bạn thấy list message. Quay về message #2 (sau plan, chưa edit).
[Rewind to message 2]
You: Plan OK. Nhưng thêm requirement: pagination phải
handle empty state (0 invoice). Và error handling đơn
giản thôi — throw, để error boundary bắt.
Claude bắt đầu lại từ plan tốt, không mang theo "debt" của flow sai.
Khi nào Esc Esc hữu ích nhất?
- Đã thử approach, thấy không ổn, muốn thử approach khác
- Claude đã học thông tin sai từ file cũ, muốn "quên" nó
- Debug session quá dài, muốn start clean từ định nghĩa bug
Lưu ý
Esc Esc chỉ giữ lại messages trước rewind point. Edit file Claude đã làm vẫn tồn tại trên disk. Nếu muốn rollback edit → git checkout hoặc reset manual.
Habit: Commit nhỏ, thường xuyên. Khi rewind, bạn có thể git reset --hard về commit trước để đồng bộ file system với conversation state.
4. /compact — Tóm tắt, giữ knowledge
Khi nào dùng?
Session đã dài (30+ message), nhưng Claude đã "học" được nhiều điều về codebase (architecture, file structure, convention). Bạn muốn tiếp tục với task tiếp theo liên quan, không muốn mất kiến thức đó.
Cách dùng
Gõ: /compact
Claude nhận prompt đặc biệt: "Tóm tắt conversation này cho developer tiếp theo."
Claude viết tóm tắt có structure:
- Tasks completed
- Files modified
- Key decisions & rationale
- Things to remember
- What's next
Sau đó, context cũ bị replace bằng summary. Bạn tiếp tục session với context ngắn hơn nhưng giữ key insights.
Ví dụ trước/sau
Trước compact:
- 40 message
- 80,000 token input history
- Bao gồm: file content đã đọc, tool calls, debug logs, v.v.
Sau compact:
- 2 message: user prompt gốc + Claude summary
- 5,000 token
- Tóm tắt súc tích của 40 message
Bạn vừa giảm 94% token, vẫn giữ knowledge.
Khi nào là lúc chạy /compact?
- Conversation > 30 message
- Bạn thấy response chậm dần
- Sắp chuyển sang task mới NHƯNG liên quan codebase đã khám phá
- Context warning xuất hiện ở góc terminal ("X% context used")
Output compact mẫu
Session Summary
Completed tasks:
- Added pagination to /invoices (4 files modified)
- Fixed race condition in useInvoices hook
- Added error boundary for empty state
Codebase knowledge:
- Project: uigen (Next.js 14 + Prisma + SQLite)
- Pagination pattern used across project: skip/take with cursor fallback in @lib/db/paginate.ts
- Error handling convention: throw typed errors, caught by root boundary
- Test pattern: Vitest + RTL, tests colocated
Pending / notes:
- User mentioned planning to migrate to Drizzle Q3
- TODO from user: add same pagination to /orders (next task)
Ready for next task.
Claude mang summary này vào request tiếp theo — **nhẹ + đủ context**.
---
5. /clear — Xóa hết, khởi động lại
Khi nào dùng?
Task tiếp theo hoàn toàn khác, không liên quan context cũ. Giữ context = noise, không lợi ích.
Cách dùng
Gõ: /clear
Toàn bộ conversation history bị xóa. Claude "quên" mọi thứ session vừa rồi. CLAUDE.md vẫn load (vì đó là config, không phải conversation).
Ví dụ khi nên clear
- Vừa xong feature billing → chuyển sang viết documentation (2 topic rất khác)
- Vừa debug production bug 1 giờ → giờ muốn explore feature mới (context bug làm nhiễu)
- Vừa làm task frontend → chuyển sang infra (tech stack khác)
/compact vs /clear — So sánh
| /compact | /clear | |
|---|---|---|
| Giữ gì | Knowledge tóm tắt | Không gì (chỉ CLAUDE.md) |
| Khi nào dùng | Task tiếp theo liên quan | Task tiếp theo khác hẳn |
| Token sau | Giảm 80-95% | Giảm 100% |
| File đã edit | Vẫn trên disk | Vẫn trên disk |
| Rủi ro | Claude "nhớ sai" summary | Phải explain lại codebase |
Decision tree
Conversation quá dài, cần reset context?
│
├── Task tiếp có dùng knowledge vừa học?
│ │
│ ├── YES → /compact
│ │
│ └── NO → /clear
│
└── Không chắc?
└── /compact (safer default)
Ví dụ thực chiến: Full-day session với 4 task khác nhau
Tình huống
Bạn là senior dev, lên kế hoạch ngày làm việc với 4 task:
- Sáng: Fix bug pagination (task nhỏ)
- Sáng muộn: Implement feature export CSV (liên quan task 1 — cùng module)
- Chiều: Review PR team junior về auth refactor (không liên quan)
- Cuối chiều: Viết post-mortem cho production incident tuần trước (hoàn toàn khác)
Flow với Claude Code
09:00 — Bắt đầu task 1:
cd ~/Projects/app
claude
Làm task pagination (~40 phút, 25 messages).
09:40 — Chuyển sang task 2 (liên quan):
Gõ: /compact
Claude tóm tắt task 1 (pagination approach, file đã touch, Prisma pattern dùng). Bạn tiếp tục:
Giờ thêm feature export CSV cho /invoices. Có thể reuse
pagination logic vừa làm — Claude đã biết.
Claude dùng knowledge từ summary → làm nhanh, không phải explore lại codebase.
11:30 — Chuyển sang task 3 (không liên quan):
Gõ: /clear
Claude quên hết. Bạn mở PR:
Review PR #1243 — @src/features/auth/. Focus vào:
1. Security implications
2. Code quality
3. Test coverage
Think harder về edge cases.
Session mới, không noise từ morning work.
14:00 — Chuyển sang task 4 (hoàn toàn khác project):
Gõ: /clear rồi:
cd ~/Projects/post-mortems
claude
(Thậm chí đổi luôn project folder để context sạch tuyệt đối.)
Kết quả
- Tổng token 1 ngày: ~250,000 (thay vì 800,000 nếu không compact/clear)
- Claude trả lời nhanh ổn định cả ngày
- Không có "drift" — task nào ra task đó
Case studies theo ngành
Consultant multi-client — Context switching sạch
- Trước
- "Làm project A xong, qua project B, Claude hay 'nhớ' convention project A → bug."
- Với
/cleargiữa project - Zero cross-contamination. Mỗi project isolated.
- Kết quả: 8 client/tuần, không inconsistency.
Health tech — /clear bắt buộc cho PHI
- Trước
- "Conversation có thể chứa PHI reference → lo leak vào session sau."
- Với policy
- Bắt buộc
/clearsau mỗi PHI task. Có hook enforce (Bài 4.16).
- Kết quả: Zero PHI cross-leak trong 200 ngày.
Platform team — /compact để save cost
Trước: "Token spend $600/dev/tháng."
Với habit /compact mỗi 45 phút:
- Kết quả: $280/dev/tháng, giảm 53%, productivity không giảm.
Content marketer — Escape cho iterate nhanh
- Trước
- "Claude generate blog 2000 từ, không đúng tone → phải re-generate từ đầu."
- Với Escape + redirect
- Escape khi thấy paragraph đầu lệch tone, inject lại voice guide, Claude continue đúng hướng.
- Kết quả: 1 pass thay vì 3, tiết kiệm 70% thời gian.
Security engineer — Esc Esc cho rollback thử nghiệm
- Trước
- "Experiment approach A → xong mới biết sai. Phải Ctrl+C rồi explain lại."
- Với Esc Esc
- Rewind về trước khi experiment, thử approach B luôn.
- Kết quả: Iteration speed 3x.
Anti-patterns
Không bao giờ /clear cả ngày
Biểu hiện: session 8 tiếng, 200 message, không reset.
- Hậu quả
- Claude chậm, confuse context của 8 feature khác nhau, tốn $$$ token.
- Cách đúng
/compactmỗi 30-45 phút,/cleargiữa task không liên quan.
/clear khi vẫn cần context
Biểu hiện: Làm task pagination, /clear, task tiếp là export (cùng module) — Claude phải học lại.
Cách đúng: /compact thay vì /clear khi task tiếp liên quan.
Escape rồi quên redirect
Biểu hiện: nhấn Escape, để đó, gõ prompt không liên quan đến vì sao vừa Escape.
- Hậu quả
- Claude confuse tại sao dừng, resume task bạn nghĩ đã bỏ.
- Cách đúng
- Sau Escape, luôn gõ prompt giải thích/redirect.
Spam Escape mỗi khi Claude đọc file
Biểu hiện: Claude vừa Read 3 file → bạn đã nóng ruột → Escape.
- Hậu quả
- Claude chưa gather đủ context, action dựa trên guess.
- Cách đúng
- Chỉ Escape khi thấy Claude rõ ràng đi sai. Không Escape vì impatience.
Dùng Esc Esc như "undo file edit"
Biểu hiện: Claude edit file → bạn Esc Esc nghĩ sẽ revert.
- Hậu quả
- Conversation rewind, nhưng file vẫn thay đổi.
- Cách đúng
- Esc Esc cho conversation;
git checkoutcho file.
Mẹo nâng cao
Mẹo 1: Shortcut reference card
Esc → Stop current response, redirect
Esc Esc → Rewind to earlier message
@ → Mention specific file
/compact → Summarize + continue
/clear → Full reset conversation
/init → Generate CLAUDE.md
/hooks → Hook configuration
/mcp → MCP servers list
In ra dán cạnh màn hình trong tuần đầu.
Mẹo 2: /compact custom instruction
Bạn có thể hướng dẫn /compact giữ cái gì:
/compact Keep focus on: files in auth/, not billing/.
Forget implementation details, remember only API contract.
Giúp summary relevant với task tiếp theo.
Mẹo 3: Đặt "checkpoint" bằng commit
Trước khi làm task phức tạp:
git commit -am "wip: checkpoint before Claude task"
Nếu Claude đi sai + Esc Esc không đủ → git reset --hard HEAD trở về state sạch.
Mẹo 4: Context dashboard
Trong terminal Claude Code, để ý góc phải — hiển thị Context: X% used. Khi vượt 60-70% → thời điểm chạy /compact.
Áp dụng ngay
Bài tập 1: Escape + memory (10 phút)
- Bước 1
- Mở Claude Code trong project.
- Bước 2
- Gõ prompt task lớn cố ý để Claude đi sâu:
Refactor toàn bộ codebase theo SOLID principles.
- Bước 3
- Sau 5-10 giây (Claude đang đọc file) → Escape.
- Bước 4
- Redirect:
Dừng. Tôi chỉ muốn refactor @src/lib/users.ts theo SRP.
Các file khác để sau.
Bước 5: Quan sát Claude:
- Có dừng ngay không? Có Không
- Có switch scope đúng không? Có Không
Bài tập 2 (optional, 15 phút): Compact vs Clear decision
Làm 3 task sau, quyết định dùng /compact hay /clear giữa mỗi cặp:
- Task A: Add CRUD cho entity Product
- Task B: Add search feature cho /products
→ Giữa A và B: /compact hay /clear? ___
- Task C: Viết changelog cho release
→ Giữa B và C: /compact hay /clear? ___
- Task D: Thêm feature search cho /categories (tương tự /products)
→ Giữa C và D: /compact hay /clear? ___
Đáp án suggestion:
- A→B:
/compact(cùng module products) - B→C:
/clear(task hoàn toàn khác) - C→D:
/clearrồi prompt reference pattern từ /products (hoặc load trực tiếp)
Tóm tắt bài học
- Escape = pause + redirect — dừng Claude khi đi sai, redirect ngay sau.
- Esc +
#= vá lỗi lặp lại vĩnh viễn — append rule vào CLAUDE.md trực tiếp. - Esc Esc = rewind conversation, không revert file edit.
/compact— task tiếp liên quan; giữ knowledge, giảm 80-95% token./clear— task tiếp khác hẳn; reset 100%, chỉ giữ CLAUDE.md.
Tài liệu tham khảo
- Claude Code keyboard shortcuts
- Context window management best practices
- Bài 4.6 — CLAUDE.md (context trước conversation)
- Bài 4.7 — Planning + Thinking (context trong single request)