Вы закрыли терминал, и ваш трёхчасовой диалог с Claude Code исчез. Или Mac перезагрузился посреди сложного рефакторинга. Знакомая боль? Спешу вас успокоить: на macOS Claude Code поступает хитрее — он не выбрасывает историю, а прячет её в системных директориях. Это не баг, а фича для офлайн-доступа, но Anthropic её почти не документирует. Сегодня я расскажу, где лежат эти данные, как их восстановить и — самое важное — как не потерять их снова.
Важно: гайд актуален для Claude Code версии 2.0.х и новее (по состоянию на 30 апреля 2026). Если вы работаете с ранними билдами, пути могут отличаться — проверяйте через find ~/Library -name '*.jsonl' -path '*Claude*' 2>/dev/null
Почему сессии прячутся? (Спойлер: не из вредности)
Claude Code — это терминальный AI-инструмент, который запускается как child-процесс в вашей shell-сессии. Когда вы закрываете вкладку или убиваете процесс, вся память о диалоге должна исчезнуть — так работают большинство консольных приложений. Но разработчики Anthropic пошли другим путём: они сохраняют каждое сообщение в JSONL-лог, разбитый по сессиям. Зачем?
- Возможность отката. Если ответ Claude повредил файлы, можно откатиться к предыдущему шагу в той же сессии.
- Дебаг и аналитика. Логи помогают Anthropic улучшать модель — но, как мы обсуждали в статье про утечки данных, не стоит отправлять туда критически важные секреты.
- Сессионная непрерывность. При обрыве связи (WiFi «упал» или терминал «заморозился»), можно возобновить диалог с последнего сообщения.
Именно последняя фича нас и интересует. Но работает она нестабильно, если не знать точного местонахождения логов.
Где лежат скрытые сессии? Анатомия каталога
Все данные Claude Code на macOS живут в директории ~/Library/Application Support/Claude/ (старая версия) или ~/Library/Application Support/Claude Code/ (начиная с v2.0). Проверим, что у вас:
ls -la ~/Library/Application\ Support/ | grep -i claude
Вы увидите одну или две папки. Внутри — поддиректория session_data/ или sessions/. Именно там хранятся файлы формата session_*.jsonl. Каждая сессия — это отдельный файл, где каждая строка — JSON с сообщением (роль, контент, метаданные).
Давайте отфильтруем все сессионные файлы:
find ~/Library/Application\ Support/Claude* -name 'session_*.jsonl' -type f 2>/dev/null
Результат должен быть похож на:
/Users/you/Library/Application Support/Claude Code/sessions/session_20260430T120000Z.jsonl
/Users/you/Library/Application Support/Claude Code/sessions/session_20260429T180000Z.jsonl
Если вы ничего не нашли — возможно, сессии не включались по умолчанию. Включаем флагом --persist-sessions при запуске. Но об этом позже.
~/Library/Caches/Claude/). Она тоже существует, но хранит не сессии, а закэшированные ответы для повторяющихся запросов. Не трогайте её — удаление сломает автодополнение.Как восстановить сессию? Три рабочих способа
1 Флаг --resume (официальный способ)
Если терминал не закрывался, а просто вы вышли из процесса, достаточно запустить:
claude --resume
Claude Code загрузит последнюю сессию из sessions/ и продолжит диалог. Проблема: флаг работает только если лог-файл не битый и не заблокирован другим процессом. Если вы параллельно запускали несколько экземпляров — будет выбран последний по времени модификации.
Что делать, если --resume молча завершается с ошибкой 1? Скорее всего, файл повреждён. Идём к способу 2.
2 Ручной импорт через pipe
Берём нужный файл сессии и «скармливаем» его Claude Code в новый запуск:
cat ~/Library/Application\ Support/Claude\ Code/sessions/session_20260430T120000Z.jsonl | claude
Под капотом Claude Code читает stdin, видит корректный JSONL и интерпретирует его как историю. Диалог продолжается с места, на котором остановились. Этот метод спасает, когда --resume отказывается работать или нужно загрузить старую сессию (не последнюю).
💡 Используйте этот трюк, чтобы «склеивать» несколько сессий: cat session1.jsonl session2.jsonl | claude. Правда, модель иногда путается в контексте, если между сессиями был большой разрыв по времени.
3 Грязный хак: копирование в новую папку проектов
Если вы не можете найти файл сессии, но помните часть диалога — попробуйте восстановить его из истории терминала. В macOS история bash/zsh хранится в ~/.bash_history или ~/.zsh_history. Можно извлечь все строки, содержащие claude, и сформировать сырой промпт:
grep '^claude' ~/.zsh_history | cut -d';' -f2- > ~/claude_recovered.txt
claude < ~/claude_recovered.txt
Это не восстановит ответы Claude, но вернёт ваши команды. Иногда этого достаточно, чтобы перезапустить мысль.
Ошибка №1: «Нет доступа к папке Library»
Начиная с macOS 15.0 (Sequoia) и в последующих версиях, Apple ужесточила права на папку ~/Library/Application Support. Claude Code может не иметь прав на запись логов, если вы запускаете его не из-под вашего пользователя (например, через sudo). Решение — дать полный доступ терминальному эмулятору в Системные настройки > Конфиденциальность и безопасность > Полный доступ к диску. После этого перезапустите терминал.
Проверьте, пишутся ли логи сейчас:
claude --version && echo "---" && ls -la ~/Library/Application\ Support/Claude\ Code/sessions/ 2>&1 | head -5
Если директория пуста — включите сохранение сессий явно: добавьте в ~/.clauderc (создайте, если нет) строку PERSIST_SESSIONS=true.
Автоматизация: бэкап сессий при каждом запуске
Настраивать бэкапы руками — прошлый век. Мы сделаем так, чтобы каждая сессия автоматически копировалась в облако и в локальную папку ~/claude-backups. Для этого используем launchd (аналог systemd на macOS).
cat > ~/Library/LaunchAgents/com.claude.backup.plist << 'EOF'
Label
com.claude.backup
ProgramArguments
/usr/local/bin/rsync
-avz
--remove-source-files
~/Library/Application Support/Claude Code/sessions/
~/claude-backups/
WatchPaths
~/Library/Application Support/Claude Code/sessions/
StandardOutPath
/tmp/claude-backup.log
StandardErrorPath
/tmp/claude-backup.err
EOF
launchctl load ~/Library/LaunchAgents/com.claude.backup.plist
Теперь при появлении нового файла сессии он мгновенно копируется в ~/claude-backups. Флаг --remove-source-files необязателен — я рекомендую оставить оригинал, чтобы --resume продолжал работать. Если вы используете Obsidian как «второй мозг», можно настроить автоматический импорт логов в Obsidian для поиска и анализа.
Типичные грабли (и как их избежать)
- Файл сессии занят другим процессом. Если вы запустили Claude Code, не закрывая предыдущий, второй экземпляр не сможет писать в тот же файл. Решение: ставьте
--session-id unique_nameдля каждой вкладки, тогда файлы не пересекаются. - Огромные файлы (гигабайты). При длительной работе и включённой записи всех сообщений файл может распухнуть до неприличных размеров. На macOS нет автоматической ротации. Рекомендую раз в неделю запускать
truncate -s 0 ~/Library/Application\ Support/Claude\ Code/sessions/session_*.jsonl(но только после архивации). - Конфликт с Anthropic Cowork. Если вы пользуетесь Anthropic Cowork, его демон может параллельно писать в те же лог-файлы. Проверьте настройки Cowork — отключите синхронизацию сессий, чтобы не получить кашу.
- Удаление сессий при переустановке. При удалении Claude Code через
brew uninstall(или ручное удаление) папка~/Library/Application Support/Claude Codeчасто остаётся. Но если вы чистите систему утилитами вроде CleanMyMac — сессии сметаются безвозвратно. Держите бэкап в отдельном месте.
Бонус: интерактивный скрипт для поиска сессий
Закиньте в ~/.zshrc или ~/.bashrc эту функцию — она найдёт все сессии, покажет размер и дату, и даст выбрать для восстановления:
claude-list-sessions() {
local dir="$HOME/Library/Application Support/Claude Code/sessions"
[[ ! -d "$dir" ]] && dir="$HOME/Library/Application Support/Claude/sessions"
if [[ ! -d "$dir" ]]; then
echo "Селссии не найдены. Запустите claude --persist-sessions и повторите."
return 1
fi
find "$dir" -name 'session_*.jsonl' -exec ls -lhS {} \; 2>/dev/null | awk '{print $5, $6, $7, $9}' | nl
echo "Введите номер сессии для восстановления:"
read -r n
local file=$(find "$dir" -name 'session_*.jsonl' -type f 2>/dev/null | sed -n "${n}p")
if [[ -n "$file" ]]; then
echo "Восстанавливаю $file..."
cat "$file" | claude
else
echo "Неверный номер."
fi
}
Теперь, потеряв сессию, достаточно набрать claude-list-sessions и выбрать нужную. Полезно совместить с горячими клавишами — забиндите на F1, например.
Кстати, если вы ещё не обновились до Claude Code 2.0, в новых версиях появилась встроенная команда claude session history, которая выводит список сессий прямо в интерфейсе. Но резервное копирование всё равно никто не отменял — надёжность прежде всего.
Сохраните этот гайд, и пусть ни один ваш диалог с Claude не пропадёт бесследно.