От табов к tmux (и почему это не снобизм)

Я работаю в Windows Terminal поверх WSL2 (Ubuntu 26.04). Редактор у меня Zed; в терминале nano/vim/neovim только для мелких правок. Основной CLI-агент OpenCode.

tmux выглядит страшно. На деле это десяток сочетаний и один короткий конфиг. Я бы советовал выучить его как отдельную практику, один раз. А потом спокойно перепрыгнуть на herdr: та же модель с префиксом ctrl+b, только биндинги другие.


С чего всё началось

Долго жил вкладками Windows Terminal. Проблема не во вкладках, а в рутине. Каждый день перед работой одно и то же: зайти в проект, запустить дев-сервер, открыть агента, запустить скрипты. И фоном страх, что что-то вылетит, закроется, и ты потеряешь всё.

tmux закрыл обе проблемы разом:

Для меня tmux не про редактор. Он про то, чтобы не пересобирать рабочее место заново.


База: шорткаты и сценарии

Всё держится на одном префиксе: Ctrl + b. Жмёшь его и отпускаешь. Дальше идёт команда. Больше почти ничего учить не нужно. А когда перейдёте на herdr, там та же модель с префиксом ctrl+b.

Сессии: главное

tmux new -s myproject   # создать именованную сессию
tmux a -t myproject     # вернуться в неё
tmux ls                 # список живых сессий

Сценарий: запустил дев-сервер в сессии, нажал Ctrl + b → d (detach), закрыл терминал. Сервер работает. Вернулся и подключился обратно: tmux a -t myproject.

Окна (вкладки)

ДействиеХоткей
Новое окноCtrl + b → c
Переключиться по номеруCtrl + b → 0 (или 1, 2…)
ПереименоватьCtrl + b → , (запятая)

Сценарий: одно окно под дев-сервер, другое под CLI-агента.

Панели (сплиты)

ДействиеХоткей
Вертикальный сплитCtrl + b → %
Горизонтальный сплитCtrl + b → "
НавигацияCtrl + b → стрелки
Закрытьexit / Ctrl + d

Сценарий: сервер слева, консоль справа.


Конфиг под OpenCode в Windows Terminal

«Голый» tmux работает. Но когда внутри него запущен OpenCode (TUI) в Windows Terminal, вылезают мелочи. Ниже конфиг, который их чинит.

Файл: ~/.tmux.conf

# 1. Окружение терминала
set -g default-terminal "tmux-256color"

# 2. Всё, что нужно для Windows Terminal в одной строке
#    RGB (TrueColor): чинит фоны в OpenCode
#    extkeys: Shift+Enter (мягкий перенос)
#    clipboard: буфер обмена
#    cstyle: форма курсора
set -as terminal-features ",xterm-256color:RGB:extkeys:clipboard:cstyle"

# 3. Мышь и расширенные клавиши
set -g mouse on
set -s extended-keys on

# 4. Буфер обмена для OpenCode
set -g set-clipboard on
set -g allow-passthrough on

# 5. Защита от мусора при клике по статус-бару
#    (OpenCode включает mouse tracking, и Windows Terminal шлёт эхо)
set -g focus-events off
bind-key -n MouseDown1Status select-window -t= \; send-keys -M

Что за проблемы?

Проблема 1: копирование не работает. OpenCode пишет «Copied», но в буфере Windows пусто. Причина: tmux по умолчанию не пропускает ANSI-коды OSC 52. Решение: allow-passthrough on.

Проблема 2: мусор в строке ввода при клике по статус-бару. Кликаешь на 0:bash*, и в консоль летит мусор вроде 7070b8b/a8a8e3e3.... Причина: OpenCode держит терминал в режиме mouse/focus tracking; клик по статус-бару порождает эхо-ответ от Windows Terminal, который пролетает сквозь tmux. Решение: focus-events off и перехват клика по статус-бару с переключением окна.

После правок перезагрузите сервер:

tmux kill-server

При новом запуске всё чисто.


Координация агентов

Это, по-моему, и есть смысл всей затеи: tmux как прослойка между AI-агентами. У меня сейчас в работе OpenCode (оркестратор) и Pi Agent. Каждый в своей панели, оркестратор шлёт запросы в исполнитель и читает ответ прямо через tmux.

Идея на потом: Claude Code и locked-in тарифы

У Anthropic два режима оплаты Claude Code, и разница в них большая:

У меня тут простой тезис: на любой locked-in рано или поздно находится правильное решение автоматизации. В случае Claude Code потенциальная лазейка такая: гнать оркестрацию не через API/Agent SDK, а через интерактивный TUI. Открыл Claude Code в соседней панели tmux и управляешь им напрямую, отправляешь нажатия, читаешь ответ. Тогда использование формально остаётся «интерактивным» и держится в дешёвом режиме подписки, а не уходит в дорогую автоматизацию.

Честно скажу: это гипотеза, которую я ещё не проверял на практике, а не готовый рецепт. Держу её на потом. Пока что для моих задач оркестрации полностью хватает связки ollama cloud + opencode / pi. Отдельный Claude Code мне не нужен. Если гипотеза подтвердится, допишу отдельную заметку с пруфом.


Дальше: herdr

Если агенты становятся основным сценарием, следующий шаг herdr. Это не tmux, а отдельный мультиплексор под агентов: та же модель с префиксом ctrl+b, но биндинги свои. Зато из коробки мышь работает как надо и звук бьёт, когда агент ждёт тебя. А в сайдбаре видно, кому из агентов нужно внимание. tmux вы учите именно ради того, чтобы потом не переучиваться на подход, а сразу зайти в herdr.


Шпаргалка

# Сессии
tmux new -s <name>       # создать
tmux a -t <name>         # подключиться
tmux ls                  # список
tmux kill-server         # перезагрузка всего

# Внутри tmux (Prefix = Ctrl + b)
Prefix + d               # detach
Prefix + c               # новое окно
Prefix + ,               # переименовать окно
Prefix + %               # сплит по вертикали
Prefix + "               # сплит по горизонтали
Prefix + стрелки         # навигация
Prefix + 0-9             # окно по номеру

Заметка собрана по следам реальной настройки. База и конфиг проверены на себе. Идея про Claude Code через tmux остаётся гипотезой на потом.

← Пред.
Полугодовое портирование теперь занимает одну субботу?