Session Handoff: Truyền state giữa các session
Cách AI agent 'bắt tay' giữa các phiên làm việc: từ progress.txt đến MEMORY.md, giải quyết bài toán state không bị mất khi context window reset.
Định nghĩa
Session handoff là pattern truyền tải trạng thái tác vụ (task state) từ session AI này sang session kế tiếp, cho phép agent tiếp tục công việc dở dang như chưa từng bị ngắt quãng bởi giới hạn context window hay thời gian thực thi.
Giải thích chi tiết
Tại sao cần handoff?
HTTP và API của LLM vốn stateless. Mỗi request là độc lập, context window mỗi lần gọi là "sạch" trừ khi bạn đẩy lại toàn bộ lịch sử. Với project nhỏ, bạn có thể đẩy cả codebase vào prompt. Nhưng khi project vượt quá 100k tokens, việc đọc lại toàn bộ git log và code chỉ để "bắt nhịp" sẽ tiêu tốn 30-40% context window — như khởi động lại máy tính và mở lại từng tab Chrome thay vì resume từ sleep.
Handoff sinh ra để đóng gói "mental stack" của agent thành một artifact compact, có thể deserialize trong phần trăm giây đầu của session mới.
Handoff vs. Memory thông thường
Có sự khác biệt tinh tế giữa lưu trữ thông tin (memory) và truyền giao trạng thái (handoff):
- Memory (Level 1): Lưu facts, preference, kiến thức domain. Dùng RAG hoặc vector store. Mục tiêu là "AI nhớ tôi thích code Python theo PEP8". Lifespan: vĩnh viễn hoặc tháng.
- Handoff (Level 2): Lưu execution state: file nào đang mở, test nào đang fail, quyết định kiến trúc tại bước 3 đã chọn phương án A hay B. Mục tiêu là "Tiếp tục debug từ dòng 45, file
auth.py, đừng hỏi lại tôi muốn fix gì". Lifespan: giờ đến ngày.
Memory trả lời "Tôi là ai?", handoff trả lời "Chúng ta đang làm gì và đến đâu rồi?".
3 pattern handoff thực chiến
1. Progress File Pattern
Tạo file progress.txt hoặc CLAUDE.md ngay trong repo. Mỗi khi agent hoàn thành một bước, nó append vào file: "Đã refactor xong module X, đang chờ review test Y".
Khác với commit message (chỉ nói "đã làm gì"), progress file ghi "đang dở ở đâu". Session sau, thay vì quét lại toàn bộ codebase, agent đọc file này như "tóm tắt tình hình" để reconstruct ngăn xếp công việc.
2. Structured State Serialization (JSON Feature List) Anthropic đề xuất pattern này để chống "overwriting" — hiện tượng agent quên mình đã làm gì và bắt đầu lại từ đầu. Thay vì để agent tự đoán, bạn duy trì một JSON array làm "single source of truth":
[
{"task": "Setup database schema", "status": "done", "commit": "a1b2c3"},
{"task": "Implement API layer", "status": "in_progress", "current_file": "routes/users.py", "line": 45}
]Session handoff chính là việc ghi JSON này ra disk và đọc lại ở session kế. Agent thấy in_progress, biết ngay phải mở routes/users.py tại dòng 45, thay vì bắt đầu lại từ "Setup database".
3. Checkpoint & Resume (Snapshotting) Trong các harness phức tạp như SWE-agent, system tạo checkpoint sau mỗi tool execution. Checkpoint chứa: (a) filesystem state, (b) lịch sử action, (c) environment variables.
Khi resume, system không chỉ đọc text mà khôi phục cả container/docker state. Đây là handoff "nặng" (heavyweight) nhưng đảm bảo tính deterministic — phù hợp khi agent chạy unsupervised trong nhiều giờ và có thể bị kill do OOM.
Ví dụ thực tế
Claude Code: Từ 5-level compression đến MEMORY.md
Claude Code sử dụng chiến lược nén context 5 cấp độ (MicroCompact → Truncation). Khi context gần đầy, nó không chỉ xóa bớt mà tóm tắt thành file CLAUDE.md hoặc MEMORY.md — một dạng handoff document.
File này không chỉ liệt kê code đã sửa, mà còn ghi lại rationale: "Tại sao chọn strategy pattern thay vì inheritance". Session sau, file này được đưa vào system prompt như "tâm trí" đã được khởi tạo, cho phép agent tiếp tục refactoring từ đúng vị trí logic, không phải đoán lại từ đầu.
progress.txt trong workflow dài hạn
Giả sử bạn dùng AI để viết một SDK trong 3 tháng. Mỗi ngày bạn chat 1 giờ rồi đi ngủ. Nếu không có handoff, agent sáng mai có thể "ảo tưởng" rằng bạn muốn refactor lại từ đầu vì không thấy dấu hiệu "đang dở".
Cuối mỗi session, agent ghi ra progress.txt:
[2024-01-15]
- Hoàn thành: Auth module với JWT
- Đang dở: Refresh token chưa test xong (file: auth/refresh.test.ts)
- Blocker: Cần quyết định có dùng Redis không (discussed, chọn: dùng local cache trước)
- Next: Viết test case cho edge case expirySáng mai, bạn chỉ cần nói "tiếp tục từ progress.txt", agent ngay lập tức biết mình đang đứng ở đâu, tránh lãng phí 15-20k tokens để "bắt nhịp".
Anthropic JSON Feature List (Anti-overwrite)
Trong các paper về Agent Computer Interface (ACI), Anthropic mô tả việc dùng JSON để tránh hiện tượng agent quên tiến độ. Khi agent chuyển từ "đang code" sang "tạm dừng chờ user", nó cập nhật file plan.json.
Nếu session bị dừng đột ngột (mất điện, lỗi API), file này tồn tại trên ổ cứng. Session mới đọc file, thấy trạng thái in_progress tại task cụ thể, và resume chính xác từ điểm dừng, thay vì bắt đầu lại từ task đầu tiên trong danh sách.
Ứng dụng
Sinh viên làm project cuối kỳ
Bạn code với AI 2 tiếng buổi tối, rồi đi ngủ. Sáng mai tiếp tục. Dùng progress.txt, bạn đảm bảo 30 ngày liên tục làm việc với "trí nhớ" liền mạch về tiến độ, dù context window chỉ chứa được 1/10 project. Không còn tình trạng "Hôm qua chúng ta đang làm gì nhỉ?".
Developer trong doanh nghiệp (Shift handoff)
Team 24/7 có ca "AI pair programmer" ban ngày và ban đêm. Developer ca 1 kết thúc bằng cách commit không chỉ code, mà cả file handoff.md ghi lại: "Đang optimize query ở queries.py, đã thử index nhưng chưa chạy benchmark, cần test với dataset lớn hơn".
Developer ca 2 đọc handoff.md, tiếp tục ngay từ benchmark chứ không phải đọc lại toàn bộ git log để đoán. Đây là cách "truyền ca" (shift handoff) giữa con người thông qua trung gian là AI agent.
AI Agent tự chủ (Autonomous agents)
Khi agent chạy unsupervised trong nhiều giờ (ví dụ: tự động fix bug overnight), nó tự động tạo checkpoint mỗi 15 phút. Nếu process bị kill (OOM hay lỗi model), orchestrator khởi động session mới, inject checkpoint vào context, và agent tiếp tục từ bước trước khi crash — không cần human intervention để "nhắc lại từ đầu".
So sánh
| Đặc điểm | Session Handoff | Simple Chat History | Persistent Database |
|---|---|---|---|
| Scope | Task-specific execution state | Toàn bộ conversation | Domain knowledge/facts |
| Lifespan | Vài giờ đến vài ngày (cross-session) | Single session | Vĩnh viễn |
| Format | Structured (JSON, Markdown checklist) | Unstructured text | SQL/Vector |
| Kích thước | Compact (vài KB) | Lớn (có thể vượt 100k tokens) | Không giới hạn |
| Mục tiêu | Tiếp tục công việc dở | Nhớ preference, style | Tra cứu kiến thức |
| Ví dụ | progress.txt, plan.json | "Như tôi đã nói hôm qua..." | RAG với company docs |
Session handoff không thay thế memory hay database, mà lấp đầy khoảng trống giữa "nhớ mãi mãi" và "quên ngay lập tức". Nó giống như RAM giữa các lần boot — đủ để reconstruct trạng thái làm việc mà không cần load toàn bộ hệ điều hành từ đầu.
Bài viết liên quan
Cùng cụm
State Management: State sống sót qua context window
Hiểu cơ chế persistence cơ bản trước khi truyền handoff giữa các session
5 chiến lược nén context: MicroCompact → Truncation
Kỹ thuật nén 5 cấp độ của Claude Code để tạo handoff document hiệu quả
Memory 3 tầng: Index → Topic files → Session transcripts
Kiến trúc lưu trữ phân tầng giữa long-term knowledge và short-term handoff
Progress Tracking: JSON feature list, checklist, progress files
Các pattern cụ thể để đánh dấu tiến độ và truyền trạng thái
Đọc tiếp
Progress Tracking: JSON feature list, checklist, progress files
Khám phá pattern theo dõi tiến độ AI agent qua sessions. Từ JSON feature list chống ghi đè đến progress.txt — cách đảm bảo agent không 'quên' task dài hạn.
Tại sao cần Multi-Agent? Khi single agent không đủ
Single agent thường 'tuyên bố xong sớm' và bỏ sót yêu cầu. Hiểu lý do cần Multi-Agent qua case study Anthropic và Claude Code với trade-off chi phí.