12k
All articles

Руководство разработчика по tmux в эпоху ИИ

tmux для AI-агентов: сессии, панели, минимальный конфиг, tmux-resurrect и когда tmux лучше Zellij или Warp для SSH-сценариев.

OpenReplay Team
OpenReplay Team
Руководство разработчика по tmux в эпоху ИИ

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   # проверить версию

Иерархия сессий, окон и панелей

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 там, где достаточно нативных вкладок терминала, — значит добавлять сложность без какой-либо выгоды.

ПотребностьtmuxZellijWarpНативные вкладки
Постоянство SSH-сессийДаДаДаНет
Скриптованные раскладкиДа (bash/tmuxp)Да (layouts)ОграниченноНет
Порог вхожденияМодель клавиши-префиксаРежимный, интуитивныйНативный GUIОтсутствует
Экосистема плагиновБольшая, зрелаяРазвивающаясяВстроенные функцииОтсутствует
Интеграция с ИИХостит любой CLI-агентХостит любой CLI-агентНативные ИИ-подсказкиЗависит от ОС
ПлатформыmacOS, Linux, WSLmacOS, LinuxmacOS, 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 — более консервативный выбор для долгосрочных установок.

Understand every bug

Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — self-hosted, with full data ownership.

Star on GitHub

We use cookies to improve your experience. By using our site, you accept cookies.