Терминальное окружение cmux: архитектура и возможности нового рабочего пространства для AI-агентов
Распространение автономных ИИ-агентов меняет ежедневную рабочую среду разработчиков. Когда над проектом одновременно работают несколько агентов, решающих задачи по генерации кода, запуску тестов и инспекции окружения, традиционные интерфейсы быстро теряют прозрачность. Стандартные терминальные эмуляторы требуют постоянного переключения между вкладками, а графические оболочки на базе фреймворка Electron (платформы для десктопных приложений на веб-технологиях) создают существенную нагрузку на оперативную память.
Терминальное рабочее пространство cmux предлагает нативное приложение для macOS, объединяющее функции мультиплексирования экранов, систему обратной связи от агентов и встроенные инструменты инспекции веб-приложений.
Архитектурный выбор: нативный Swift вместо тяжелых Electron-оболочек
Проект cmux распространяется под свободной лицензией GPL и развивается в рамках открытого репозитория manaflow-ai/cmux. Базовое архитектурное решение заключается в отказе от веб-оболочек в пользу полностью нативного технологического стека на языке Swift с применением стандартного системного графического фреймворка AppKit.
Для вывода текста и отрисовки содержимого применяется библиотека libghostty — нативный высокопроизводительный графический движок эмулятора терминала Ghostty с графическим ускорением. Это обеспечивает высокую скорость отклика интерфейса и низкие задержки при выводе больших объемов консольного лога.
Терминал обеспечивает разделение рабочих экранов: поддерживается создание вертикальных и горизонтальных панелей. Наряду с привычной сеткой, в cmux реализована нативная боковая панель (sidebar). В ней отображаются текущее состояние репозитория Git, номер активного pull request, рабочая директория, список прослушиваемых локальных сетевых портов и история полученных уведомлений.
Важное отличие cmux от серверов мультиплексирования вроде tmux заключается в границах ответственности. Инструмент спроектирован именно как локальное графическое рабочее пространство. При перезапуске cmux автоматически восстанавливает геометрическую раскладку панелей, историю прокрутки (scrollback), активные директории и историю браузерных сессий, однако он не является чекпоинтом для фоновых процессов. Задачи поддержания живых удаленных процессов по-прежнему делегируются сессиям SSH или классическому tmux.
Система обратной связи: индикация внимания и обработка управляющих последовательностей
Главная сложность при параллельном запуске нескольких автономных агентов (например, Claude Code, Codex или OpenCode) — своевременное обнаружение моментов, когда агенту требуется подтверждение операции, ввод дополнительных данных от разработчика или выбор варианта действия.
cmux решает эту задачу через механизм индикаторов внимания (Notification rings). При наступлении важного события соответствующая вкладка и панель подсвечиваются цветовым кольцом, а само событие заносится в общий список непрочитанных уведомлений.
Для отправки сигналов из консольных программ в cmux используются стандартные управляющие последовательности терминала (OSC — Operating System Command sequences):
- Последовательность OSC 777 представляет собой простой текстовый формат передачи сообщений. Передача строки
\e]777;notify;Заголовок;Текст сообщения\aиз любого скрипта мгновенно регистрирует новое событие в боковой панели cmux. - Последовательность OSC 99 (основанная на спецификациях протокола Kitty) поддерживает расширенную передачу идентификаторов уведомлений, подзаголовков и дополнительных метаданных.
- По утилитарному CLI-интерфейсу доступна прямая команда
cmux notify --title "Заголовок" --body "Текст сообщения", позволяющая отправлять уведомления из пользовательских Bash- и Python-сценариев.
Жизненный цикл любого уведомления включает четыре состояния: поступление события, вывод всплывающего системного окна (desktop alert), отображение метки на вкладке и удаление из панели после прочтения. При этом всплывающие окна автоматически подавляются, если окно cmux уже сфокусировано пользователем или открыта боковая панель с уведомлениями.
Для работы с агентами предусмотрен механизм перехватчиков (hooks). Скрипт-перехватчик получает JSON-структуру с описанием события через стандартный ввод (stdin) и может переопределять звуковые сигналы, менять порядок элементов или подсвечивать конкретные панели. Все пользовательские перехватчики исполняются в изолированном контексте и требуют подтверждения доверия со стороны разработчика при загрузке из проектных конфигов.
Встроенный браузерный примитив и программное управление сессиями
Разработка веб-сервисов с помощью ИИ-агентов требует проверки результатов в браузере. В cmux встроен собственный нативный графический браузер, который можно развернуть на соседней панели прямо рядом с терминалом агента.
Браузерный модуль предоставляет программный API (scriptable API), портированный из инструмента автоматизации agent-browser. Это позволяет агентам не только открывать локальные адреса разработок, но и выполнять через командную строку следующие операции:
openиnavigate— открытие и переход по сетевым адресам;snapshotиscreenshot— получение DOM-дерева и снимков экрана для анализа верстки;click,fill,selectиpress— симуляция ввода и взаимодействия с формами;eval— исполнение JavaScript-сценариев в контексте страницы.
Благодаря сокетному API и утилите cmux, агенты могут самостоятельно управлять конфигурацией терминала: создавать новые вкладки, разделять панели, открывать страницы на локальном веб-сервере и передавать нажатия клавиш.
Для работы на удаленных серверах в cmux предусмотрен встроенный SSH-релеей. При первом соединении cmux проверяет архитектуру сервера (uname -m), загружает бинарный модуль cmuxd-remote, настраивает обратный туннель с шифрованием HMAC-SHA256 и проксирует браузерный трафик по протоколам SOCKS5 и HTTP CONNECT. При разрывах связи соединение автоматически восстанавливается с экспоненциальной задержкой.
Конфигурация, правила безопасности и границы ответственности
cmux разделяет настройки терминального эмулятора и настройки рабочих пространств.
Параметры шрифтов, цветов и размера текста считываются из стандартных конфигурационных файлов Ghostty (~/.config/ghostty/config). Настройки самого cmux располагаются в файле ~/.config/cmux/cmux.json. Файл поддерживают стандартные комментарии и перечитываются без перезапуска приложения сочетанием клавиш Cmd+Shift+, или вызовом cmux reload-config.
При работе в проектных репозиториях допускается использование файла .cmux/cmux.json. Он позволяет задавать специфические для проекта горячие клавиши и действия в палитре команд (Command Palette). Из соображений безопасности проектный файл конфигурации обязательно проходит процедуру подтверждения доверия, предотвращая несанкционированный запуск произвольных команд при открытии чужих репозиториев.
Практический чек-лист по установке и настройке cmux
Для использования cmux требуется компьютер Mac под управлением macOS 14.0 или более новой версии на базе процессоров Apple Silicon либо Intel.
- Установка приложения:
Установите стабильную версию с помощью пакетного менеджера Homebrew:
brew tap manaflow-ai/cmux brew install --cask cmux
Для последующего обновления используйте командуbrew upgrade --cask cmux. Загрузить готовый образ DMG также можно с официального сайта проекта. - Настройка утилиты командной строки (CLI):
Чтобы утилита
cmuxбыла доступна во всех внешних терминалах, создайте символическую ссылку в системном каталоге:sudo ln -sf "/Applications/cmux.app/Contents/Resources/bin/cmux" /usr/local/bin/cmux - Проверка работоспособности:
Запустите cmux из папки Программы. В стороннем терминале проверьте доступ к сокету:
cmux list-workspaces
Отправьте тестовое уведомление для проверки работы боковой панели:cmux notify --title "Build Status" --body "Тестовое уведомление успешно доставлено" - Интеграция с кодовыми агентами:
Убедитесь, что агент (Claude Code, Codex или OpenCode) установлен в системе. Для настройки перехватчиков сессий запустите команду интеграции:
cmux hooks setup codex
Если вы используете cmux внутри сервера tmux, добавьте в~/.tmux.confразрешение сквозного прохождения управляющих последовательностей:set -g allow-passthrough on.
Документация по настройке сокетов, браузерного API и конфигурации доступна на официальном сайте cmux и в репозитории cmux на GitHub.

