Как возобновить сессию Claude Code и найти историю
Узнайте, как продолжить работу в Claude Code через команду resume или выбор из списка. Инструкция по поиску локальных текстовых логов сессий и управлению историей диалогов.
Как возобновить сессию Claude Code
Чтобы возобновить сессию Claude Code, выполните claude --continue для последней беседы в текущем каталоге или claude --resume, чтобы выбрать более старую из списка. Находясь внутри уже запущенной сессии, используйте команду /resume для переключения на другую беседу без выхода из программы. Сокращенные команды — -c и -r.
claude --continue
claude --resume
claude --resume auth-refactorЕсли вы уже знаете имя сессии или её ID, передайте их в качестве аргумента, и Claude Code сразу перейдет к нужной беседе, не открывая меню выбора.
Всё, что приведено ниже, соответствует официальной документации по сессиям по состоянию на август 2026 года. Обновления Claude Code выходят часто, а названия флагов и сочетания клавиш могут меняться от версии к версии, поэтому при расхождениях с тем, что вы видите в терминале, считайте авторитетным источником claude --help и указанную страницу.
Что такое сессия на самом деле
Сессия — это сохраненный диалог, привязанный к директории проекта. Она содержит всю историю сообщений, включая вызовы инструментов, выполненные Claude, и результаты этих вызовов. Claude Code записывает данные на диск непрерывно в процессе работы, а не один раз по завершении, поэтому диалог сохраняется даже после закрытия терминала или разрыва SSH-соединения.
Возобновление сессии восстанавливает не только текст. История диалога возвращается в полном объеме вместе с моделью, которая использовалась в сессии, и субагентом, с которым она была запущена (если вы использовали --agent). Режим разрешений также восстанавливается, за исключением случаев, предусмотренных в целях безопасности: режимы plan mode и bypass-permissions mode никогда не восстанавливаются, поэтому сессия, находившаяся в одном из них, возобновляется в том режиме, в котором запускается новая сессия.
Некоторые параметры не восстанавливаются, потому что они передаются при запуске, а не сохраняются как состояние. Каталоги, добавленные с помощью --add-dir, и такие параметры, как --mcp-config, --settings и --plugin-dir, необходимо передать повторно при возобновлении. Файлы настроек, например settings.json, перечитываются при запуске, поэтому параметры из них не нужно указывать повторно. Это же относится к учётным данным: Claude Code определяет способ аутентификации при запуске на основе вашей учётной записи и окружения, а не восстанавливает его вместе с диалогом. Поэтому при возобновлении сеанса на VPS, где в оболочку случайно попал ANTHROPIC_API_KEY, появится ошибка недействительного API-ключа, даже если в прошлый раз всё работало.
Почему история сессий важнее на VPS
Вот факт, который удивляет многих. Транскрипт записывается на той машине, где был запущен агент. Он не хранится в вашей учетной записи и не синхронизируется с облаком. Это файл на диске конкретного сервера.
Поэтому сессия, оставленная вами в окне tmux на VPS, не появится в списке выбора на вашем ноутбуке, а сессия с ноутбука не отобразится на VPS. Данные не перемещаются между ними. Если вы работаете так, как большинство пользователей при запуске Claude Code в tmux на VPS, то именно на сервере накапливается ваша реальная история диалогов, а список, который вы видите локально, содержит другой и гораздо меньший набор данных.
То же разделение применимо и к разным интерфейсам. Десктопное приложение и расширение для VS Code хранят собственную историю сессий, и ни одна из них не является историей CLI. Claude Code в веб-интерфейсе также ведет свою историю. Cowork стоит еще дальше, работая внутри песочницы Anthropic, а не на вашем собственном оборудовании, поэтому, если вы сравниваете Cowork и Claude Code, место хранения транскрипта является важным фактором при принятии решения.
В рамках одной машины поиск работает шире, чем можно ожидать. claude --resume <session-id> сначала ищет в текущем каталоге проекта и его git-рабочих деревьях, а затем во всех остальных проектах на этой машине. Ключевая фраза здесь — «на этой машине». Идентификатор сессии с другого хоста ни к чему не приведет, и Claude Code сообщит вам об этом с помощью No conversation found with session ID: <session-id>.
Где Claude Code хранит историю сессий
По умолчанию транскрипты находятся в каталоге конфигурации Claude Code по пути вида ~/.claude/projects/<project>/<session-id>.jsonl.
<project> — это путь к вашему рабочему каталогу, в котором все небуквенно-цифровые символы заменены на дефис. Таким образом, сессия, запущенная в /home/deploy/apps/api, сохраняется в каталоге с именем -home-deploy-apps-api. Если длина преобразованного имени превышает 200 символов, Claude Code обрезает его и добавляет хеш полного пути, чтобы имя каталога не выходило за рамки ограничений файловой системы.
Файл имеет формат JSONL: один JSON-объект на строку, где каждая строка представляет собой сообщение, вызов инструмента или запись метаданных. Это читаемый текст, и просматривать его можно.
Создавать парсер для этих файлов не рекомендуется. Формат записей является внутренним для Claude Code и меняется от версии к версии, поэтому скрипт, считывающий эти файлы напрямую, может сломаться после любого обновления. В документации Anthropic указано, что следует использовать /export или задокументированные программные интерфейсы, что является верным советом именно по этой причине.
Две настройки меняют правила игры. CLAUDE_CONFIG_DIR позволяет переместить весь каталог конфигурации; это используется для переноса транскриптов на отдельный или зашифрованный том. Параметр cleanupPeriodDays в файле settings.json определяет срок хранения записей. По умолчанию он составляет 30 дней, минимально допустимое значение — 1 день.
Что на самом деле содержится в этих файлах транскриптов
Результат работы каждого инструмента записывается, а это значит, что транскрипт содержит содержимое файлов, которые читал Claude, и вывод команд, которые он выполнял. На странице использования данных Anthropic прямо указано: Claude Code сохраняет транскрипты сессий локально в виде обычного текста в ~/.claude/projects/.
Подумайте, что это означает при работе на сервере. Если Claude прочитал файл .env, чтобы выяснить, почему сервис не запускается, содержимое этого файла теперь находится в файле JSONL в вашей домашней директории. Если команда вывела строку подключения, эта строка тоже там есть. Утечки нет. Транскрипт просто записал произошедшее, в этом и заключается его основная задача, и именно поэтому он должен быть включен в вашу модель угроз.
- Резервные копии: обычное резервное копирование
/homeили/rootкопирует ваши транскрипты туда, где хранятся бэкапы. Добавьте исключение или примите тот факт, что копии ваших промптов и содержимого файлов теперь живут в вашем хранилище резервных копий. - Снапшоты и образы: снапшот VPS, сделанный по любой причине, содержит всю директорию целиком. То же самое касается образа, который вы клонируете для создания второго сервера.
- Другие учетные записи на сервере: проверьте права доступа самостоятельно с помощью
ls -ld ~/.claude ~/.claude/projects, вместо того чтобы предполагать, что они настроены строго. - Намеренная отправка данных: команда
/feedbackотправляет историю диалога в Anthropic, а/bugи/shareпередают отчеты по тому же пути. Это действия, которые вы совершаете осознанно, поэтому знайте, на что вы соглашаетесь, прежде чем подтвердить выполнение.
Если вы предпочитаете, чтобы транскрипты не создавались, CLAUDE_CODE_SKIP_PROMPT_HISTORY отключает запись транскриптов, а --no-session-persistence отключает их для одного неинтерактивного запуска claude -p. Четко осознавайте последствия перед тем, как использовать эти параметры. Транскрипты используются для функции возобновления работы, поэтому отсутствие транскрипта означает невозможность возобновления сессии.
Как найти старую беседу
Откройте средство выбора с помощью claude --resume или используйте /resume во время активного сеанса. В каждой строке отображается имя сеанса (если вы его задали) или сгенерированный заголовок, время с момента последней активности, ветка git и размер файла.
Средство выбора поддерживает поиск. Нажмите / или просто начните вводить текст, чтобы отфильтровать список. Полезно выучить сочетания клавиш для расширения области поиска: Ctrl+A показывает сеансы из всех проектов на этой машине, Ctrl+W — все рабочие деревья (worktrees) текущего репозитория, а Ctrl+B ограничивает список текущей веткой git. Нажмите Space для предварительного просмотра содержимого сеанса перед переключением на него, и Ctrl+R, чтобы переименовать выбранный элемент.
Присвоение имен сеансам значительно упрощает работу. Запустите сеанс с помощью claude -n auth-refactor или выполните /rename auth-refactor в процессе работы, когда поймете, что беседа переросла в полноценную задачу. Именованный сеанс можно возобновить по имени прямо из командной оболочки.
Безымянный сеанс получает автоматически сгенерированный заголовок: фоновый запрос к небольшой быстрой модели анализирует ваш первый запрос. Этот заголовок помогает распознать строку в списке, но не является идентификатором для возобновления. claude --resume <name> находит только те сеансы, которым вы присвоили имя самостоятельно.
Поиск по транскриптам для выбора нужной сессии
Иногда вы помните только фразу, но не помните ничего другого. Транскрипты хранятся в текстовом виде, поэтому их можно искать.
grep -rl "nftables" ~/.claude/projects/Эта команда выводит пути к соответствующим транскриптам. Имя файла без расширения .jsonl является идентификатором сессии, который принимает claude --resume <session-id>. Используйте grep, чтобы определить, какая именно сессия вам нужна, а затем возобновите её или экспортируйте для чтения.
Два важных предостережения. Содержимое экранировано в формате JSON, поэтому фраза, содержащая кавычки или разбитая переносом строки, может не совпасть при поиске как обычная строка. Кроме того, совпадение внутри результата работы инструмента означает, что этот текст видел Claude, а не то, что его кто-то вводил вручную.
Чтение и экспорт диалога
/export преобразует текущий диалог в простой текст, где сообщения и вывод инструментов представлены в читаемом виде, а не в формате JSON. Без аргументов команда открывает меню с выбором: буфер обмена или файл. При указании имени файла /export handover.txt записывает данные непосредственно по этому пути. Это оптимальный способ переноса диалога с сервера на локальный компьютер или прикрепления его к тикету.
Для автоматизации используйте интерфейсы, предназначенные для стабильной работы. Хуки и команды строки состояния получают поле transcript_path в качестве входных данных, поэтому хук SessionEnd может архивировать транскрипт по завершении сессии. Вы также можете задать вопрос сохранённой сессии, не открывая её:
claude -p --resume <session-id> --output-format json "summarize what we changed" | jq -r '.result'Эта команда отправляет дополнительный запрос в старый диалог и возвращает структурированный JSON. Это гораздо более надёжная основа, чем парсинг формата JSONL, структура которого может измениться в следующем релизе.
Начинать с чистого листа лучше, чем возобновлять сессию
Возобновление сессии возвращает всю историю, и эта история включается в каждый последующий запрос. Продолжать сегодня диалог, который длился четыре часа вчера, — дорого, и в том, как расходуются токены в длинных сессиях объясняется, откуда именно берутся эти затраты.
Claude Code иногда предлагает промежуточный вариант. На тарифах Pro или Max при возобновлении сессии, которая была неактивна около часа и содержит более 100,000 токенов, перед отправкой первого сообщения появится диалоговое окно. К этому моменту кэш промпта уже истекает, поэтому следующий запрос в любом случае один раз обработает всю историю целиком, независимо от выбранного варианта.
- Возобновление с кратким содержанием (Resume from summary) немедленно выполняет сжатие, поэтому последующие запросы будут содержать краткое изложение вместо полной истории. Это дешевле в пересчёте на запрос, но информация, отброшенная при составлении резюме, станет недоступна.
- Возобновление полной сессии в исходном виде (Resume full session as-is) загружает диалог без изменений, сохраняя все детали, при этом стоимость каждого запроса будет расти пропорционально размеру беседы.
Третий вариант позволяет возобновить сессию полностью и отключить появление этого диалога при последующих возобновлениях.
Принять решение проще, чем кажется. Возобновляйте сессию, если то, что вы собираетесь написать дальше, зависит от уже сказанного. Начинайте с чистого листа, если это не так. «Дрейф» контекста легко заметить, если следить за ним: Claude может ссылаться на файл, который вы удалили час назад, или заново спорить о решении, принятом в самом начале сессии. Это устаревший контекст, и его сохранение одновременно увеличивает расход токенов и снижает точность ответов.
Если полезная часть старой беседы — это решение или факт, который вам понадобится снова, не полагайтесь на возобновление сессии для его сохранения. Запишите это там, где информация будет доступна в любой сессии; именно для этого предназначены файлы памяти Claude Code.
Также стоит знать о /branch. Эта команда копирует текущую беседу до заданного момента и переключает вас на эту копию, оставляя оригинал нетронутым в списке сессий. Используйте её, чтобы попробовать альтернативный подход, не теряя при этом результаты первого.
Чем возобновление отличается от сжатия и памяти
Эти понятия постоянно путают, хотя они решают разные задачи.
Возобновление (resume) нужно для того, чтобы вернуться к диалогу после выхода из программы, перезагрузки или переключения на другую задачу. Сжатие (compaction) работает с контекстным окном внутри активного диалога: /compact заменяет текущий контекст Claude на краткое содержание, чтобы последующие запросы потребляли меньше токенов. Если проблема заключается в переполнении контекстного окна, используйте сжатие; подробнее об этом написано в разделе управление контекстным окном Claude Code.
Память (memory) — это другое. Файлы CLAUDE.md и автоматическая память хранят инструкции и факты, которые загружаются в начале каждой сессии, поэтому они не являются диалогом, к которому нужно возвращаться. Это записи, которые вы делаете, чтобы вам больше не приходилось возвращаться к старым диалогам.
Если вам нужно запустить два одновременных диалога с координацией между ними, для этого существует отдельный механизм. Сессии Claude Code могут обмениваться сообщениями, пока обе активны; это принципиально иная задача, чем восстановление вчерашней сессии с диска.
FAQ
Где Claude Code хранит историю моих сессий?
По умолчанию в каталоге конфигурации, по пути ~/.claude/projects/<project>/<session-id>.jsonl, где <project> — это путь к рабочей директории, в котором все небуквенно-цифровые символы заменены дефисами. Каждый файл имеет формат JSONL: один JSON-объект на строку для сообщения, вызова инструмента или записи метаданных. Переменная CLAUDE_CONFIG_DIR позволяет переместить каталог конфигурации в другое место, а cleanupPeriodDays в settings.json задает срок хранения транскриптов; по умолчанию он составляет 30 дней, минимум — 1 день.
Почему я не вижу сессию с VPS в списке выбора на своем ноутбуке?
Потому что транскрипты записываются на диск той машины, где был запущен агент, и никакие механизмы не синхронизируют их между устройствами. Диалог, который вы вели внутри tmux на VPS, существует только на этом VPS. Продолжите его там через SSH или выполните /export внутри сессии и скопируйте текстовый файл, если вам нужна локальная копия.
Могу ли я возобновить сессию, начатую в другом каталоге?
Да, если вы знаете её ID сессии. claude --resume <session-id> сначала ищет в текущем каталоге проекта и его git-рабочих деревьях, а затем во всех остальных проектах на этой же машине. В меню выбора Ctrl+A расширяет список до всех проектов на машине, а Ctrl+W — до всех рабочих деревьев текущего репозитория. Если совпадений нет, Claude Code сообщает No conversation found with session ID: <session-id>.
Стоит ли возобновлять старую сессию или начинать новую?
Возобновляйте сессию, если ваше следующее сообщение зависит от того, что уже было сказано в этом диалоге. Начинайте новую, если это не так, поскольку возобновление загружает всю историю целиком, и каждый последующий запрос будет её содержать. Следите за накоплением неактуальных данных: сессия, которая продолжает ссылаться на уже удаленные файлы, содержит устаревший контекст, а этот контекст расходует токены и снижает точность на каждом шаге.
Могу ли я запретить Claude Code записывать транскрипты на диск?
Да. CLAUDE_CODE_SKIP_PROMPT_HISTORY отключает запись транскриптов, а --no-session-persistence отключает её для одного неинтерактивного запуска claude -p. Сначала оцените последствия, так как именно транскрипты считываются при возобновлении, поэтому их отключение означает, что --continue и --resume будет нечего загружать. Если вас беспокоит местоположение файлов, а не сам факт их существования, укажите CLAUDE_CONFIG_DIR на зашифрованный том и уменьшите значение cleanupPeriodDays.