Руководство

Как сохранить сессию Claude Code с помощью tmux

Агент в терминале живёт внутри терминала. Закрыли окно, потеряли агента. Оборвалось SSH-соединение, потеряли агента. tmux помещает агента в сессию, на которую терминал лишь смотрит. Сессия продолжает работать, когда вы отвлеклись. Вот настройка, которую мы используем на каждом Mac для агентов, с точными командами.

Установка и запуск

brew install tmux
tmux new -s agent

Теперь вы внутри сессии с именем agent. Запустите в ней агента, как любую другую команду.

claude

Для Codex запустите его команду. Всё на этой странице одинаково работает для обоих инструментов.

Отключиться и вернуться

Нажмите Ctrl-b, отпустите, затем нажмите d. Терминал вернётся в оболочку, а агент продолжит работать в фоне. Чтобы вернуться к нему из любого терминала на машине, подключитесь по имени.

tmux attach -t agent

Если забыли имя, посмотрите, что запущено.

tmux ls

Подключиться с телефона

Установите SSH-клиент на телефон. Чаще всего берут Termius и Blink Shell. Подключитесь к Mac и войдите в ту же сессию. Вы видите ровно то, что делает агент, и можете ему писать. На клавиатуре телефона неудобно писать длинные промпты. Поэтому с телефона обычно проверяют ход работы и отвечают на вопрос, а настоящую работу делают с ноутбука.

Для Claude Code на телефоне удобнее Remote Control, чем SSH. Он подключает приложение Claude к запущенной сессии вообще без терминала. Как его настроить, описано в руководстве по запуску Claude Code 24/7. tmux при этом всё равно нужен, потому что Remote Control подключается к сессии, которая должна существовать.

Удобные настройки

Две настройки сильно упрощают работу с агентом в tmux. Запишите их в файл .tmux.conf в домашней папке.

set -g mouse on
set -g history-limit 50000

Первая позволяет прокручивать тачпадом или пальцем. Вторая хранит достаточно вывода, чтобы прочитать, что агент делал час назад. После сохранения файла перезапустите tmux или перечитайте конфиг изнутри сессии.

tmux source-file ~/.tmux.conf

Пережить перезагрузку

Сессии tmux живут в памяти. Перезагрузка их стирает. На машине без присмотра сессия должна восстанавливаться сама. Это делает LaunchAgent, который запускается при входе в систему. Сохраните этот файл как dev.local.agent-session.plist в папке LaunchAgents внутри Library в домашней папке.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key><string>dev.local.agent-session</string>
  <key>ProgramArguments</key>
  <array>
    <string>/bin/sh</string>
    <string>-c</string>
    <string>/opt/homebrew/bin/tmux has-session -t agent 2>/dev/null || /opt/homebrew/bin/tmux new -d -s agent</string>
  </array>
  <key>RunAtLoad</key><true/>
  <key>StartInterval</key><integer>60</integer>
</dict>
</plist>

Загрузите его один раз. После этого он запускается при каждом входе и проверяет сессию каждую минуту.

launchctl load ~/Library/LaunchAgents/dev.local.agent-session.plist

Так создаётся пустая сессия. Агента внутри он не перезапускает, и это сделано намеренно. Агент, который сам перезапускается посреди недоделанной задачи, пока все спят, приносит сюрпризы. Включите автоматический вход для пользователя, чтобы LaunchAgent было где работать. А задачу запустите сами, когда подключитесь в следующий раз.

Две сессии, два агента

Ничто не мешает запустить Claude Code в одной сессии, а Codex в другой на той же машине. Две сессии Claude Code на двух репозиториях тоже работают. Называйте их по задаче.

tmux new -s api-refactor
tmux new -s ios-tests

Держите каждого агента в отдельном checkout репозитория, чтобы они не правили одни и те же файлы. С git worktree это почти ничего не стоит.

Частые вопросы

Продолжит ли tmux работу агента, если Mac уснёт?

+

Нет. tmux защищает от закрытия терминала и обрыва соединения. Сон замораживает всю машину, вместе с tmux. Сначала отдельно решите проблему сна настройками питания, а tmux используйте поверх.

Чем tmux отличается от screen?

+

Они решают одну и ту же задачу. tmux активно поддерживается, есть в Homebrew и имеет описанные выше настройки мыши и истории. Используйте тот, который знаете. Команды разные, но идея одна.

Можно ли увидеть вывод агента до того, как я подключился?

+

Да. Прокрутите вверх внутри сессии. Настройка history-limit задаёт, сколько строк хранится. С включённым режимом мыши прокручивайте тачпадом. Без него нажмите Ctrl-b, затем клавишу левой квадратной скобки, прокрутите и нажмите q, чтобы выйти.

Это работает на размещённом Mac?

+

Да, именно так настроены наши Mac для агентов. При входе создаётся сессия agent, в ней запущен выбранный агент. К ней подключено окно Терминала на рабочем столе, который вы открываете в браузере.

Похожие руководства