Claude Code

Esc Esc in Claude Code: rewind code and conversation with checkpoints

TL;DR

Claude Code checkpoints before each prompt; rewind with Esc Esc or /rewind and five options. Cheaper than several correction turns, but Bash commands, subagents and external edits may not be covered.

Bạn nhờ Claude Code refactor một module, nó sửa 12 file, test đỏ lòm, và cách nó đi hoàn toàn sai hướng. Phản xạ thường gặp là gõ thêm "không, quay lại cách cũ đi", tức là tốn thêm vài lượt và để lại một đống lịch sử sai trong context. Cách nhanh hơn: nhấn Esc hai lần. Claude Code tự lưu checkpoint trước mỗi prompt, nên bạn có thể tua lại cả code lẫn hội thoại về đúng thời điểm trước khi mọi thứ hỏng. Bài này giải thích checkpoint hoạt động ra sao, các lựa chọn trong menu rewind và những giới hạn cần biết để không "tưởng đã khôi phục mà không phải".

Checkpoint được tạo khi nào?

  • Mỗi prompt bạn gửi (bắt đầu một lượt) tạo một checkpoint, ghi lại trạng thái file trước khi Claude sửa.
  • Giữ snapshot cho 100 checkpoint gần nhất trong phiên; lưu cùng hội thoại nên vẫn rewind được sau khi resume.
  • Snapshot bị dọn theo chu kỳ, mặc định khoảng 30 ngày sau lần lưu cuối (chỉnh bằng cleanupPeriodDays).

Menu rewind: 5 lựa chọn

Gõ /rewind hoặc nhấn Esc hai lần khi ô nhập trống, chọn prompt muốn quay về, rồi chọn hành động:

Lựa chọnLàm gìDùng khi
Restore code and conversationTua cả file lẫn hội thoạiHướng làm sai hoàn toàn, muốn làm lại từ đầu với prompt tốt hơn
Restore conversationTua hội thoại, giữ code hiện tạiCode ổn nhưng lịch sử trò chuyện lan man, muốn context sạch
Restore codeHoàn tác file, giữ hội thoạiMuốn Claude nhớ "cách vừa rồi thất bại vì sao" rồi thử cách khác
Summarize from hereNén phần hội thoại từ điểm này trở đi thành tóm tắtMột đoạn debug dài đã xong, muốn giải phóng context nhưng giữ chỉ dẫn ban đầu
Summarize up to hereNén phần trước điểm này, giữ nguyên phần sauPhần khám phá đầu phiên không còn cần chi tiết

Sau khi tua hội thoại, prompt gốc được điền lại vào ô nhập để bạn sửa rồi gửi lại. Với hai lựa chọn Summarize, có thể gõ thêm hướng dẫn tóm tắt (ví dụ "giữ lại các quyết định về schema") trước khi nhấn Enter. Summarize giống một /compact có chọn lọc; muốn rẽ nhánh thử hướng khác mà vẫn giữ phiên gốc thì dùng /branch.

Vì sao rewind tiết kiệm token?

Sửa sai bằng cách nói tiếp nghĩa là mọi lượt sau phải "mang theo" cả phần thử sai: diff hỏng, log lỗi, lời giải thích. Rewind cắt bỏ phần đó khỏi context. Kết hợp với prompt tốt hơn, lượt làm lại thường ngắn hơn nhiều so với 3–4 lượt chỉnh sửa qua lại.

Giới hạn quan trọng

  • Lệnh Bash không được theo dõi đầy đủ: file chỉ bị thay đổi bởi lệnh shell (ví dụ rm, mv, script sinh code) mà Claude chưa từng sửa bằng công cụ edit thì rewind không khôi phục.
  • Subagent: phần lớn chỉnh sửa của subagent (trừ skill fork chạy foreground) không nằm trong checkpoint của phiên chính.
  • Thay đổi bên ngoài: file bạn tự sửa ngoài Claude Code hoặc do phiên khác sửa thường không được ghi lại.
  • Symlink/hard link: bị bỏ qua khi khôi phục, kèm cảnh báo "skipped N files".
  • Tin nhắn gửi giữa chừng khi Claude đang làm có thể không có checkpoint riêng.

Tài liệu nói rõ checkpoint là công cụ khôi phục nhanh trong phiên, không thay git.

Áp dụng thế nào?

  • Dev: Tập phản xạ "sai hướng thì Esc Esc, sửa prompt, gửi lại" thay vì cãi tiếp. Commit trước các thay đổi lớn hoặc khi Claude sắp chạy lệnh shell có tác dụng phụ.
  • Tech Lead: Hướng dẫn team kết hợp: checkpoint cho thử nghiệm ngắn, worktree/branch cho thử nghiệm dài, git cho lịch sử thật.
  • PM: Khi dùng Claude soạn tài liệu, dùng "Restore conversation" để thử nhiều phong cách viết khác nhau trên cùng bản nháp.

Sources & references

  1. Checkpointing — Claude Code Docs