Как навести порядок среди десятка запущенных сессий Claude Code в tmux
Когда запускаешь Claude Code в терминале для пары правок, всё выглядит аккуратно. Запустил команду, дал задачу, дождался ответа, закрыл. Проблемы начинаются, если держать открытыми четыре-пять проектов одновременно. В одном репозитории агент рефакторит тесты, во втором пишет миграцию базы данных, в третьем крутит сборку.
Через полчаса терминал превращается в лабиринт. Непонятно, где агент ждёт подтверждения команды, где ещё шуршит скриптами, а где давно закончил работу и просто висит. Приходится перебирать окна tmux вручную, тратя время на проверку статусов.
Такуя Мацуяма, автор блога devas.life и нескольких популярных утилит под Neovim и tmux, выкатил решение этой проблемы. Его плагин tmux-claude-session-manager превращает разрозненные терминальные окна с агентами в аккуратный список с быстрым переключением.
Что делает плагин
По сути, это диспетчер задач для Claude Code внутри tmux. Инструмент связывает воедино интерфейс fzf, встроенный механизм всплывающих окон tmux popup и внутренний API самого Claude Code.
Вы нажимаете сочетание клавиш и видите плавающее окно со списком всех запущенных сессий. Напротив каждого процесса сразу виден статус:
- working (агент занят генерацией или исполнением команд);
- waiting (требуется реакция пользователя или подтверждение);
- idle (сессия простаивает);
- время с момента последней активности агента.
Агенты, которые требуют вашего внимания, автоматически поднимаются наверх списка. Рядом отображается живой предпросмотр экрана через capture-pane. Сразу видно, на каком вопросе споткнулся помощник, даже не переключаясь в саму сессию.
Нажатие Enter переносит вас прямо в контекст нужного окна и открывает сессию во всплывающем фрейме. Закончили диалог или агент завершил работу — жмёте сочетание для удаления процесса, и сессия аккуратно закрывается.
Интересные детали под капотом
Здесь нет самодельных демонов или тяжелых хуков на bash, которые парсят вывод ps. Автор пошёл более элегантным путём.
Claude Code версий 2.1.139 и выше умеет отдавать информацию о своих агентах через встроенную команду claude agents --json. Каждая запущенная копия сама рапортует локальному супервизору о текущем статусе. Плагин просто читает этот JSON через jq.
Главная техническая сложность заключалась в сопоставлении процессов с панелями tmux. На macOS, например, панель часто сообщает PID родительского шелла, а не дочерней программы. Внутри плагина скрипт agents.sh связывает идентификаторы по цепочке: pid -> tty -> панель tmux.
Благодаря такой привязке плагин отслеживает именно процессы, а не сессии. Если вы запустили трёх разных агентов в одном проекте или подняли Claude в обычной соседней панели без плагина, инструмент всё равно найдёт каждый процесс и покажет отдельной строкой. На весь опрос уходит буквально три системных вызова, так что интерфейс работает без задержек.
Ещё одна приятная мелочь: если открыть меню выбора (prefix + u), находясь уже внутри всплывающего окна Claude, плагин сначала отсоединит текущий popup, а затем развернет окно выбора на полный размер внешнего терминала. Никаких вложенных матрешек из уменьшающихся рамок.
Установка и базовые настройки
Для работы понадобятся tmux версии 3.2 или выше с поддержкой popup, установленный fzf, утилита jq и свежий релиз Claude Code.
Если вы используете менеджер плагинов TPM, добавьте строку в конфигурационный файл ~/.tmux.conf:
set -g @plugin 'craftzdog/tmux-claude-session-manager'
После этого нажмите prefix + I для загрузки.
По умолчанию плагин использует два сочетания клавиш:
prefix+yзапускает новую сессию Claude в текущей директории внутри всплывающего окна (или подключается к уже существующей);prefix+uоткрывает fzf-селектор со всеми активными агентами.
Внутри окна списка действуют стандартные стрелки и фильтрация по тексту. Клавиша Enter переключает на выбранную сессию, а Ctrl-x принудительно завершает процесс.
Параметры легко переопределяются. Например, можно задать флаги запуска для самого Claude или изменить размеры окна:
set -g @claude_popup_width '85%'
set -g @claude_popup_height '85%'
set -g @claude_args '--dangerously-skip-permissions'
Для любителей модального управления в README есть отличный пример интеграции с vim-раскладкой. Можно настроить fzf так, чтобы список открывался в режиме навигации по j/k, а переключение в режим поиска происходило по клавишам i или a:
set -g @claude_fzf_options "\
--prompt 'nav> ' \
--bind 'j:down' \
--bind 'k:up' \
--bind 'q:abort' \
--bind 'x:execute-silent(kill {3})+reload(sleep 0.3; \$CLAUDE_PICKER --list)' \
--bind 'i:unbind(j,k,q,i,a,x)+change-prompt(filter> )' \
--bind 'a:unbind(j,k,q,i,a,x)+change-prompt(filter> )' \
--bind 'esc:rebind(j,k,q,i,a,x)+change-prompt(nav> )'"
Стоит ли ставить
Если вы запускаете Claude Code раз в неделю ради пары строчек кода, без плагина легко обойтись. Обычной вкладки терминала вполне достаточно.
Инструмент пригодится тем, кто активно использует агентный подход в терминале и параллелит задачи по разным веткам или подпроектам. Плагин избавляет от рутины с поиском нужной вкладки и собирает мониторинг фоновых задач в один понятный экран. Настройка занимает пару минут, а исходный код скрипта компактный и прозрачный, без лишней магии.

