되돌리기가 예상보다 적은 것을 복구하는 이유
체크포인트 생성에는 명확한 트리거가 있습니다. Anthropic은 다음과 같이 설명합니다: "Claude와 작업할 때, 체크포인트 기능은 턴을 시작하는 각 프롬프트를 전송하기 전에 코드 상태를 자동으로 캡처합니다." 즉, 메커니즘은 프롬프트 단위로 작동합니다 — "턴을 시작하는 모든 프롬프트는 새로운 체크포인트를 생성합니다."
여기서 핵심은 "턴을 시작하는(that starts a turn)"이라는 문구입니다. Claude가 작업을 수행하는 도중에 무언가를 입력하면 어떻게 되는지 문서에 명시되어 있습니다: "Claude가 작업하는 동안 대기열에 추가한 메시지가 실행 중인 턴 내에서 Claude에게 도달하면, 새 턴을 시작하는 대신 해당 턴에 합류합니다. 메시지는 대화에 나타나지만, Claude Code는 이에 대한 체크포인트를 생성하지 않으며 되돌리기 메뉴에도 표시되지 않습니다." Anthropic은 이에 대한 복구 방법도 제시합니다 — "이러한 메시지를 제거하거나 그 이후에 Claude가 수행한 수정을 취소하려면, 턴을 시작한 프롬프트로 되돌리십시오. 그러면 메시지가 도착하기 전에 Claude가 수행한 작업을 포함하여 전체 턴이 되돌아갑니다."
추적 범위 또한 매우 구체적입니다. Anthropic은 "체크포인트 기능은 Bash 명령어로 수정된 파일을 추적하지 않습니다"라고 명시하며, 다음과 같은 경계를 둡니다: "Claude의 파일 편집 도구를 통해 직접 편집된 파일만 추적됩니다." 스크립트가 이동한 파일은 스냅샷 대상에서 제외됩니다.
Subagents는 실행 방식에 따라 나뉩니다. Anthropic은 subagent가 "Claude의 파일 편집 도구로 수정을 수행하지만, Claude Code는 일반적으로 세션의 체크포인트에 해당 수정을 캡처하지 않습니다"라고 언급하며 다음과 같이 사례를 구분합니다: 포그라운드로 포크된 skill은 "자신의 턴 동안 작업 트리를 수정하므로, 되돌리기를 하면 평소처럼 수정 사항이 복원됩니다." 반면 "그 외의 다른 subagent의 경우: 되돌리기를 해도 수정 사항이 복원되지 않습니다. git을 사용하여 되돌리십시오."
병렬로 수행된 작업 역시 범위 밖입니다: "체크포인트 기능은 현재 세션 내에서 편집된 파일만 추적합니다. Claude Code 외부에서 파일에 가한 수동 변경 사항 및 다른 동시 세션의 수정 사항은 현재 세션과 동일한 파일을 수정하지 않는 한 일반적으로 캡처되지 않습니다." 두 개의 터미널이 열려 있었다면, 복원하려는 스냅샷을 유지하고 있던 것은 그중 하나뿐이었을 것입니다.
그리고 조용히 경고를 보내는 카테고리도 있습니다. Anthropic은 "체크포인트 기능은 심볼릭 링크 또는 하드 링크된 파일을 되돌리지 않습니다"라고 명시하며, Claude Code가 "심볼릭 링크나 하드 링크인 추적 경로를 건너뛰고 Restored the code, but skipped N files 경고를 표시합니다"라고 설명합니다. 또한 "건너뛴 파일은 현재 콘텐츠를 그대로 유지합니다." dotfile 관리자나 일부 패키지 관리자가 파일을 정확히 이 카테고리에 배치합니다.
마지막으로 시간 관련 세부 정보입니다. 스냅샷은 영원히 유지되지 않습니다: "Claude Code는 세션에서 가장 최근의 체크포인트 100개에 대한 파일 스냅샷을 보관합니다." 그리고 이와 별개로 "Claude Code는 보존 정리(retention sweep) 시 세션의 파일 스냅샷을 삭제하며, 기본값은 세션이 마지막으로 스냅샷을 저장한 후 약 30일입니다." 그 결과는 다음과 같습니다: "스냅샷이 사라진 체크포인트로 되돌리기를 시도하면 No files were restored 오류와 함께 실패할 수 있습니다." 문서에 명시된 해결책은 설정입니다 — "스냅샷을 더 오래 보관하려면 cleanupPeriodDays를 설정하십시오."
사람들이 대신 시도하는 방법들
Claude에게 마지막 변경 사항을 취소해 달라고 요청하기. 습관이 될 정도로 자주 작동하지만, 이는 복원이 아니라 재편집입니다. 이전 상태와 유사한 새로운 상태를 얻게 되며, 이는 이전 상태와 완전히 동일하지 않습니다.
세션이 잘못되었을 때 /clear 실행하기. 이는 대화를 지우는 것이지 파일을 롤백하는 것이 아닙니다. Anthropic은 다시 돌아갈 수 있는 연결 고리를 문서화해 두었습니다: 동일한 Claude Code 프로세스에서 이전에 /clear를 실행한 경우, "되돌리기 메뉴의 목록 맨 위에 /resume <session-id> (previous session)라는 레이블이 지정된 추가 항목이 표시됩니다." 단, 이는 최신 버전이 필요합니다.
실제로 원하는 것은 더 많은 컨텍스트 공간인데 되돌리기를 실행하는 경우. 서로 다른 두 가지 요구 사항이 하나의 메뉴를 공유합니다. 요약(summarize) 옵션은 대화를 압축하고, 복원(restore) 옵션은 상태를 변경합니다. Anthropic은 이를 명확히 구분합니다: "요약은 디스크의 파일을 변경하지 않으며, 원본 메시지는 세션 트랜스크립트에 그대로 유지되므로 Claude가 여전히 세부 정보를 참조할 수 있습니다." 압축 후에도 유지할 내용을 선택하는 것은 별도의 작업이며, 저희는 보존해야 할 대상에 자동 압축 적용하기에서 이를 자세히 다루었습니다.
세션 트랜스크립트를 기록으로 취급하기. 트랜스크립트는 무슨 일이 일어났는지 추적하는 데는 훌륭하지만 나중에 정보를 찾아보는 용도로는 적합하지 않습니다. 저희는 색인된 세션 로그와 메모리의 차이에서 이 차이점을 설명했습니다.
체크포인트를 버전 관리 도구로 사용하기. Anthropic은 이에 대해 직접 언급합니다: "체크포인트는 빠른 세션 수준의 복구를 위해 설계되었습니다. 영구적인 버전 기록 및 협업을 위해서는 커밋, 브랜치 및 장기 기록을 위해 Git과 같은 버전 관리 도구를 계속 사용하십시오."
대안적인 접근 방식을 탐색하기 위해 되돌리기 실행하기. 이를 위한 전용 메커니즘이 있으며, 문서에서도 이를 안내합니다: 원래 세션을 그대로 유지하면서 분기하여 다른 접근 방식을 시도하려면 /branch를 사용하십시오. 탐색을 위해 되돌리기를 한다는 것은 나중에 다시 필요할 수 있는 내용을 덮어쓴다는 것을 의미합니다.
해결책: 메뉴를 두 개의 작업으로 이해하고, 어떤 수정 사항이 범위 내에 있는지 파악하기
/rewind를 단일 버튼으로 생각하지 않는 순간 모든 것이 쉬워집니다.
Step 1: 메뉴를 열고 어떤 옵션이 제공되는지 확인하기
Anthropic은 메뉴에 진입하는 두 가지 방법을 제공합니다: "되돌리기 메뉴를 열려면 /rewind를 실행하거나, 프롬프트 입력창이 비어 있을 때 Esc를 두 번 누르십시오." 실행하기 전에 알아두어야 할 주의 사항이 있습니다. 입력창에 텍스트가 있는 경우 Esc를 두 번 누르면 텍스트가 지워지지만, 지워진 텍스트는 입력 기록에 저장됩니다.
메뉴에는 사용자가 보낸 각 프롬프트가 나열되며, 최대 6가지 작업이 제공됩니다: "Restore code and conversation: 코드와 대화를 모두 해당 시점으로 되돌립니다", "Restore conversation: 현재 코드는 유지하면서 해당 메시지로 대화를 되돌립니다", "Restore code: 대화는 유지하면서 파일 변경 사항을 되돌립니다", "Summarize from here", "Summarize up to here", 그리고 "Never mind".
어떤 옵션이 표시되는지 자체가 중요한 정보입니다. Anthropic은 다음과 같이 설명합니다: "두 가지 코드 복원 옵션은 선택한 체크포인트에 되돌릴 추적된 파일 변경 사항이 있을 때만 표시됩니다. 해당 시점 이후에 캡처된 파일 수정 사항이 없으면 메뉴에는 Restore conversation, 요약 옵션, 그리고 Never mind만 제공됩니다." 따라서 Claude가 파일을 변경한 것이 확실한 시점인데도 코드 옵션이 보이지 않는다면, 이는 해당 변경 사항이 추적 대상 외의 영역(Bash 명령어, 백그라운드 subagent, 다른 세션 등)에서 발생했음을 나타내는 신호입니다.
기대할 수 있는 편리한 기능 중 하나는 다음과 같습니다: "대화를 복원하거나 'Summarize from here'를 선택한 후에는 선택한 메시지의 원래 프롬프트가 입력 필드에 복원되므로 이를 다시 보내거나 편집할 수 있습니다."
Step 2: 복원에 의존하기 전에 범위 외의 4가지 카테고리 확인하기
문제가 발생하기 쉬운 순서대로 목록을 살펴보십시오:
Bash 명령어를 통해 수행된 작업이 있습니까? Anthropic의 설명에 따르면, 이러한 파일 수정 사항은 "되돌리기를 통해 취소할 수 없습니다."
백그라운드 subagent가 작업을 수행했습니까? 포그라운드로 포크된 skill을 제외한 다른 모든 subagent의 경우, "되돌리기를 해도 수정 사항이 복원되지 않습니다. git을 사용하여 되돌리십시오."
동일한 리포지토리에 두 번째 세션이 열려 있었습니까? 다른 동시 세션의 수정 사항은 "동일한 파일을 수정하지 않는 한 일반적으로 캡처되지 않습니다."
경로 중 심볼릭 링크나 하드 링크가 있습니까? 이러한 경로는 파일 이름 대신 개수를 표시하는 경고와 함께 건너뛰게 됩니다. 어떤 경로가 건너뛰어졌는지 확인하기 위해 Anthropic은 다음과 같은 진단 방법을 문서화해 두었습니다: "복원하기 전에 /debug로 디버그 로깅을 켜십시오. ~/.claude/debug/<session-id>.txt에 있는 디버그 로그에 건너뛴 각 경로의 이름이 표시됩니다."
Step 3: 증거를 되돌려 지우기 전에 결론을 기록해 두기
되돌리기는 대개 무언가를 배우게 해 준 시도의 끝에 실행됩니다. 예를 들어, 이 라이브러리는 문서에 명시된 대로 작동하지 않는다거나, 이 스키마 변경이 해당 작업을 망가뜨린다거나, 특정 이유로 이 접근 방식을 포기했다는 등의 사실을 알게 되었을 때입니다. 'Restore code and conversation'은 코드와 함께 이러한 발견이 포함된 트랜스크립트까지 제거합니다.
먼저 30초만 시간을 내십시오. 무엇이 왜 작동하지 않았는지에 대한 한 문장은 버리려는 브랜치보다 더 가치 있으며, 그렇지 않으면 다음 달에 똑같은 시행착오를 겪게 될 것입니다. 진행 과정에서 찾아낸 명령어와 호출 방식에도 동일한 논리가 적용되며, 이는 Claude Code가 명령어 기록을 잊어버릴 때에서 설명한 공백에 해당합니다.
MemoryLake에서 설정하기
체크포인트는 약 한 달 정도의 기간을 두고 세션 수준의 복구를 수행하도록 설계되었습니다. 세션 내부에서 도달한 결론은 더 긴 보존 기간을 가진 공간이 필요합니다. MemoryLake는 단일 세션의 스냅샷 외부에서 이러한 결론을 의도적으로 기록해 두는 저장소이며, 연결된 모든 어시스턴트에서 읽을 수 있습니다. 항목은 본인의 언어로 직접 작성합니다. Anthropic의 시스템이나 다른 벤더의 저장소에서 데이터를 읽거나, 쓰거나, 삭제하지 않습니다. 사용자의 체크포인트, 트랜스크립트, 로컬 파일은 전적으로 자체 제어 하에 유지됩니다.
Step 1: API 키 생성하기
대시보드에서 키를 생성합니다. 이 키를 통해 터미널 세션, 에디터, 챗 어시스턴트가 트랜스크립트에서 매번 다시 학습할 필요 없이 동일한 사실 정보에 접근할 수 있게 됩니다.

Step 2: 첫 번째 메모리 업로드하기
포기한 시도의 결과부터 시작하십시오: 되돌리기를 통해 버린 접근 방식, 실패한 이유, 새롭게 발견된 제약 조건 등입니다. 되돌리기를 하면 지워지는 운영 세부 정보(마침내 작동한 호출 명령어, 중요했던 플래그, 단계별 실행 순서 등)도 함께 추가하십시오.

Step 3: AI 및 에이전트 연결하기
도구들이 이 레이어를 가리키도록 설정하여, 이전 스크롤백의 마지막 내용에서 사실을 재구성하는 대신 세션 시작 시점에 해당 정보들을 로드할 수 있도록 하십시오. 그런 다음 제대로 테스트해 보십시오: 다른 어시스턴트에게 왜 그 접근 방식을 포기했는지 물어보십시오. 답변을 한다면, 그 발견은 이를 만들어낸 세션보다 더 오래 살아남은 것입니다.

실제 작업에서 달라지는 점
첫 번째 변화는 부분 복원이 더 이상 혼란스럽지 않다는 점입니다. 되돌아갈 것으로 예상했던 파일이 그대로 남아 있을 때, 범위 외의 4가지 카테고리가 그 이유를 설명해 주며, 메뉴에서 비활성화된 코드 옵션이 미리 이를 알려주는 경우가 많습니다.
두 번째는 '되돌아가기'와 '공간 확보하기'를 구분하게 된다는 점입니다. 복원(restore)은 상태를 변경하고, 요약(summarize)은 대화를 압축하면서 파일은 그대로 두고 원본 메시지를 트랜스크립트에 남겨둡니다. 이 구분이 명확해지면, 다른 기능이 필요할 때 엉뚱한 기능을 사용하는 일이 없어집니다. 이는 압축 단계가 있는 모든 에이전트에서 나타나는 것과 동일한 구분이며, 압축 후에도 유지할 내용을 결정하는 것이 일회성 작업이 아니라 반복적인 과제인 이유이기도 합니다.
세 번째는 약 30일의 보존 정리가 갑자기 맞닥뜨리는 일이 아니라 계획할 수 있는 일이 된다는 점입니다. 언젠가 되돌리려고 했던 오래된 세션은 결국 되돌릴 수 없게 되며, 더 긴 기간이 필요한 경우 문서에 명시된 해결책인 cleanupPeriodDays를 사용할 수 있습니다.
네 번째는 포기한 작업이 무언가를 만들어내기 시작한다는 점입니다. 모든 되돌리기 작업이 하나의 기록된 문장을 남긴다면, 실패는 스냅샷과 함께 사라지는 대신 지식으로 축적됩니다.
Claude Code 세션 되돌리기를 위한 모범 사례
수정 사항은 별도의 턴으로 전송하십시오. 실행 중인 턴에 합류하는 메시지는 체크포인트를 생성하지 않으며 되돌리기 메뉴에도 표시되지 않습니다. 턴이 끝날 때까지 기다리면 복원 지점을 확보할 수 있습니다.
에이전트를 실행하기 전에 커밋하십시오. 체크포인트는 세션 수준의 복구이며, Anthropic이 직접 권장하듯 Git이 영구적인 기록입니다.
추론 과정을 유지하고 싶다면 'Restore code'를 우선적으로 선택하십시오. 대화는 유지하면서 파일만 되돌리면, 배운 내용을 화면에 그대로 둔 채 다시 시도할 수 있습니다.
중요한 복원을 수행하기 전에 디버그 로깅을 켜십시오. 이는 단순히 개수만 확인하는 대신, 어떤 심볼릭 링크나 하드 링크 경로를 건너뛰었는지 알아낼 수 있도록 문서에 명시된 방법입니다.
병렬 세션에 대해 아무것도 가정하지 마십시오. 수정을 수행한 세션만이 해당 수정에 대한 스냅샷을 보유합니다.
'Restore code and conversation'을 실행하기 전에 발견한 사실을 기록해 두십시오. 이 옵션은 상태와 상태를 변경한 이유에 대한 기록을 모두 제거하는 유일한 옵션입니다. 재사용 가능한 부분을 영구적인 곳에 보관하는 습관은 Claude Code가 명령어 기록을 기억하도록 만들기에서 다루고 있습니다.
결론
/rewind는 Anthropic이 설명한 대로 작동합니다. 목록에서 선택한 프롬프트 이전 상태로 코드, 대화 또는 둘 다를 복원합니다. 되돌릴 추적된 파일 변경 사항이 있을 때만 코드 복원 옵션이 나타나는 세부 사항을 포함하여 메뉴 자체도 잘 설계되어 있습니다.
되돌리기가 불안정하게 느껴지는 이유는 범위 외의 변경 사항들 때문이며, Anthropic은 이 목록을 모두 공개하고 있습니다: Bash 명령어로 수정된 파일, 대부분의 subagent가 수행한 수정, 수동 및 동시 세션 변경 사항, 심볼릭 링크 및 하드 링크 경로, 그리고 이미 진행 중인 턴에 합류한 메시지 등이 이에 해당합니다. 이 모든 사항이 문서화되어 있으며, 발생 당시에는 아무런 표시도 나지 않습니다.
여기에 보존 세부 정보(가장 최근 체크포인트 100개에 대한 스냅샷 보관, 세션이 마지막으로 저장된 후 기본적으로 약 30일 후 삭제, 더 긴 기간이 필요한 경우 cleanupPeriodDays 사용 가능)를 더하면 이 기능의 실제 모습을 파악할 수 있습니다. 즉, 의도적으로 버전 기록이 아닌 훌륭한 단기 복구 기능으로 설계된 것입니다.
영구적인 보존을 위해서는 Git을, 대안 탐색을 위해서는 /branch를, 컨텍스트 압축을 위해서는 요약 옵션을 사용하고, /rewind는 원래 설계된 목적에 맞게 사용하십시오. 그리고 포기한 각 시도가 무엇을 가르쳐 주었는지 기록해 두십시오. 그것이야말로 스냅샷이 결코 담을 수 없는 유일한 것이기 때문입니다.