Как сохранить сессию 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, в ней запущен выбранный агент. К ней подключено окно Терминала на рабочем столе, который вы открываете в браузере.