본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 27. 10:14

Claude Code에서 '대화가 사라졌다'고 생각된다면, 먼저 이 스크립트를 실행하세요 — 세션은 사라지지 않았습니다

요약

Claude Code 사용 중 대화 목록이 사라진 것처럼 보이는 현상의 원인을 분석하고, 디스크에 저장된 모든 세션을 찾아내는 스크립트와 복구 방법을 안내합니다.

핵심 포인트

  • Claude Code 대화는 실행한 폴더별로 로컬 디스크에 안전하게 저장됨
  • UI에서 대화가 보이지 않는 것은 현재 폴더의 세션만 필터링하여 보여주기 때문
  • 제공된 쉘 스크립트를 통해 모든 폴더의 대화 목록을 최신순으로 확인 가능
  • 특정 키워드로 과거 대화 세션을 검색하고 즉시 재개하는 방법 제공

Claude Code를 사용하면서 다음과 같은 경험을 한 적이 없으신가요?

  • VS Code에서 폴더를 전환했더니 사이드바의 대화 목록이 비어 있음
  • 확장 기능의 「Past conversations」를 열었더니 어제까지의 대화가 단 하나도 나오지 않음
  • 긴 작업 도중에 문맥(Context)이 자동으로 요약되어, 이전에 말했던 내용이 사라진 것 같음

모두 「데이터가 삭제된」 것처럼 보입니다. 하지만 결론부터 말씀드리면, 대부분의 경우 대화는 단 하나도 사라지지 않았습니다. Claude Code의 대화는 실행한 폴더마다 사용자의 디스크에 통째로 계속 저장되고 있으며, 보이지 않는 이유는 표시 측에서 해당 폴더의 분량만 보여주고 있기 때문입니다.

이 기사에서는 먼저 「사라진」 대화를 모든 폴더에서 목록화하여 특정하는 자기 진단 스크립트를 제공하고, 그 후에 되찾는 절차를 설명합니다. 스크립트에서 사용 중인 저장 위치, cwd 기록, --continue를 통한 불러오기는 모두 자신의 환경 디스크에서 직접 확인한 사실입니다. 반면, 각 UI가 「비어 보이는」 내부 표시 필터 값은 작성 시 보고된 내용에 기반한 전언입니다. 두 가지는 구분하여 작성하겠습니다.

아래의 스크립트를 cc-find-sessions.sh로 저장하여 실행하면, 모든 폴더의 대화를 최신순으로 목록화합니다. 각 대화에 대해, 그것을 시작한 작업 폴더, 그대로 붙여넣을 수 있는 재개 명령, 식별을 위한 도입부 발언이 출력됩니다.

#!/usr/bin/env bash
# Claude Code의 「사라진」 대화를 모든 폴더에서 찾는 자기 진단.
# 사용법: bash cc-find-sessions.sh … 모든 세션을 최신순으로 목록화
...

실행하면 다음과 같은 출력이 나옵니다 (자신의 환경에서의 실제 출력입니다).

2026-06-27 09:58 /home/me/projects/cc-loop
재개: cd "/home/me/projects/cc-loop" && claude --resume
도입부: 우선 ~/ops/handoff/latest.md(이전 세션의 인계)와 task-check를 읽고…
...

「그 대화, 어느 폴더에서 시작했는지 기억나지 않아」라고 할 때는, 대화 중에 나온 키워드로 검색할 수 있습니다.

bash cc-find-sessions.sh 로그인 화면

출력의 재개: 행을 그대로 터미널에 붙여넣으면 해당 대화로 돌아갈 수 있습니다.

Claude Code의 대화는 **실행했을 때의 작업 폴더(현재 작업 디렉터리, Current Working Directory)**마다 저장됩니다. 위치는 여기입니다.

~/.claude/projects/<폴더의 절대 경로에서 슬래시(/)를 하이픈(-)으로 치환한 경로>/

예를 들어 /home/me/projects/myapp에서 실행한 대화는 ~/.claude/projects/-home-me-projects-myapp/ 아래에, 하나의 대화당 하나의 .jsonl 파일로서 저장됩니다. 맨 앞의 슬래시도 하이픈으로 바뀝니다.

자신의 환경에서 계산해 보니, 11개의 폴더에 걸쳐 총 260개의 대화 .jsonl 파일이 있었습니다. 다른 폴더를 VS Code로 열어도, 이 파일들은 일절 변화하지 않습니다 (줄어들거나 사라지지 않습니다). 사이드바가 비어 보이는 이유는 지금 열려 있는 폴더에 연결된 대화만을 목록에 표시하고 있기 때문이며, 이전 대화는 다른 폴더용 디렉터리에 무사히 남아 있습니다.

.jsonl의 각 행에는 해당 대화를 실행한 폴더의 절대 경로가 cwd로서, 각 주고받음의 시각이 timestamp로서 기록되어 있습니다. 위의 스크립트는 이 cwd를 읽어 「어느 폴더의 것인지」를 복원하고, 파일의 수정 시각으로 최신순 정렬을 하고 있을 뿐입니다. 따라서 폴더 이름의 인코딩(슬래시를 하이픈으로 치환하는 규칙)을 수동으로 구성할 필요는 없습니다. 일본어와 같은 비라틴 문자를 포함하는 폴더 이름은 저장 디렉터리 이름 상에서 다른 문자로 뭉개져 식별하기 어려워질 수 있으므로, cwd의 내용으로부터 복원하는 이 방법이 더 확실합니다.

cd /path/to/해당 폴더
claude --continue # 해당 폴더의 「직전 대화」를 그대로 계속함
# 또는
...

--continue (짧게 -c

)는 도움말에도 "현재 디렉토리의 직전 대화를 계속함"이라고 명시되어 있으며, **현재 디렉토리에 종속되어 있습니다**. 따라서 VS Code 확장 프로그램의 사이드바에 무엇이 표시되어 있든, 터미널에서 목적의 폴더로 cd`한 뒤 이 명령어를 입력하면 확장 프로그램의 표시 필터를 완전히 우회하여 대화를 되찾을 수 있습니다. 이것이 가장 확실한 탈출구입니다.

위의 스크립트에 키워드를 전달하거나, 직접 grep을 사용합니다.

grep -l '찾고 싶은 단어' ~/.claude/projects/*/*.jsonl

긴 대화 도중에 문맥이 자동으로 요약되면, "방금 전까지의 세세한 주고받음이 사라졌다"고 느껴질 수 있습니다. 하지만, 요약은 표시와 다음 문맥 구축을 위한 것이며, 원래의 .jsonl 행은 사라지지 않습니다. 진행 중인 대화의 .jsonl을 종류별로 세어보니, 요약 전의 사용자의 발언, 응답, 도구 호출(Tool Call)이 모두 남아 있었습니다. 잃어버린 상세 내용을 다시 읽고 싶을 때는 해당 .jsonl을 그대로 열면 원래의 주고받음이 시계열로 모두 들어 있습니다 (한 줄이 하나의 JSON이므로 jqgrep으로 다룰 수 있습니다). 여기까지는 "사라진 것처럼 보이지만 사라지지 않은" 이야기입니다. 반대로 정말로 되돌릴 수 없게 되는 경우는 .jsonl 그 자체를 삭제해 버릴 때입니다. 예를 들어:

  • 세션을 정리하는 명령어(프로젝트의 purge 등)를 제대로 확인하지 않고 실행하여, 다른 프로젝트의 대화까지 휘말려 삭제하는 경우
  • 저장 디렉토리를 수동으로 rm 하거나, 동기화 또는 정리 스크립트가 포함시키는 경우
  • 앞서 언급한 비라틴 문자 폴더 이름의 충돌로 인해, 동일한 저장 디렉토리에 다른 폴더의 대화가 공존하게 되어 한쪽을 지우려다 양쪽 모두 지워지는 경우

공통점은, "삭제하는 쪽의 조작"을 실행 전에 멈추지 못했다는 것입니다. 대화의 .jsonl은 일반적인 조작으로는 삭제되지 않지만, 삭제 계열의 명령어를 한 번 잘못 실행하면 복구할 수 없습니다.

이러한 종류의 사고(제대로 확인하지 않고 삭제·덮어쓰기·함께 날려버리기)를 실행 전에 기계적으로 막는 메커니즘은 PreToolUse와 같은 실행 전 훅(Hook)으로 표현할 수 있습니다. 파괴적인 조작을 차단하는 훅 설정 예시는 무료인 cc-safe-setup에 정리해 두었습니다. 데이터 소실이나 폭주 사례와 증상별 대처법을 한 권에 담은 것은 Claude Code 사고 방지 핸드북에 있습니다. "사라진 것처럼 보이지만 사라지지 않은" 상태를 올바르게 구분할 수 있다면, 당황해서 불필요한 삭제를 하여 정말로 지워버리는 2차 재해를 피할 수 있습니다.

  • "대화가 사라졌다"고 생각되면, 먼저 cc-find-sessions.sh를 실행하세요. 대부분 전부 거기에 있습니다.
  • 대화는 폴더별로 ~/.claude/projects/<인코딩된 경로>/*.jsonl에 저장되며, 다른 폴더를 열어도 사라지지 않습니다. 빈 사이드바는 표시 필터의 문제이지 데이터 소실이 아닙니다.
  • 되찾으려면 해당 폴더로 cd한 뒤 claude --continue 또는 claude --resume를 사용하세요.
  • 요약으로 인해 사라진 것 같더라도, 원래의 이력은 .jsonl에 모두 남아 있습니다.
  • 정말로 사라지는 것은 삭제 계열의 조작을 실수했을 때뿐입니다. 그 부분은 실행 전에 막는 메커니즘으로 방지해야 합니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0