Điều khiển context — Escape, /compact, /clear

3 — Quy trình cơ bảnCơ bản25 phút

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.

Bạn sẽ học được
  • 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

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:

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:

Claude tiếp tục với focus đúng.

Ví dụ thực tế

Prompt ban đầu:

  • 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
Đợi, tôi không muốn bạn scan toàn bộ src/. Chỉ tập trung 
@src/features/auth/ thôi.

Ví dụ thực tế

Claude bắt đầu:

Viết test cho toàn bộ utility functions.

1. Escape — "Dừng lại, tôi muốn redirect" (tiếp)

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:

[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] ...

1. Escape — "Dừng lại, tôi muốn redirect" (tiếp)

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.

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.

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:

Flow vá vĩnh viễ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.

  • Luôn thêm // TODO: add comment sau mỗi function
  • Luôn dùng any type dù codebase là strict mode
  • Luôn viết commit kiểu "Updated files" không theo Conventional Commits
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ụ

Claude xác nhận đã append vào project CLAUDE.md.

Prompt tiếp tục:

# Never add "// TODO" comments unless I explicitly ask. 
# If refactor is needed, mention in chat response, not in code.

2. Escape + Memory Mode — Vá lỗi lặp lại vĩnh viễn (tiếp)

Từ giờ trở đi, Claude sẽ:

Bạn vá lỗi một lần, áp dụng cho mọi session tương lai. Đây là compound learning.

  • 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)
Xóa dòng TODO vừa thêm và tiếp tục task đang làm.

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:

Esc Esc.

Bạn thấy list message. Quay về message #2 (sau plan, chưa edit).

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?

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.

  • 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ũ
  • Đã 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
[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.

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:

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:

Sau compact:

Bạn vừa giảm 94% token, vẫn giữ knowledge.

Khi nào là lúc chạy /compact?

Output compact mẫu

Claude mang summary này vào request tiếp theo — nhẹ + đủ context.

  • Tasks completed
  • Files modified
  • Key decisions & rationale
  • Things to remember
  • What's next
  • 40 message
  • 80,000 token input history
  • Bao gồm: file content đã đọc, tool calls, debug logs, v.v.
  • 2 message: user prompt gốc + Claude summary
  • 5,000 token
  • Tóm tắt súc tích của 40 message
  • 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")
## Session Summary

### Completed tasks:
1. Added pagination to /invoices (4 files modified)
2. Fixed race condition in useInvoices hook  
3. 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.

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

/compact vs /clear — So sánh

Decision tree

  • 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/clear
Giữ gìKnowledge tóm tắtKhông gì (chỉ CLAUDE.md)
Khi nào dùngTask tiếp theo liên quanTask tiếp theo khác hẳn
Token sauGiảm 80-95%Giảm 100%
File đã editVẫn trên diskVẫn trên disk
Rủi roClaude "nhớ sai" summaryPhải explain lại codebase
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:

Flow với Claude Code

09:00 — Bắt đầu task 1:

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:

  • 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)
cd ~/Projects/app
claude

Flow với Claude Code

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:

Giờ thêm feature export CSV cho /invoices. Có thể reuse 
pagination logic vừa làm — Claude đã biết.

Ví dụ thực chiến: Full-day session với 4 task khác nhau (tiếp)

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:

Review PR #1243 — @src/features/auth/. Focus vào:
1. Security implications
2. Code quality
3. Test coverage
Think harder về edge cases.

Ví dụ thực chiến: Full-day session với 4 task khác nhau (tiếp)

(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 đó
cd ~/Projects/post-mortems
claude

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 /clear giữa project: Zero cross-contamination. Mỗi project isolated.

🏥 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 /clear sau mỗi PHI task. Có hook enforce (Bài 4.16).

🛠️ Platform team — /compact để save cost

Trước: "Token spend $600/dev/tháng."

Với habit /compact mỗi 45 phút:

📣 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.

🔐 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ả: 8 client/tuần, không inconsistency.
  • Kết quả: Zero PHI cross-leak trong 200 ngày.
  • Kết quả: $280/dev/tháng, giảm 53%, productivity không giảm.
  • Kết quả: 1 pass thay vì 3, tiết kiệm 70% thời gian.
  • 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: /compact mỗi 30-45 phút, /clear giữ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 checkout cho file.

Mẹo nâng cao

Mẹo 1: Shortcut reference card

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ì:

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:

Esc          → Stop current response, redirect
Esc Esc      → Rewind to earlier message
#            → Append to CLAUDE.md (memory mode)
@            → Mention specific file
/compact     → Summarize + continue
/clear       → Full reset conversation
/init        → Generate CLAUDE.md
/hooks       → Hook configuration
/mcp         → MCP servers list
/compact Keep focus on: files in auth/, not billing/. 
Forget implementation details, remember only API contract.

Mẹo 3: Đặt "checkpoint" bằng commit

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.

git commit -am "wip: checkpoint before Claude task"

Á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:

Bước 3: Sau 5-10 giây (Claude đang đọc file) → Escape.

Bước 4: Redirect:

Refactor toàn bộ codebase theo SOLID principles.

Bài tập 1: Escape + memory (10 phút)

Bước 5: Quan sát Claude:

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:

→ Giữa A và B: /compact hay /clear? ___

→ Giữa B và C: /compact hay /clear? ___

→ Giữa C và D: /compact hay /clear? ___

Đáp án suggestion:

  • Có dừng ngay không? ☐ Có ☐ Không
  • Có switch scope đúng không? ☐ Có ☐ Không
  • Task A: Add CRUD cho entity Product
  • Task B: Add search feature cho /products
  • Task C: Viết changelog cho release
  • Task D: Thêm feature search cho /categories (tương tự /products)
  • A→B: /compact (cùng module products)
  • B→C: /clear (task hoàn toàn khác)
  • C→D: /clear rồi prompt reference pattern từ /products (hoặc load trực tiếp)
Dừng. Tôi chỉ muốn refactor @src/lib/users.ts theo SRP. 
Các file khác để sau.

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)
Nội dung này có hữu ích không?