Скрытые сессии Claude Code на macOS: поиск и восстановление | AiManual
AiManual Logo Ai / Manual.
30 Апр 2026 Гайд

Как найти и восстановить скрытые сессии Claude Code на macOS: пошаговое руководство

Пошаговое руководство по поиску и восстановлению сессий Claude Code на macOS. Пути хранения, команды, автоматизация бэкапов и типичные ошибки. Актуально для вер

Вы закрыли терминал, и ваш трёхчасовой диалог с 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 не пропадёт бесследно.

Подписаться на канал