Claude Code /rewind không thể hoàn tác file bị xóa qua Shell: Giới hạn và kỹ thuật phòng hộ (Claude Codeの限界)
Thực nghiệm kiểm chứng tính năng /rewind của Claude Code: tại sao file bị xóa qua lệnh shell hoặc subagent lại biến mất vĩnh viễn và cách nhận biết qua dấu hiệu No code changes.
✍️ Tác giả nguồn:
suwa_nobu(kỹ sư tại JQIT) trên cộng đồng Qiita Nhật Bản.
🔗 Tiêu đề gốc: Claude Code に頼んで消したファイルは、/rewind で戻らなかった。見分け方はメニューの「No code changes」
🌐 Bài gốc: Qiita · 18c8456c7a594b24a737, đăng và cập nhật ngày 16/10/2026, đọc ngày 17/10/2026.
📝 Biên soạn: BrSE.vn tổng hợp, phân tích ranh giới an toàn của các trợ lý AI Agent lập trình và đề xuất quy trình phối hợp dự án an toàn cho kỹ sư và BrSE. Đoạn hội thoại và câu tiếng Nhật được biên soạn độc lập.
📌 Điểm nhấn cốt lõi (Key Takeaways)
- Cơ chế Checkpoint chỉ theo dõi công cụ nội bộ: Lệnh
/rewindcủa Claude Code khôi phục hoàn hảo 100% (3/3 lần thử) các file được chỉnh sửa hoặc tạo mới bằng công cụ nội tại của agent (Edit,Write). Khi hoàn tác, file tạo mới sẽ tự động bị xóa bỏ để trả lại trạng thái cũ. - Vùng mù lệnh Shell: Khi yêu cầu AI xóa file (
old.txt), Claude Code thường gọi lệnh Shell hệ thống (như PowerShellRemove-Itemtrên Windows hoặcrmtrên Linux/macOS). Checkpoint hoàn toàn không ghi nhận thao tác của shell, dẫn đến tỷ lệ khôi phục là 0/3. - Vùng mù Subagent: Các sửa đổi do subagent thực hiện trong tiến trình con cũng không được đưa vào checkpoint của session chính, khiến
/rewindkhông thể hoàn tác. - Dấu hiệu cảnh báo nguy hiểm: Nếu menu
/rewindhiển thị dòng chữNo code changesdưới câu prompt, điều đó không có nghĩa là file không bị thay đổi, mà là hệ thống không thể khôi phục bất kỳ file nào từ prompt đó. - Nguyên tắc an toàn tối thượng: Checkpoint của AI chỉ là cứu cánh phiên làm việc tức thời (~30 ngày); hãy luôn thực hiện
git committrước khi giao các tác vụ dọn dẹp hoặc tái cấu trúc quy mô lớn cho AI.
1. Ảo tưởng an toàn khi giao phó hệ thống file cho AI Agent
Các công cụ lập trình tự động dựa trên mô hình ngôn ngữ lớn (như Claude Code CLI, Codex, Devin, hay GitHub Copilot Workspace) đang thay đổi hoàn toàn năng suất phát triển. Một trong những tính năng tạo cảm giác an tâm nhất cho lập trình viên là khả năng quay ngược thời gian (Checkpoint / Rewind): nếu AI viết hỏng, chỉ cần gõ /rewind hoặc nhấn phím Esc hai lần là code sẽ trở về nguyên trạng.
Thế nhưng, cảm giác an toàn này rất dễ trở thành cái bẫy chết người. Tác giả suwa_nobu đã thực hiện một thí nghiệm kiểm chứng nghiêm ngặt trên môi trường thực tế (Windows 10, Claude Code 2.1.300, model Claude 3.7 Sonnet) để đo lường xem /rewind thực sự hoàn tác được những gì.
AIエージェントにファイルの削除を依頼する前に、必ずGitでコミットを残しておく必要があります。
Bản dịch: Trước khi yêu cầu AI agent xóa file, nhất định phải tạo commit Git để lưu lại trạng thái.
2. Bảng kết quả thực nghiệm 15 lượt kiểm chứng
Tác giả đã chuẩn bị các file văn bản mẫu và yêu cầu Claude Code thực hiện 5 tác vụ độc lập (mỗi tác vụ lặp lại 3 lần và kiểm tra mã băm SHA của file):
| Tác vụ yêu cầu Claude Code thực hiện | Công cụ AI thực tế sử dụng | Tỷ lệ hoàn tác thành công bằng /rewind |
Trạng thái hiển thị trên menu |
|---|---|---|---|
1. Sửa 1 dòng trong file (notes.txt) |
Công cụ Edit của Claude |
3/3 (100% Khôi phục) | notes.txt +1 -1 |
2. Ghi đè toàn bộ file (config.txt) |
Công cụ Write của Claude |
3/3 (100% Khôi phục) | config.txt +1 -20 |
3. Tạo file mới (new.txt) |
Công cụ Write của Claude |
3/3 (100% Khôi phục) | new.txt +1 -0 (File biến mất về trạng thái ban đầu) |
4. Xóa file đã có (old.txt) |
Lệnh Shell (Remove-Item / rm) |
0/3 (MẤT TRẮNG VĨNH VIỄN) | No code changes (Không hiện nút Restore code) |
| 5. Nhờ subagent sửa dòng 3 | Công cụ Agent (Subagent) |
0/3 (Không thể khôi phục) | No code changes (File vẫn bị sửa đổi) |
3. Ranh giới kiến trúc của hệ thống Checkpoint
Sơ đồ thể hiện vùng an toàn và vùng nguy hiểm khi thao tác với AI Agent:
Sơ đồ do BrSE.vn tự vẽ, phát hành theo CC0 1.0 Universal. Tệp nằm trong repository; đây không phải screenshot lấy từ Qiita.
Tại sao lệnh Shell và Xóa file lại thất bại?
Tài liệu chính thức của Anthropic về cơ chế Checkpointing đã nêu rõ:
“Checkpointing does not track files modified by Bash commands.” (Cơ chế lưu điểm phục hồi không theo dõi các file bị thay đổi bởi lệnh Bash/Shell).
Khi bạn bảo AI: “Xóa file old.txt đi”, agent không có một API chuyên dụng tên là DeleteTool. Thay vào đó, mô hình tư duy rằng: “Để xóa file trên hệ điều hành này, công cụ tốt nhất là thực thi lệnh hệ thống qua Bash hoặc PowerShell”. Kết quả là:
- File bị xóa thẳng khỏi ổ đĩa qua lời gọi hệ thống (system call).
- Trình theo dõi checkpoint của Claude Code không thấy công cụ
EdithayWritenào được gọi. - Khi mở menu
/rewind, Claude Code hiển thị:old.txt を削除して。ほかは何もしないで。 No code changes - Màn hình xác nhận chỉ có các lựa chọn khôi phục hội thoại (
Restore conversation), hoàn toàn biến mất tùy chọn khôi phục mã nguồn (Restore code)!
Tương tự, khi dùng Subagent, tài liệu cũng ghi chú:
“Any other subagent: rewinding doesn’t restore the edits. Use git to revert them.”
4. Dấu hiệu nhận biết: No code changes không có nghĩa là an toàn
Điểm tai hại nhất trong trải nghiệm người dùng (UX) hiện tại là cụm từ No code changes.
Khi nhìn thấy dòng chữ này, nhiều kỹ sư dễ nhầm tưởng rằng: “À, câu lệnh vừa rồi của mình chưa làm thay đổi file nào cả, mọi thứ vẫn nguyên vẹn”. Nhưng thực tế hoàn toàn trái ngược: File đã bị thay đổi (hoặc đã bị xóa sổ hoàn toàn), nhưng cơ chế checkpoint đầu hàng không thể ghi nhận diff để hoàn tác!
Dòng thông tin dưới Prompt trong /rewind |
Ý nghĩa thực tế | Hành động của lập trình viên |
|---|---|---|
Tên file kèm số dòng: notes.txt +1 -1 |
File nằm trong tầm kiểm soát của checkpoint | Có thể yên tâm chọn 3. Restore code |
No code changes |
File đã bị can thiệp bởi Shell/Subagent hoặc không đổi | Dừng lại ngay! Kiểm tra bằng git status và git diff |
5. Quy tắc vàng cho BrSE và Kỹ sư khi làm việc với AI Coding Agent
Trong các dự án phần mềm chuyên nghiệp, việc để mất mát mã nguồn hoặc xóa nhầm file cấu hình của khách hàng là sự cố nghiêm trọng (Incident bậc P1/P2). Để phòng ngừa:
- Commit trước khi yêu cầu dọn dẹp: Bất cứ khi nào bạn định ra lệnh cho AI dọn dẹp các file thừa, xóa dead-code, hoặc tái cấu trúc thư mục, hãy gõ ngay:
git add -A && git commit -m "chore: checkpoint before AI refactoring" - Không tin tưởng tuyệt đối vào cơ chế phục hồi của tool: Lệnh
/rewindchỉ là cứu cánh tạm thời trong nội bộ session kéo dài tối đa 30 ngày hoặc 100 lượt tương tác. Git mới là chân lý bảo vệ dự án. - Cẩn trọng với file chưa được Git theo dõi (Untracked files): Nếu bạn vừa tạo file mới, chưa commit, mà AI chạy lệnh
rmqua shell thì cả/rewindlẫngit checkoutđều không thể cứu vãn!
AIの巻き戻し機能に依存せず、Gitのコミットによるバージョン管理を
Bản dịch: Đừng phụ thuộc vào tính năng hoàn tác của AI, hãy quán triệt việc quản lý phiên bản chặt chẽ bằng các commit Git.
📚 Sổ tay thuật ngữ IT & Hán Việt (重要IT用語集)
| Thuật ngữ (Kanji) | Furigana / Romaji | Âm Hán Việt | Ý nghĩa tiếng Việt | Cấp độ |
|---|---|---|---|---|
| 巻き戻し | まきもどし |
QUYỂN LỆ | Hoàn tác, tua lại, quay ngược trạng thái (Rewind) | Technical |
| 削除 | さくじょ |
TƯỚC TRỪ | Xóa bỏ (Delete / Remove) | N3 |
| 上書き | うわがき |
THƯỢNG THƯ | Ghi đè (Overwrite) | N2 |
| 元どおり | もとどおり |
NGUYÊN | Trở về như cũ, nguyên trạng | N3 |
| 手動編集 | しゅどうへんしゅう |
THỦ ĐỘNG BIÊN TẬP | Chỉnh sửa thủ công bằng tay | N2 |
| 依存 | いぞん |
Y TỒN | Phụ thuộc vào (Dependency) | N2 |
| 徹底 | てってい |
TRIỆT ĐỂ | Quán triệt, thực hiện nghiêm ngặt | N1 |
| 検証環境 | けんしょうかんきょう |
KIỂM CHỨNG HOÀN CẢNH | Môi trường kiểm thử / thử nghiệm | Technical |
| 上限 | じょうげん |
THƯỢNG HẠN | Giới hạn trên, mức trần | N2 |
| 救済策 | きゅうさいさく |
CỨU TẾ SÁCH | Biện pháp cứu cánh, giải pháp khắc phục sự cố | N1 |
📐 Ngữ pháp tiếng Nhật IT bổ trợ (文法解説)
- 〜に頼んで〜させる (
N3): Nhờ / yêu cầu ai đó làm việc gì- Cấu trúc:
Danh từ + に頼んで + V-させ(る) - Ngữ cảnh IT: AIに頼んでファイルを消させる = Nhờ AI thực hiện xóa file.
- Cấu trúc:
- 〜とは限らない (
N3): Không hẳn là…, chưa chắc đã là…- Cấu trúc:
Thể thông thường + とは限らない - Ngữ cảnh IT: ファイルが変わっていないとは限らない = Không hẳn là file không bị thay đổi (có thể đã bị xóa ngầm).
- Cấu trúc:
- 〜おそれがある (
N2): Có nguy cơ / e rằng sẽ dẫn đến kết quả xấu- Cấu trúc:
V-る / Danh từ の + おそれがある - Ngữ cảnh IT: データが失われるおそれがある = Có nguy cơ dữ liệu sẽ bị mất trắng.
- Cấu trúc:
- 〜に備える (
N2): Chuẩn bị sẵn sàng để ứng phó với…- Cấu trúc:
Danh từ + に備える - Ngữ cảnh IT: 戻せないものに備える = Chuẩn bị sẵn phương án ứng phó cho những thứ không thể hoàn tác.
- Cấu trúc: