Claude Code 데스크톱 앱에서 채팅을 삭제해도 디스크에서 삭제되지 않는 이유, 실제 동작 방식 및 정리 명령
요약
Claude Code 데스크톱 앱에서 채팅 삭제 시 실제 디스크 상의 데이터가 남는 동작 방식을 분석하고, 이를 안전하게 정리할 수 있는 커스텀 슬래시 명령어를 소개합니다.
핵심 포인트
- 채팅 삭제 시 앱 목록에서는 사라지나 .jsonl 파일은 디스크에 유지됨
- 삭제된 세션은 특정 경로에 마커 파일을 생성하여 추적 가능함
- 자동 삭제 설정(cleanupPeriodDays)은 기본 30일로 설정되어 있음
- 마커를 활용해 삭제된 채팅만 골라 정리하는 커스텀 명령어 활용 가능
제 사이드바가 가득 차고 있어서 "삭제(delete)"가 정말 삭제를 의미하는지 알고 싶었습니다. 그렇지 않았습니다. 아래의 모든 내용은 문서에서 추론한 것이 아니라, 제 Mac에서 직접 테스트한 결과입니다. 제가 발견한 내용(macOS, 데스크톱 앱, 2026년 7월 30일 테스트 완료)은 다음과 같습니다. 대화 기록(Transcripts)은 ~/.claude/projects/<working-dir-with-slashes-as-dashes>/<session-id>.jsonl에 저장됩니다. 이는 암호화되지 않은 일반 텍스트(Plain text)이며, 오직 파일 권한(file permissions)에 의해서만 보호됩니다. 여기에는 전체 대화 내용이 포함되어 있습니다. 앱 사이드바에서 채팅을 삭제하면 앱 자체의 복사본은 제거되지만, 해당 .jsonl 파일은 그대로 남겨둡니다. 목록에서는 사라지지만, 디스크에서는 사라지지 않습니다. 또한 각 삭제 작업은 ~/Library/Application Support/Claude/claude-code-sessions/<uuid>/<uuid>/ 아래에 deleted_<id>라는 이름의 작은 마커 파일 하나 또는 두 개를 생성합니다. 이 파일들은 두 단계 아래에 위치하므로, 최상위 폴더를 목록화(listing)해도 아무것도 나타나지 않습니다. 이 마커들이 당신이 무엇을 삭제했는지에 대한 유일한 기록이며, 이를 통해 타겟팅된 정리(cleanup)가 가능해집니다. 일부 세션은 대화 기록 옆에 동일한 세션 ID로 명명된 사이드카 폴더(sidecar folder)를 가지고 있으며, 여기에는 저장된 도구 출력(tool output)이 들어 있습니다. 제 경우에는 86 KB였습니다. .jsonl 파일만 확인하는 정리 방식은 이를 남겨두게 됩니다. VS Code 확장 프로그램은 다르게 동작합니다. 이 역시 파일을 남겨두긴 하지만, VS Code 자체의 SQLite 데이터베이스(~/Library/Application Support/Code/User/globalStorage/state.vscdb) 내부에 있는 hiddenSessionIds 목록에 해당 ID를 추가하여 채팅을 숨깁니다. 이는 클라이언트 측(client-side) 작업이므로, 해당 "삭제된" 채팅들은 다른 기기나 재설치 후에 다시 나타납니다. 별개의 내용이지만 알아둘 만한 점: ~/.claude/settings.json의 cleanupPeriodDays 기본값은 30일입니다. 그 이후에는 대화 기록이 자동으로, 그리고 조용히 삭제됩니다. 기록을 보관하고 싶다면 이 값을 높이십시오. 어쨌든 업데이트 전후로 기록이 사라진다는 보고도 있으므로, 높은 값을 설정한다고 해서 보장되는 것은 아닙니다. 제가 어떻게 확인했는지(제 말을 그냥 믿어서는 안 되기 때문입니다): 파일 목록을 스냅샷(snapshot) 찍고, 테스트용 채팅을 생성한 뒤, 새 파일이 나타나는지 확인합니다. 그다음 사이드바에서 삭제하고, 즉시 확인한 뒤 8분 후에 다시 확인합니다. 앱을 재시작한 다음 마커(markers)를 읽어보았습니다.
진행 과정에서 제가 확신했던 두 가지 결론이 틀린 것으로 드러났고, 사이드바에서 삭제하면 파일도 삭제된다고 주장하는 온라인상의 한 보고는 제 버전에서는 사실이 아니었습니다. 여러분의 기기에서 직접 테스트해 보시기 바랍니다. 정리(cleanup) 작업입니다. 저는 이를 슬래시 명령(slash command)으로 만들었습니다. 아래 블록을 ~/.claude/commands/clean-chats.md로 저장한 다음, /clean-chats를 실행하세요. 이 명령은 마커(markers)를 읽어 사용자가 직접 삭제한 채팅의 트랜스크립트(transcripts)만 찾아내어, 각 채팅의 첫 줄과 함께 목록을 보여주며, 사용자가 '예(yes)'라고 말하기 전까지는 아무것도 삭제하지 않습니다. 사이드바에 여전히 남아 있는 채팅은 마커가 없으므로 이 명령의 탐지 범위에서 제외됩니다. 사용하기 전에 반드시 읽어보십시오. 이 명령은 파일을 삭제합니다. 한 대의 기기, 한 가지 버전, macOS 전용입니다. 만약 앱 업데이트로 인해 마커 메커니즘이 변경되면 아무것도 찾지 못하고 아무 작업도 수행하지 않을 것이며, 이는 제가 의도한 실패 모드(failure mode)입니다. --- description: 앱 사이드바에서 이미 삭제한 채팅 트랜스크립트를 디스크에서 실제로 삭제합니다 --- 앱 사이드바에서 채팅을 삭제하면 앱 자체의 복사본은 제거되지만, 트랜스크립트 파일은 ~/.claude/projects에 그대로 남습니다. 또한 각 삭제 작업은 ~/Library/Application Support/Claude/claude-code-sessions/ 아래에 deleted_<id>라는 이름의 작은 마커 파일 한두 개를 생성합니다. 정확히 그 잔여물만 제거하고 다른 것은 건드리지 않습니다. 1단계. 수집(Collect). deleted_* 마커 파일들을 나열하고 파일 이름에서 ID를 추출합니다. 재귀적으로 검색하십시오. 이 파일들은 세션별 폴더 내부의 두 단계 아래에 위치하므로, 최상위 폴더만 나열하면 아무것도 찾지 못해 모든 것이 깨끗하다고 잘못 보고할 수 있습니다. 만약 실제로 파일이 없다면, 한 줄로 알리고 중단하십시오. 2단계. 매칭(Match). 각 ID에 대해 ~/.claude/projects/*/<id>.jsonl 파일과 그 옆에 있는 동일한 ID의 사이드카(sidecar) 폴더를 찾습니다. - 일치하는 파일이 없는 ID는 이미 정리된 상태입니다. 이를 건너뛰고 마지막에 몇 개였는지 보고하십시오. - 이 명령이 실행 중인 세션의 ID는 마커가 존재하더라도 건너뛰십시오. 해당 ID를 삭제 카운트에 절대 포함하지 마십시오. 해당 트랜스크립트는 여전히 디스크에 남아 있으며, 이 명령이 다른 세션에서 실행될 때 제거될 것이라고 명확하게 언급하십시오.
- 만약 일치하는 id가 없다면, 해당 개수와 함께 한 줄로 알리고 중단하십시오. 3단계. 절대 건드리지 마십시오. 마커 파일(marker file)에서 가져온 정확한 id 일치 항목에 대해서만 동작하며, 추측이나 패턴을 바탕으로 동작하지 마십시오. 다음은 절대 건드리지 마십시오: 이 명령이 실행 중인 세션, 마커가 없는 모든 채팅(활성, 보관됨, 또는 다른 프로그램에서 시작됨), 모든
memory폴더,MEMORY.md,settings.json,commands/,file-history/,backups/, 또는~/.claude/projects외부의 모든 것. 마커 파일 자체는 그대로 두십시오. 나열하려는 경로를 확장했을 때~/.claude/projects/내부에 위치하지 않는다면, 진행하는 대신 중단하고 보고하십시오. 4단계. 실행 전 표시하십시오. 채팅당 하나의 항목을 표시하십시오: 트랜스크립트(transcript) 경로, 크기, 날짜, 그리고 해당 대화에서 제가 말한 첫 번째 내용을 표시하여, 제가 id를 읽지 않고도 인식할 수 있도록 하십시오. 사이드카 폴더(sidecar folder)가 해당 채팅에 속해 있다면, 폴더 자체의 크기가 아닌 그 내용물의 크기와 함께 동일한 항목 아래에 나열하십시오. 사용자 메시지는 메타데이터(metadata)로 감싸져 있을 수 있으므로, 첫 번째 읽기 시도가 아무것도 찾지 못한다면, 없다고 결론 내리기 전에 다른 방법을 시도하십시오. 만약 대화에 일반 메시지가 없고 슬래시 명령(slash commands)만 있다면, 이를 명확히 밝히고 대신 해당 명령들을 나열하여, 제가 식별 정보가 약함을 인지하고 폴더와 날짜를 직접 확인해야 함을 알 수 있게 하십시오. 그런 다음 명시적인 확인을 요청하십시오. 확인이 없으면 삭제도 없습니다. 5단계. 삭제하십시오. 오직 저의 승인(yes)이 있은 후에만 수행하십시오. 한 번에 하나의 경로씩, 와일드카드(wildcard)를 사용하지 말고 정확한 전체 이름으로 수행하십시오. 각 파일이나 폴더를 삭제하기 직전에 존재 여부를 즉시 확인하십시오. 사이드카 폴더는 그 내용물과 함께 삭제됩니다. 해당 폴더는 오직 그 채팅의 저장된 도구 출력(tool output)만을 보유합니다. 표시된 내용과 일치하지 않는 첫 번째 경로에서 중단하고 보고하십시오. 6단계. 보고하십시오. 무엇이 삭제되었고 얼마만큼의 공간이 확보되었는지 말하십시오. 건너뛴 항목이 있다면 무엇인지와 그 이유를 말하십시오. submitted by /u/woodhandss [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/ClaudeAI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기