Lộ trình học›Claude Code›Claude Code in Action Mở bản đồ

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

Bài viếtCơ bản → Trung c18 phút đọc

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.

Sau bài này, bạn sẽ
  1. Dùng Escape để dừng Claude khi đi sai hướng, redirect cho đúng
  2. Dùng Esc Esc (double escape) để rewind conversation về message trước
  3. Phân biệt /compact (giữ context, tóm tắt) và /clear (xóa hết, bắt đầu mới)
  4. Kết hợp Escape với memory mode (#) để vá lỗi lặp lại
  5. 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 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

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:

  1. You: "Thêm feature pagination cho /invoices"
  2. Claude: Gather context, lập plan
  3. You: approve
  4. Claude: Edit 4 file
  5. You: "Có bug — test fail"
  6. Claude: Đọc error, debug, làm quá phức tạp (nested try-catch 3 tầng)
  7. You: "Không, đơn giản hóa"
  8. 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:

  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.


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ắ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

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:

  1. Sáng: Fix bug pagination (task nhỏ)
  2. Sáng muộn: Implement feature export CSV (liên quan task 1 — cùng module)
  3. Chiều: Review PR team junior về auth refactor (không liên quan)
  4. 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 /clear giữ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 /clear sau 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
/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

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:

  1. Task A: Add CRUD cho entity Product
  2. Task B: Add search feature cho /products

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

  1. Task C: Viết changelog cho release

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

  1. 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: /clear rồi prompt reference pattern từ /products (hoặc load trực tiếp)

Tóm tắt bài học

Những điều cốt lõi
  • 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

Kiểm tra nhanh2 câu hỏi · chọn đáp án để xem giải thích
    Bạn đã hoàn thành bài này chưa?Tiến độ lưu trên trình duyệt của bạn.