Перейти к основному содержимому

TUI

TUI — современный front-end VibeOS: терминальный UI на том же Python runtime, что и Classic CLI. Тот же агент, те же сессии, те же slash-команды — более чистая и отзывчивая поверхность.

Рекомендуемый способ запускать VibeOS интерактивно.

Запуск​

# Launch the TUI
vibeos --tui

# Resume the latest TUI session (falls back to the latest classic session)
vibeos --tui -c
vibeos --tui --continue

# Resume a specific session by ID or title
vibeos --tui -r 20260409_000000_aa11bb
vibeos --tui --resume "my t0p session"

# Run source directly — skips the prebuild step (for TUI contributors)
vibeos --tui --dev

Вы также можете включить его через env var:

export VIBEOS_TUI=1
vibeos # now uses the TUI
vibeos chat # same

Или сделайте его постоянным значением по умолчанию в ~/.vibeos/config.yaml:

display:
interface: tui # "cli" (default) or "tui"

При использовании display.interface: tui простой vibeos (и vibeos chat) запускает TUI. Явные флаги всегда побеждают — запустите vibeos --cli, чтобы вернуться к классическому REPL для одного вызова, или vibeos --tui / VIBEOS_TUI=1, чтобы принудительно использовать TUI, когда конфигурация по умолчанию — cli.

Классический интерфейс командной строки остается по умолчанию. Все, что задокументировано в [Интерфейс CLI] (cli.md) — slash-команды, быстрые команды, предварительная загрузка навыков, персональные настройки, многострочный ввод, прерывания — работает в TUI одинаково.

Почему TUI​

  • Мгновенный первый кадр — баннер отображается до завершения загрузки приложения, поэтому терминал никогда не зависает во время запуска VibeOS.
  • Неблокирующий ввод — вводите и ставьте сообщения в очередь до того, как сеанс будет готов. Ваше первое приглашение отправляется в тот момент, когда агент подключается к сети.
  • Богатые наложения: средства выбора модели, средства выбора сеансов, запросы на утверждение и разъяснения отображаются в виде модальных панелей, а не в виде встроенных потоков.
  • Панель сеансов в реальном времени — инструменты и навыки заполняются постепенно по мере их инициализации.
  • Выбор, удобный для мыши — перетащите, чтобы выделить однородный фон вместо инверсного SGR. Скопируйте обычным жестом копирования вашего терминала.
  • Рендеринг на альтернативном экране — дифференциальные обновления означают отсутствие мерцания при потоковой передаче и отсутствие помех при прокрутке после выхода.
  • Возможности Composer — встроенная вставка-свертывание для длинных фрагментов, вставка текста Cmd+V / Ctrl+V с резервным копированием изображения из буфера обмена, безопасность вставки в квадратных скобках и нормализация вложений изображений/путей к файлам.

Применяются те же скины и личности. Переключитесь в середине сеанса с помощью /skin ares, /personality pirate, и пользовательский интерфейс перерисовывается в реальном времени. См. Скины и темы для получения полного списка настраиваемых клавиш и того, какие из них применимы к классическому интерфейсу, а не к TUI — TUI учитывает палитру баннера, цвета пользовательского интерфейса, глиф/цвет подсказки, отображение сеанса, меню завершения, фон выбора, tool_prefix и help_header.

Сворачиваемые разделы баннеров​

Баннер запуска TUI группирует информацию о времени выполнения в четыре свертываемых раздела, каждый из которых отображается с помощью шеврона ▸ / ▾ рядом с заголовком раздела:

РазделСостояние по умолчанию
ИнструментыОткрыть
НавыкиСвернутый
Системная подсказкаСвернутый
MCP-серверыСвернутый

Щелкните в любом месте заголовка раздела (или его шеврона), чтобы переключить его. Список «Инструменты» открывается по умолчанию, поскольку это наиболее проверяемый раздел при запуске сеанса; Навыки, системная подсказка и серверы MCP по умолчанию сворачиваются, поэтому баннер остается компактным, даже если вы установили десятки навыков или подключили множество серверов MCP. Состояние является локальным для экземпляра баннера, поэтому при следующем запуске сбрасываются значения по умолчанию.

Требования​

  • Node.js ≥ 20 — TUI запускается как подпроцесс, запускаемый из интерфейса командной строки Python. vibeos doctor подтверждает это.
  • TTY — как и в классическом интерфейсе командной строки, передача стандартного ввода или работа в неинтерактивных средах возвращаются в режим одного запроса.

При первом запуске VibeOS устанавливает зависимости узла TUI в ui-tui/node_modules (однократно, в течение нескольких секунд). Последующие запуски происходят быстро. Если вы выберете новую версию VibeOS, пакет TUI будет пересобран автоматически, если исходные коды новее, чем dist.

Внешняя предварительная сборка​

Дистрибутивы, поставляющие готовый пакет (Nix, системные пакеты), могут указывать на него VibeOS:

export VIBEOS_TUI_DIR=/path/to/prebuilt/ui-tui
vibeos --tui

Каталог должен содержать dist/entry.js.

Сочетания клавиш​

Привязки клавиш точно соответствуют Классическому CLI. Единственные поведенческие различия:

  • Перетаскивание мышью выделяет текст с однородным фоном выделения.
  • Cmd+V / Ctrl+V сначала пытается вставить обычный текст, затем возвращается к OSC52/чтению из собственного буфера обмена и, наконец, прикрепляет изображение, когда буфер обмена или вставленная полезная нагрузка преобразуются в изображение.
  • /terminal-setup устанавливает локальные привязки терминала VS Code/Cursor/Windsurf для улучшения Cmd+Enter и четности отмены/повтора в macOS.
  • Автодополнение slash-команд открывается как плавающая панель с описаниями, а не как встроенный раскрывающийся список.
  • Ctrl+X открывает переключатель сеансов в реальном времени. Когда сообщение в очереди выделено (отправлено, пока агент еще работал), вместо этого оно все равно удаляет это сообщение в очереди. Esc отменяет редактирование и снимает выделение без удаления.
  • Ctrl+G / Ctrl+X Ctrl+E — открыть текущий входной буфер в $EDITOR для многострочной/длинной композиции; save-and-exit отправляет содержимое обратно в виде приглашения.

Slash-команды​

Все slash-команды работают как в Classic CLI. Часть из них в TUI богаче: оверлеи вместо встроенных панелей.

КомандаПоведение TUI
/helpНаложение с категоризированными командами, навигация с помощью клавиш со стрелками
/sessions (псевдоним /switch)Переключатель сеансов в реальном времени — список открытых сеансов TUI, переключение между ними, закрытие их или запуск другого
/modelМодальный выбор моделей, сгруппированный по поставщикам, с подсказками по стоимости
/skinПредварительный просмотр в реальном времени — изменение темы применяется по мере просмотра
/detailsПереключить подробные сведения о вызове инструментов (глобальные или для каждого раздела)
/usageРасширенная панель токенов/стоимости/контекста
/agents (псевдоним /tasks)Наложение наблюдаемости — действующее дерево субагентов с элементами управления уничтожением/паузой, стоимостью каждой ветки/свертыванием токенов/файлов, пошаговой историей
/reloadПеречитывает ~/.vibeos/.env в работающий процесс TUI, чтобы вновь добавленные ключи API вступили в силу без перезапуска
/mouse [on|off|toggle|wheel|buttons|all]Выберите предустановку отслеживания мыши во время выполнения (также сохраняется до display.mouse_tracking в config.yaml). wheel (1000+1006) сохраняет прокрутку с помощью колеса прокрутки без событий наведения, которые вызывают спам tmux «Нет изображения в буфере обмена» над строкой подсказки; buttons добавляет перетаскивание для выбора; all — значение по умолчанию для пользовательского интерфейса, управляемого при наведении.

Остальные slash-команды (навыки, quick commands, personality) ведут себя как в Classic CLI. См. справочник slash-команд.

Переключатель сеансов в реальном времени​

Используйте переключатель живых сеансов, если вы хотите, чтобы один терминал выступал в качестве диспетчера для нескольких сеансов TUI. В нем перечислены только сеансы, которые в данный момент активны в этом процессе TUI; закрытые сеансы остаются сохраненными стенограммами и могут быть открыты повторно с помощью /resume или vibeos --tui --resume <id-or-title>`.

Откройте его любым из этих способов:

  • Ctrl+X из TUI.
  • /sessions или /switch.
  • /sessions new, чтобы немедленно создать новую живую сессию.
  • Нажмите на счетчик N live sessions в строке состояния.
VibeOS TUI Session Orchestrator with one live session and a +new row

Внутри коммутатора:

  • ↑ / ↓ перемещает выделение; щелчки мыши также выбирают строки.
  • Enter переключается на выбранный сеанс прямой трансляции.
  • Ctrl+D закрывает выбранный сеанс прямой трансляции.
  • Ctrl+N запускает пустой сеанс прямой трансляции.
  • Ctrl+R обновляет список живых сеансов.
  • Esc закрывает переключатель.
  • Выберите +new, введите запрос и нажмите Enter, чтобы запустить новый сеанс в реальном времени. Сначала нажмите Tab, если вы хотите выбрать модель только для этого нового сеанса.

Математический рендеринг LaTeX​

Конвейер markdown TUI отображает математические вычисления LaTeX в реальном времени: $E = mc^2$ и $$\frac{a}{b}$$ визуализируются как математические вычисления в формате Unicode вместо необработанного исходного текста TeX. Работает для встроенной и блочной математики; неподдерживаемый синтаксис возвращается к отображению буквального TeX, завернутого в фрагмент кода, чтобы его можно было копировать.

Это всегда включено — ничего настраивать не нужно. Классический CLI сохраняет необработанный TeX.

Обнаружение светового терминала​

TUI автоматически обнаруживает световые терминалы и соответствующим образом переключается на светлую тему. Обнаружение работает на трех уровнях:

  1. VIBEOS_TUI_THEME env var — высший приоритет. Значения: light, dark или необработанный шестизначный фоновый шестнадцатеричный код (например, ffffff, 1a1a2e).
  2. COLORFGBG env var — классический вопрос «какой у меня цвет фона?» подсказка, используемая терминалами, производными от xterm.
  3. Фоновая проверка терминала через OSC 11 — работает на современных терминалах (Ghostty, Warp, iTerm2, WezTerm, Kitty), которые не устанавливают COLORFGBG.

Если вам нужна светлая тема постоянно независимо от терминала:

export VIBEOS_TUI_THEME=light

Стили индикатора занятости​

Индикатор занятости в строке состояния является подключаемым — по умолчанию палитра каваи-лица VibeOS вращается каждые 2,5 секунды во время работы агента. Выберите другой стиль через конфигурацию или слеш-команду /indicator:

display:
tui_status_indicator: kaomoji # kaomoji | emoji | unicode | ascii

Или во время сессии: /indicator emoji (и т. д.). Стили поставляются с глифами одинаковой ширины, поэтому остальная часть строки состояния не дрожит при вращении.

Автовозобновление​

По умолчанию vibeos --tui запускает новый сеанс при каждом запуске. Чтобы автоматически повторно подключиться к последнему сеансу TUI (полезно, если ваш терминал или SSH-соединение неожиданно прерывается), зарегистрируйтесь:

export VIBEOS_TUI_RESUME=1          # most-recent TUI session
# or:
export VIBEOS_TUI_RESUME=<session-id> # specific session

Снимите значение переменной или явно передайте --resume <id>`, чтобы переопределить ее для каждого запуска.

Строка состояния​

Строка состояния TUI отслеживает состояние агента в режиме реального времени:

СтатусЗначение
starting agent…Идентификатор сеанса активен; инструменты и навыки все еще появляются в Интернете. Вы можете ввести — сообщения в очереди и отправить, когда будете готовы.
readyАгент простаивает, принимает вводимые данные.
thinking… / running…Агент рассуждает или запускает инструмент.
interruptedТекущий ход отменен; нажмите Enter, чтобы отправить еще раз.
forging session… / resuming…Первоначальное соединение или подтверждение связи --resume.

Цвета и пороговые значения строки состояния для каждого скина используются в классическом интерфейсе командной строки — см. Skins для настройки.

В строке состояния также отображается:

  • Рабочий каталог с веткой git — ~/projects/vibeos-agent (docs/two-week-gap-sweep). Суффикс ветки обновляется, когда вы используете git checkout на стороннем терминале (кэшируемом по времени), поэтому TUI отражает вашу фактическую активную ветку, а не ту, которая была при запуске.
  • Прошедшее время для каждого запроса — ⏱ 12s/3m 45s во время выполнения хода (в реальном времени), замораживается до ⏲ 32s / 3m 45s после завершения хода. Первое число — время с момента последнего сообщения пользователя; во-вторых, общая продолжительность сеанса. Сбрасывается при каждом новом запросе.
  • 🗜️ N — количество автоматических сжатий текущего сеанса. Появляется после первого срабатывания сжатия.
  • ▶ N — количество задач /background, выполняющихся в данный момент в данной сессии. Появляется всякий раз, когда выполняется хотя бы одна задача.
  • ⚠ YOLO — видимое предупреждение при включении режима YOLO (vibeos --yolo, /yolo или VIBEOS_YOLO_MODE=1). Тот же значок также отображается в баннере запуска, поэтому вы не можете запустить сеанс автоматического одобрения, не заметив этого.

Конфигурация​

TUI учитывает все стандартные настройки VibeOS: ~/.vibeos/config.yaml, профили, персональные данные, оболочки, быстрые команды, пулы учетных данных, поставщики памяти, включение инструментов/навыков. Никакого файла конфигурации, специфичного для TUI, не существует.

Несколько клавиш специально настраивают поверхность TUI:

display:
skin: default # any built-in or custom skin
personality: helpful
details_mode: collapsed # hidden | collapsed | expanded — global accordion default
sections: # optional: per-section overrides (any subset)
thinking: expanded # always open
tools: expanded # always open
activity: collapsed # opt back IN to the activity panel (hidden by default)
mouse_tracking: all # off | wheel | buttons | all (or true/false for back-compat).
# wheel — 1000+1006 (scroll + click; no drag, no hover —
# recommended inside tmux to silence the prompt-row
# "No image in clipboard" spam from hover events)
# buttons — adds 1002 for terminal-side drag selection
# all — adds 1003 for hover (scrollbar paginate-on-hover,
# link mouseenter, etc.)

Переключатели времени выполнения:

  • /details [hidden|collapsed|expanded|cycle] — установить глобальный режим
  • /details &lt;section&gt; [hidden|collapsed|expanded|reset] — переопределить один раздел (разделы: thinking, tools, subagents, activity)

Видимость по умолчанию

TUI поставляется с самоуверенными настройками по умолчанию для каждого раздела, которые транслируют ход как живая расшифровка вместо стены шевронов:

  • thinking — расширенный. Рассуждения передаются в реальном времени по мере того, как модель их генерирует.
  • tools — расширенный. Вызовы инструментов и их результаты отображаются открытыми.
  • subagents — переходит в глобальный details_mode (сворачивается под шеврон по умолчанию — молчит, пока делегирование не произойдет).
  • activity — скрыто. Окружающая мета (подсказки о шлюзах, терминальная четность подсказки, фоновые уведомления) — это шум для большинства повседневного использования. Инструмент сбои по-прежнему отображаются в строке неисправного инструмента; окружающий ошибки/предупреждения отображаются через плавающую кнопку обратного хода, когда каждая панель скрыт.

Переопределения для каждого раздела имеют приоритет как над значением раздела по умолчанию, так и над значением по умолчанию. глобальный details_mode. Чтобы изменить макет:

  • display.sections.thinking: collapsed — вернуть мышление под шеврон
  • display.sections.tools: collapsed — поместить вызовы инструментов обратно под шеврон
  • display.sections.activity: collapsed — снова включить панель активности.
  • /details &lt;section&gt; <mode>` во время выполнения

Все, что явно установлено в display.sections, имеет преимущество перед значениями по умолчанию, поэтому существующие конфигурации продолжают работать без изменений.

сеансов​

Сеансы разделяются между TUI и классическим CLI — оба пишут в один и тот же ~/.vibeos/state.db. Вы можете начать сеанс в одном, возобновить в другом. Средство выбора сеанса отображает сеансы из обоих источников с помощью тега источника.

См. Сессии для получения информации о жизненном цикле, поиске, сжатии и экспорте.

Как TUI взаимодействует со своим шлюзом​

По умолчанию TUI создает собственный внутрипроцессный шлюз, поэтому каждый экземпляр TUI является автономным — настраивать нечего.

Вы можете увидеть переменную окружения VIBEOS_TUI_GATEWAY_URL, указанную в базе кода или журналах. Это деталь внутренней проводки веб-панели, а не ручка дистанционного подключения, обращенная к пользователю. Когда вы открываете вкладку «Чат» на панели мониторинга (vibeos dashboard → /chat), веб-сервер панели мониторинга порождает встроенный дочерний процесс TUI и внедряет VIBEOS_TUI_GATEWAY_URL, чтобы дочерний элемент прикреплялся к собственному внутрипроцессу tui_gateway панели управления через петлевой веб-сокет (/api/ws). Конечная точка /api/ws существует только внутри сервера информационной панели (vibeos_cli/web_server.py) и привязана к времени жизни и авторизации этого процесса.

Не существует общего режима «направьте любой TUI на любой порт автономного шлюза». В частности, OpenAI-совместимый сервер API (vibeos gateway / платформа api_server) не обслуживает /api/ws — это поверхность бэкенда модели (/v1/chat/completions, /v1/models, …) и намеренно не раскрывает канал управления JSON-RPC TUI. Установка VIBEOS_TUI_GATEWAY_URL на этот порт приведет к ошибке 404.

Если вы хотите, чтобы несколько поверхностей использовали один набор сеансов, используйте общий ~/.vibeos/state.db (см. Сессии) или встроенный чат веб-панели (см. Веб-панель) — а не заданный вручную URL-адрес шлюза.

Возврат к классическому интерфейсу командной строки​

Запуск vibeos (без --tui) по умолчанию остается в классическом интерфейсе командной строки. Чтобы машина предпочитала TUI, установите display.interface: tui в ~/.vibeos/config.yaml (постоянно) или VIBEOS_TUI=1 в профиле вашей оболочки (для каждой оболочки). Чтобы вернуться назад, установите interface: cli / снимите переменную env var или передайте vibeos --cli для одноразового использования.

Если TUI не запускается (нет узла, отсутствует пакет, проблема с TTY), VibeOS распечатывает диагностическое сообщение и откатывается — вместо того, чтобы оставить вас в тупике.

См. также​