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.

/clear

Lệ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 đó.

/compact

Khi 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ộ contextKhông
Giữ lại tóm tắtKhông
Phù hợp khiChuyển task mớiĐang giữa task lớn
Context window sau lệnhTrống hoàn toànChứ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/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:

  1. 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, cd vào project B, mở claude mới.

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

  3. Bạn muốn test lại từ đầu mà không muốn bất kỳ context nào leak từ session cũ.

  4. 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 → /exit

Mỗ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:

  1. Session 1: Tạo component UI
  2. Session 2: Viết logic submit form
  3. 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.