← На главную

boo на Zig: сессии выживают, автоматизация send/peek/wait

11.06.2026 20:52 · hackernews

Вышел boo — новый терминальный мультиплексор в стиле GNU screen, написанный на Zig. Он использует ядро эмуляции терминала из libghostty (libghostty-vt). Каждая сессия парсится через этот движок, поэтому boo всегда знает точное состояние экрана: содержимое, стили, курсор, историю скролла и режимы терминала. Эти данные нужны, чтобы восстановить экран при переподключении, отвечать на терминальные запросы у откреплённых сессий и давать скриптам и AI-агентам читать экран в точности как человек.

Сессии переживают разрыв соединения: открепить — Ctrl-A d, вернуться — boo attach. Есть полноэкранный менеджер сессий boo ui со списком в боковой панели. Перерисовка точная, от состояния libghostty, включая SGR-стили, позицию курсора, области скролла, заголовок окна и режимы. Для автоматизации — команды send, peek, wait и вывод в --json, всё работает без TTY.

Установка для Linux и macOS одной строкой через curl. Можно указать версию переменной BOO_VERSION и путь — BOO_INSTALL_DIR. Основные команды: boo new (новая сессия, имя подставляется от текущей папки), boo ui, boo ls, boo attach, boo rename, boo kill (одну или все). Привязки клавиш наследуют умолчания GNU screen, включая C-x-варианты.

boo спроектирован как песочница для скриптов и AI. Типовой сценарий: создать headless-сессию, отправить команду через send, дождаться wait --idle или wait --text, прочитать экран через peek --scrollback, затем убить сессию. peek выдаёт рендеренный экран, а не сырой лог байтов — упорядоченный, полностью перерисованный и стабильный. wait блокируется, пока не появится текст или не пройдёт таймаут — никаких sleep-and-poll. send --text работает без экранирования и лишних переводов строк.

Архитектура: клиент переводит TTY в raw-режим, гоняет байты через Unix-сокет. Демон (форк при создании сессии) владеет PTY и кормит libghostty-vt. Когда сессия прикреплена, вывод идёт напрямую в терминал. При откреплении терминальные запросы обрабатывает libghostty. На повторном подключении демон перерисовывает экран из своего состояния.

Сравнение с GNU screen: boo делает то же самое, но подменяет старый эмулятор на современный libghostty-vt. screen теряет или портит то, что не понимает, а boo сохраняет всё как есть. С tmux — другая философия: boo сознательно копирует модель screen — одна сессия, префикс-клавиша и ничего лишнего. Ограничения: только один прикреплённый клиент на сессию, одно окно на сессию (без сплитов), префикс пока не настраивается. Сессии работают с TERM=xterm-256color.

Требуется Zig 0.15.2. Сборка через zig build. Зависимость libghostty подтягивается и собирается автоматически. Есть тесты, интеграционные тесты и поддержка Nix. Лицензия MIT. Проект молодой, не является заменой GNU screen на все случаи, но баги и идеи принимают через issues.

Читать оригинал →