Руководство разработчика по tmux в эпоху ИИ
tmux для AI-агентов: сессии, панели, минимальный конфиг, tmux-resurrect и когда tmux лучше Zellij или Warp для SSH-сценариев.
tmux — это терминальный мультиплексор: он запускает постоянный серверный процесс на вашей машине, благодаря которому сессии, окна и панели сохраняются при разрыве соединения с терминалом. Вы можете отключиться от сессии, закрыть ноутбук, подключиться по SSH с другой машины и снова подключиться к сессии, обнаружив каждый процесс именно там, где вы его оставили. Именно это свойство делает tmux более актуальным сегодня, чем десять лет назад: разработчики всё чаще запускают долгоживущие процессы — серверы разработки, наблюдатели за сборкой и автономные ИИ-агенты для написания кода, такие как Claude Code и aider, — которым необходимо пережить нестабильное SSH-соединение или закрытую крышку ноутбука.
Это руководство начинается с построения концептуальной модели (сессии, окна, панели, клавиша-префикс), предлагает минимальную конфигурацию, которую достаточно вставить один раз и больше не трогать, а затем подробно рассматривает тему, которую не освещает ни одно другое руководство по tmux: использование tmux в качестве надёжного хоста для ИИ-агентов написания кода. В завершение приводится честное сравнение ситуаций, когда стоит использовать tmux, а когда лучше подойдёт современный терминал, такой как Zellij или Warp.
Ключевые выводы
- tmux переживает разрывы SSH-соединений, поскольку серверный процесс tmux работает независимо от любого клиентского подключения; ваш терминал — это лишь представление сессии, которая продолжает работать вне зависимости от того, подключены вы к ней или нет.
- Минимальная конфигурация tmux требует ровно четырёх вещей: переназначенного префикса (Ctrl+a), поддержки мыши (
set -g mouse on), режима копирования в стиле vi и интуитивных привязок для разделения панелей — всё остальное носит косметический характер. - tmux — естественный хост для долгоживущих ИИ-агентов написания кода: отключитесь от сессии Claude Code или aider, снова подключитесь с любой машины командой
tmux attach -t agent, и процесс агента вместе с полной историей вывода будет ждать вас. tmux-resurrectавтоматически восстанавливает раскладку сессии (окна, панели, рабочие директории); восстановление запущенных программ подключается по желанию через белый список, аtmux-continuumавтоматизирует сохранение каждые 15 минут по умолчанию.- Если вы работаете локально и никогда не подключаетесь по SSH к удалённым машинам и не запускаете долгоживущие процессы, современный терминал предоставит вам мультиплексирование с лучшими настройками по умолчанию и без необходимости изучать модель клавиши-префикса.
Что такое tmux и какую проблему он решает
tmux — это терминальный мультиплексор, позволяющий одному окну терминала содержать множество постоянных сессий, окон и панелей. Механизм его постоянства основан на архитектуре клиент-сервер: при запуске tmux он создаёт долгоживущий серверный процесс, которому принадлежат ваши сессии, а ваш терминал подключается к этому серверу в роли клиента. Когда SSH-соединение обрывается, ваша tmux-сессия не завершается — потому что серверный процесс работает независимо от любого клиентского подключения. Ваш терминал — лишь представление; сессия продолжает работать вне зависимости от того, подключены вы к ней или нет.
tmux решает сразу две проблемы. Первая — постоянство: сборка, занимающая 40 минут, сервер разработки или ИИ-агент, выполняющий задачу, продолжают работать после завершения ssh-сессии. Вы переподключаетесь и возобновляете работу. Вторая — раскладка: вместо того чтобы жонглировать вкладками терминала, вы делите одно окно на панели — редактор слева, лог сервера справа, оболочка внизу — всё видно одновременно и всё воспроизводимо.
tmux был создан в 2007 году Николасом Марриоттом как альтернатива GNU screen с лицензией ISC. Примеры в этом руководстве используют tmux 3.6b. Установите его с помощью менеджера пакетов:
# macOS
brew install tmux
# Debian / Ubuntu / WSL
sudo apt install tmux
# Fedora / RHEL
sudo dnf install tmux
tmux -V # проверить версию
Иерархия сессий, окон и панелей
Discover how at OpenReplay.com.
tmux организует работу в три уровня: сессия — именованное постоянное рабочее пространство (по одному на проект); окна — вкладки внутри этой сессии; панели — разделения внутри окна. Клавиша-префикс — по умолчанию Ctrl+b, традиционно переназначаемая на Ctrl+a — предшествует каждой команде tmux. Вы нажимаете префикс, отпускаете его, затем нажимаете клавишу команды.
Наиболее понятная аналогия соотносится с уже знакомым вам редактором: сессия — это всё окно редактора для проекта, окна — вкладки внутри него, а панели — разделённые представления внутри вкладки. У вас может быть сессия frontend и сессия backend; внутри backend — окно для приложения и окно для базы данных; внутри окна приложения — одна панель с запущенным сервером и одна для произвольных команд.
| Уровень | Что это | Время жизни |
|---|---|---|
| Сессия | Именованное рабочее пространство, обычно по одному на проект | Сохраняется до уничтожения или перезагрузки машины |
| Окно | Вкладка внутри сессии | Живёт вместе со своей сессией |
| Панель | Раздел внутри окна | Живёт вместе со своим окном |
Поскольку префикс предшествует командам, все приведённые ниже сочетания клавиш предполагают, что вы сначала нажимаете префикс. Префикс по умолчанию — Ctrl+b; конфигурация в следующем разделе переназначает его на Ctrl+a, что удобнее с точки зрения эргономики.
Необходимый набор команд
Эти команды покрывают 90% повседневного использования tmux: создание и именование сессий, отключение и повторное подключение, разделение и навигация по панелям, а также прокрутка вывода. Команды уровня сессий выполняются из оболочки; команды для панелей и окон выполняются внутри tmux с помощью префикса.
Управление сессиями из оболочки:
tmux new -s project # создать именованную сессию
tmux ls # вывести список запущенных сессий
tmux attach -t project # повторно подключиться к сессии
tmux kill-session -t project
Внутри сессии, с использованием префикса (здесь показан переназначенный Ctrl+a):
prefix d— отключиться; сессия продолжает работать в фоне.prefix c— создать новое окно.prefix n/prefix p— следующее / предыдущее окно.prefix %— разделить текущую панель вертикально (влево/вправо).prefix "— разделить горизонтально (вверх/вниз).prefix+ клавиши со стрелками — перемещение между панелями.prefix z— развернуть текущую панель на весь экран; повторное нажатие восстанавливает прежний вид.prefix [— войти в режим копирования для прокрутки и поиска; в режиме vi/выполняет поиск,n/Nпереходит между совпадениями,qвыходит.
Цикл отключения/повторного подключения — это основной рабочий процесс: отключитесь с помощью prefix d, переключитесь на другую машину, снова подключитесь командой tmux attach -t project-name и продолжайте работу ровно с того места, где остановились. Для полного справочника по сочетаниям клавиш держите под рукой шпаргалку по tmux — запоминать всю man-страницу не нужно.
Минимальный ~/.tmux.conf, который достаточно вставить один раз
Минимальная конфигурация tmux требует ровно четырёх вещей: переназначенной клавиши-префикса (Ctrl+a эргономичнее, чем Ctrl+b), поддержки мыши (set -g mouse on), режима копирования в стиле vi и интуитивных привязок для разделения — всё остальное носит косметический характер и может подождать. Ниже приведена эта конфигурация с комментарием к каждой строке, объясняющим её назначение. Вставьте её в ~/.tmux.conf и перезагрузите командой tmux source-file ~/.tmux.conf.
# --- префикс ------------------------------------------------
unbind C-b # убрать префикс по умолчанию
set -g prefix C-a # Ctrl+a ближе к основной позиции рук
bind C-a send-prefix # двойное нажатие Ctrl+a отправляет буквальный Ctrl+a
# --- удобство использования ---------------------------------
set -g mouse on # клик по панелям, перетаскивание границ, нативная прокрутка
set -g history-limit 10000 # хранить больше прокрутки, чем 2000 по умолчанию
set -g base-index 1 # нумеровать окна с 1, а не с 0
setw -g pane-base-index 1 # нумеровать панели тоже с 1
# --- режим копирования --------------------------------------
setw -g mode-keys vi # клавиши vi в режиме копирования
bind v copy-mode # prefix v для быстрого входа в режим копирования
# --- более удобные разделения -------------------------------
bind | split-window -h -c "#{pane_current_path}" # | делит влево/вправо
bind - split-window -v -c "#{pane_current_path}" # - делит вверх/вниз
# оба открываются в директории текущей панели
# --- перезагрузка ------------------------------------------
bind r source-file ~/.tmux.conf \; display "reloaded"
Несколько замечаний о синтаксисе и версиях. set -g mouse on — правильная форма с единственной опцией для tmux 2.1 и более поздних версий; tmux 2.1 (2015) объединил четыре старые опции (mode-mouse, mouse-select-pane, mouse-resize-pane, mouse-select-window) в одну. Если вы встречаете старую конфигурацию с mode-mouse on, именно поэтому она выглядит иначе. Флаг -c "#{pane_current_path}" заставляет новые разделения наследовать текущую директорию — мелочь, отсутствие которой вы заметите сразу.
Это вся конфигурация. Не спешите добавлять тему для строки состояния с первого дня. Если позже вы всё же захотите её добавить, плагин Catppuccin для tmux (текущий тег v2.3.0) требует tmux 3.2+, а в его README рекомендуется ручное клонирование вместо использования менеджера плагинов из-за конфликта имён.
Современные рабочие процессы: tmux как хост для ИИ-агентов написания кода
tmux — это естественный хост для долгоживущих ИИ-агентов написания кода. Отключитесь от сессии Claude Code или aider перед закрытием ноутбука, снова подключитесь с любой машины командой tmux attach -t agent, и процесс агента вместе с полной историей вывода будет ждать вас. И Claude Code, и aider — это терминальные CLI, поэтому здесь нет никакой специальной интеграции: это стандартное поведение любого процесса переднего плана, запущенного в tmux-сессии, применённое к инструменту, который может работать без присмотра многие минуты.
Агентные сессии написания кода — это именно та нагрузка, для защиты которой создавался tmux. Агент, рефакторящий большую кодовую базу или выполняющий длительный цикл тестирования, — это процесс, который не должен зависеть от времени жизни вашего SSH-соединения. Запустите его внутри tmux, и он переживёт обрыв.
Наблюдайте за агентом во время работы
Наиболее удобная раскладка — агент в одной панели и редактор в другой, расположенные рядом. Создайте сессию, разделите её и запустите агента с одной стороны:
tmux new -s agent
# внутри сессии:
# prefix | -> разделить влево/вправо
# левая панель: claude (или: aider)
# правая панель: nvim .
Вы наблюдаете за рассуждениями агента и диффами слева, просматривая или редактируя код справа, — всё в одном окне, всё переживает разрывы соединений.
Управление несколькими агентами с синхронизированными панелями
Когда вы запускаете несколько агентов параллельно — например, для одной задачи в разных ветках — синхронизированные панели позволяют управлять ими одновременно. При включённом setw -g synchronize-panes on каждое нажатие клавиши отправляется во все панели окна одновременно — это удобно для выдачи одного и того же промпта нескольким агентным сессиям или для одновременного сброса набора параллельных процессов. Отключите синхронизацию тем же способом (synchronize-panes off), когда захотите взаимодействовать с одной панелью. Распространённая ошибка при работе с синхронизированными панелями — забыть, что синхронизация включена, и транслировать деструктивную команду во все панели. Привяжите её к клавише с видимым индикатором, чтобы состояние никогда не было неоднозначным.
Скриптованная раскладка для агента
Чтобы получить воспроизводимую трёхпанельную раскладку для наблюдения — агент слева, редактор справа вверху, логи справа внизу — без каких-либо дополнительных зависимостей, сохраните этот скрипт в ~/bin/tmux-agent.sh:
#!/usr/bin/env bash
set -euo pipefail
SESSION="agent"
# Первая панель: агент (слева). -d создаёт сессию в отключённом состоянии.
tmux new-session -d -s "$SESSION" -x "$(tput cols)" -y "$(tput lines)"
tmux send-keys -t "$SESSION" "claude" C-m # агент, слева
# Разделить правую часть для редактора; новая панель становится активной.
tmux split-window -h -t "$SESSION"
tmux send-keys -t "$SESSION" "nvim ." C-m # редактор, справа вверху
# Разделить правую панель для логов; новая панель становится активной.
tmux split-window -v -t "$SESSION"
tmux send-keys -t "$SESSION" "tail -f dev.log" C-m # логи, справа внизу
# Перейти к панели агента и подключиться. Адресация по направлению (-L) вместо
# жёстко заданных индексов панелей работает корректно при любом значении base-index.
tmux select-pane -t "$SESSION" -L
tmux attach -t "$SESSION"
Выполните chmod +x ~/bin/tmux-agent.sh один раз, затем запускайте tmux-agent.sh при начале работы. Агент продолжает работу при отключении; подключитесь снова с любой машины.
Постоянство и плагины
tmux-сессии переживают разрывы соединений, но сами по себе не переживают перезагрузку — для этого вам нужны плагины, которые сериализуют и восстанавливают состояние. Стандартный стек — это Tmux Plugin Manager (TPM) плюс tmux-resurrect и tmux-continuum. Установите TPM командой:
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
Затем добавьте строки плагинов в конец ~/.tmux.conf и нажмите prefix + I для установки:
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
run '~/.tmux/plugins/tpm/tpm' # эта строка должна быть последней
Важно понимать, что именно делает каждый плагин. tmux-resurrect сохраняет и восстанавливает раскладку вашей сессии — окна, панели и рабочие директории — автоматически. Восстановление запущенных программ подключается по желанию и ограничено настраиваемым белым списком (@resurrect-processes); сессии редактора обрабатываются через @resurrect-strategy-vim/nvim, а текст панелей сохраняется только при установке @resurrect-capture-pane-contents 'on'. Не рассчитывайте, что ваш агент перезапустится сам при восстановлении — этого не произойдёт, если вы не добавили его в белый список.
tmux-continuum автоматизирует сохранение каждые 15 минут по умолчанию (настраивается через @continuum-save-interval) и восстанавливает состояние при запуске сервера tmux только при включённом @continuum-restore 'on'. Вместе эти плагины означают, что перезагрузка обходится вам восстановлением раскладки, а не построением всего с нуля.
Декларативные раскладки с tmuxp
Для раскладок, которые вы запускаете многократно, опишите их один раз в YAML с помощью tmuxp (репозиторий: tmux-python/tmuxp) или основанного на Ruby Tmuxinator. tmuxp читает конфигурации из XDG-директории ~/.config/tmuxp/ (устаревший путь ~/.tmuxp/ по-прежнему работает). Вот раскладка для наблюдения за агентом в виде ~/.config/tmuxp/agent.yaml:
session_name: agent
windows:
- window_name: supervise
layout: main-vertical
shell_command_before:
- cd ~/code/project
panes:
- claude
- nvim .
- tail -f dev.log
Загрузите её командой tmuxp load agent. Ключи здесь — session_name, windows, window_name, layout, shell_command_before, panes — актуальны для tmuxp 1.70.x. Это декларативный эквивалент bash-скрипта выше: одна команда, одна и та же воспроизводимая раскладка каждый раз.
Когда НЕ стоит использовать tmux
Если вы работаете локально и не подключаетесь по SSH к удалённым машинам и не запускаете долгоживущие фоновые процессы, современный терминал, такой как Zellij или Warp, предоставит вам мультиплексирование с лучшими настройками по умолчанию и без необходимости изучать модель клавиши-префикса. Преимущество tmux — именно в серверной стороне постоянства и возможности скриптования через SSH. Использовать tmux там, где достаточно нативных вкладок терминала, — значит добавлять сложность без какой-либо выгоды.
| Потребность | tmux | Zellij | Warp | Нативные вкладки |
|---|---|---|---|---|
| Постоянство SSH-сессий | Да | Да | Да | Нет |
| Скриптованные раскладки | Да (bash/tmuxp) | Да (layouts) | Ограниченно | Нет |
| Порог вхождения | Модель клавиши-префикса | Режимный, интуитивный | Нативный GUI | Отсутствует |
| Экосистема плагинов | Большая, зрелая | Развивающаяся | Встроенные функции | Отсутствует |
| Интеграция с ИИ | Хостит любой CLI-агент | Хостит любой CLI-агент | Нативные ИИ-подсказки | Зависит от ОС |
| Платформы | macOS, Linux, WSL | macOS, Linux | macOS, Linux, Windows | Зависит от ОС |
Несколько важных замечаний. Zellij — это мультиплексор на Rust с режимной системой вместо единой клавиши-префикса, встроенным постоянством сессий и сериализацией, а также опциональным пресетом в стиле tmux; он активно разрабатывается и всё ещё находится в стадии до 1.0. Warp — это кросс-платформенный терминал — macOS, Linux и Windows — с интегрированными ИИ-подсказками для команд; его клиент был открыт (MIT + AGPL v3) в апреле 2026 года, поэтому он является жизнеспособным вариантом для Linux, а не только инструментом для macOS. Используйте tmux, когда подключаетесь по SSH к удалённым машинам, запускаете долгоживущие процессы (наблюдатели за сборкой, серверы разработки, ИИ-агенты) или нуждаетесь в скриптованных воспроизводимых раскладках. Используйте современный терминал, когда хотите получить те же возможности с меньшими усилиями и вам не нужна глубина скриптования tmux или широта его экосистемы плагинов.
Заключение
Причина, по которой tmux занимает своё место в рабочем процессе с активным использованием агентов, та же, что и при работе по SSH много лет назад: он отделяет запущенный процесс от наблюдающего за ним терминала. Запустите следующий длительный сеанс работы агента внутри tmux new -s agent, отключитесь, когда отходите от компьютера, и снова подключитесь откуда угодно — работа продолжается без вас. Вставьте минимальную конфигурацию выше, добавьте tmux-resurrect, когда перезагрузки начнут обходиться вам потерей раскладок, и однажды опишите раскладку для агента в скрипте, чтобы никогда не воссоздавать её вручную.
Часто задаваемые вопросы
Что происходит с процессом, запущенным в tmux, при уничтожении сервера tmux или перезагрузке машины?
Процесс завершается. Постоянство tmux защищает только от разрывов клиентских соединений, но не от остановки сервера, поэтому уничтожение сервера командой tmux kill-server или перезагрузка машины завершает все запущенные процессы и уничтожает все сессии. Чтобы пережить перезагрузку, вам нужен tmux-resurrect для сохранения раскладки и tmux-continuum для её восстановления при запуске сервера, но даже в этом случае восстанавливается раскладка, а не запущенные программы — если только вы не добавили конкретные процессы в белый список через опцию resurrect-processes.
В чём разница между окнами и панелями в tmux?
Окно — это полноэкранная вкладка внутри сессии, а панель — разделённая область внутри одного окна. Переключение окон заменяет весь экран другой вкладкой с помощью prefix n или prefix p, тогда как панели делят одно видимое окно на расположенные рядом или вертикально сложенные области, между которыми вы перемещаетесь с помощью prefix и клавиш со стрелками. Используйте окна для разделения различных задач, например приложения и его базы данных, а панели — для одновременного просмотра связанных процессов, например редактора рядом с живым логом.
Нужно ли переназначать клавишу-префикс с Ctrl+b на Ctrl+a?
Нет, переназначение необязательно и является исключительно вопросом эргономики. Префикс по умолчанию Ctrl+b работает для каждой команды tmux без какой-либо настройки. Многие пользователи переназначают его на Ctrl+a, поскольку эти клавиши расположены ближе друг к другу на клавиатуре, однако это конфликтует с той же привязкой в GNU screen и с сочетанием readline, перемещающим курсор в начало строки. Если вы переназначаете на Ctrl+a, добавьте bind C-a send-prefix, чтобы двойное нажатие по-прежнему отправляло буквальный Ctrl+a в оболочку.
Что лучше использовать для запуска агентов написания кода через SSH — tmux или Zellij?
Оба варианта работают, поскольку каждый запускает сервер на удалённом хосте, который сохраняет сессии при разрывах соединений, поэтому выбор определяется настройками по умолчанию и экосистемой. Выбирайте tmux, когда вам нужна большая зрелая экосистема плагинов, глубокие возможности скриптования через bash или tmuxp, а также привязки, которые уже установлены на большинстве серверов. Выбирайте Zellij, когда предпочитаете интуитивные режимные элементы управления вместо модели клавиши-префикса и хотите получить сериализацию сессий без настройки плагинов. Zellij остаётся в стадии до 1.0, поэтому tmux — более консервативный выбор для долгосрочных установок.