Quản lý context & session
#Vấn đề: Session càng dài, agent càng "ngu"
Bạn đã bao giờ gặp tình huống này chưa? Bạn làm việc với Claude Code được 45 phút, sửa 5-6 file, rồi bất chợt agent bắt đầu gợi ý code mà bạn đã sửa từ 20 phút trước. Hoặc agent quên mất interface User mà bạn đã tạo ở đầu session.
Đây là triệu chứng kinh điển của context window bị đầy. Và giải pháp không phải là "mua gói cao cấp hơn" — mà là quản lý context chủ động.
#/clear — Xóa sạch, bắt đầu lại
Lệnh đơn giản nhất và mạnh nhất: /clear.
/clearLệnh này xóa toàn bộ lịch sử hội thoại trong session hiện tại. Context window trở về trạng thái trống — như bạn vừa mở terminal mới.
Khi nào nên dùng /clear:
- Hoàn thành xong một task, chuyển sang task mới không liên quan
- Agent bắt đầu "quên" hoặc nhắc lại thông tin cũ
- Bạn muốn bắt đầu lại với prompt mới mà không bị ảnh hưởng bởi context cũ
Ví dụ thực tế:
# Task 1: Sửa bug auth
Bạn: "Sửa lỗi JWT expired không redirect về login trong src/auth/middleware.ts"
Agent: [sửa xong]
# --- Dùng /clear ở đây ---
# Task 2: Thêm feature mới (không liên quan auth)
Bạn: "Thêm dark mode toggle vào src/components/ThemeSwitch.tsx"
Agent: [bắt đầu với context sạch, không bị ảnh hưởng bởi task 1]Nếu bạn không dùng /clear giữa hai task, agent sẽ phải giữ context của task 1 trong khi làm task 2 — lãng phí context window và dễ gây nhầm lẫn.
#/compact — Tóm tắt để tiết kiệm context
/compact là lệnh "giữa chừng" — nó không xóa sạch, mà tóm tắt toàn bộ cuộc hội thoại hiện tại thành một bản summary ngắn gọn, rồi thay thế lịch sử cũ bằng summary đó.
/compactKhi nào nên dùng /compact:
- Bạn đang làm một task lớn, chưa xong, nhưng context đã dài
- Bạn muốn giữ lại "ý chính" của cuộc hội thoại mà không muốn mất context window
- Session đã có 15-20 message qua lại và bắt đầu chậm
So sánh /clear vs /compact:
/clear | /compact | |
|---|---|---|
| Xóa toàn bộ context | Có | Không |
| Giữ lại tóm tắt | Không | Có |
| Phù hợp khi | Chuyển task mới | Đang giữa task lớn |
| Context window sau lệnh | Trống hoàn toàn | Chứa summary ngắn |
Ví dụ:
# Bạn đang refactor một module lớn, đã discuss 20 message
# Context gần đầy → dùng /compact
/compact
# Agent tóm tắt: "Đang refactor UserModule. Đã đổi tên interface User → UserProfile,
# thêm field avatarUrl, đang dở phần migration script."
# Tiếp tục làm việc với summary đã được compress
Bạn: "Tiếp tục viết migration script cho phần rename columns"#Khi nào nên bắt đầu session mới
Đôi khi /clear và /compact không đủ. Bạn cần thoát hẳn và mở session mới.
Dấu hiệu cần session mới:
-
Bạn đã chuyển project. Agent trong session hiện tại đã đọc nhiều file từ project A — đừng cố dùng nó cho project B. Thoát ra,
cdvào project B, mởclaudemới. -
Agent liên tục đưa ra giải pháp sai dù bạn đã correct nhiều lần. Context cũ đang "đầu độc" agent — session mới sẽ sạch hơn.
-
Bạn muốn test lại từ đầu mà không muốn bất kỳ context nào leak từ session cũ.
-
Session đã chạy quá 1 giờ với nhiều task khác nhau. Dù dùng
/compact, accumulated context vẫn có thể gây nhiễu.
# Thoát session hiện tại
/exit
# Hoặc Ctrl+C
# Mở session mới
claude#Chiến lược chia task lớn thành nhiều session nhỏ
Đây là pattern mà senior dev dùng khi làm việc với Claude Code trên project thực:
Nguyên tắc: 1 session = 1 task có scope rõ ràng.
Ví dụ, bạn cần implement tính năng "User Profile" cho app:
Session 1: Tạo interface và type cho UserProfile
→ Prompt: "Tạo interface UserProfile trong src/types/user.ts với các field: id, name, email, avatarUrl, createdAt"
→ Hoàn thành → /exit
Session 2: Viết component UI
→ Prompt: "Tạo component UserProfileCard trong src/components/UserProfileCard.tsx nhận prop user: UserProfile"
→ Hoàn thành → /exit
Session 3: Viết API route
→ Prompt: "Tạo GET route /api/users/:id trong src/app/api/users/[id]/route.ts, trả về UserProfile từ database"
→ Hoàn thành → /exit
Session 4: Viết test
→ Prompt: "Viết unit test cho UserProfileCard trong src/components/__tests__/UserProfileCard.test.tsx"
→ Hoàn thành → /exitMỗi session có context window sạch, focused vào đúng task. Agent không phải "nhớ" interface đã tạo ở session 1 khi đang viết test ở session 4 — vì bạn đã commit code rồi, agent sẽ tự đọc file khi cần.
#Anti-pattern: Không bao giờ clear context
Đây là anti-pattern phổ biến nhất:
❌ "Tôi đã nói với agent về project structure 40 phút trước,
giờ nó quên rồi — tệ thật!"
→ Bạn không dùng /clear hay /compact suốt 40 phút.
→ Context window đã đầy từ lâu.
→ Agent không "quên" — nó không thể thấy thông tin cũ nữa vì bị đẩy ra khỏi context window.Giải pháp: Dùng /compact mỗi 15-20 message. Dùng /clear khi chuyển task. Đơn giản vậy thôi.
Một anti-pattern khác:
❌ "Tôi paste lại interface User mỗi lần nhờ agent sửa component,
vì sợ nó quên."
→ Mỗi lần paste, bạn lấp đầy context window thêm 20-30 dòng.
→ Sau 5 lần paste, bạn đã tốn 150 dòng context cho cùng một thông tin.
→ Agent có thể tự đọc file — hãy để nó làm việc đó.⚠️ Cẩn thận: Khi dùng
/compact, agent sẽ tóm tắt cuộc hội thoại. Nếu có chi tiết quan trọng mà bạn muốn giữ nguyên (ví dụ: một quyết định design cụ thể, một constraint đặc biệt), hãy ghi nó vào CLAUDE.md thay vì dựa vào summary. Summary có thể bỏ sót chi tiết nhỏ.
#Demo: Chuỗi workflow thực tế
Giả sử bạn đang fix một bug phức tạp, cần nhiều bước:
# Bước 1: Bắt đầu session, mô tả bug
claude
> "App crash khi user upload file lớn hơn 5MB. Lỗi ở src/upload/handler.ts"
# Bước 2: Agent đọc file, phân tích, đề xuất fix
# (nhiều message qua lại, context đang lấp đầy)
# Bước 3: Context đã dài → compact
/compact
# Bước 4: Tiếp tục fix, commit
> "OK, commit phần fix upload size limit"
# Bước 5: Chuyển sang task mới → clear
/clear
> "Tiếp theo, thêm validation cho email format trong src/auth/register.ts"Workflow này giữ context window sạch sẽ qua từng giai đoạn.
#Bài tập thực hành
#Bài tập 1: Thử /clear và quan sát
Mở Claude Code, gửi 3-4 message bất kỳ (hỏi về code, nhờ giải thích, etc.). Sau đó dùng /clear. Gửi message mới:
"Bạn còn nhớ nội dung chúng ta vừa discuss không?"Agent sẽ trả lời "không" — chứng tỏ /clear đã xóa sạch context.
#Bài tập 2: Thử /compact giữa task
Bắt đầu một task lớn (ví dụ: "Refactor module auth trong src/auth/"). Gửi 5-6 message qua lại. Dùng /compact. Sau đó hỏi:
"Tóm tắt lại những gì chúng ta đã làm cho đến giờ"So sánh summary của agent với ghi chú của bạn. Có chi tiết nào bị bỏ sót không?
#Bài tập 3: Chia task thành nhiều session
Chọn một feature bất kỳ trong project của bạn (ví dụ: thêm form contact). Chia thành 3 session riêng biệt:
- Session 1: Tạo component UI
- Session 2: Viết logic submit form
- Session 3: Viết test
Ghi lại: mỗi session mất bao nhiêu message? Agent có "quên" gì giữa các session không?
#Tổng kết
Ba công cụ cốt lõi để quản lý context: /clear để xóa sạch khi chuyển task, /compact để tóm tắt khi đang giữa task dài, và session mới khi cần bắt đầu hoàn toàn fresh. Nguyên tắc vàng: 1 session = 1 task có scope rõ ràng. Đừng bao giờ để context window đầy mà không xử lý — agent không "quên", nó chỉ không thấy nữa.
Bài tiếp theo sẽ nói về CLAUDE.md — cách ghi "bộ nhớ vĩnh viễn" cho agent, để những thông tin quan trọng về project luôn sẵn sàng mỗi session mà không tốn context window.