Hermes Desktop — нативное приложение для macOS, Windows и Linux, построенное вокруг того же ядра Hermes Agent, что и терминальный CLI. Оно разделяет конфигурацию, API-ключи, сессии, навыки и память с CLI-версией. Это не урезанная копия и не отдельный продукт — тот же агент с теми же настройками, но в интерфейсе, спроектированном для одновременной работы с несколькими разговорами, файлами и проектами.

Если вы уже работали с Hermes в терминале, всё настроенное там автоматически доступно в десктопе. И наоборот: любая сессия, начатая в десктопе, открывается в CLI.

Что произошло

У Hermes три интерфейса, и все они обращаются к одному агенту:

  • Десктоп-приложение — нативное приложение с полноценным UI для чата, настройки и управления.
  • CLI и TUI — терминальные интерфейсы для работы из командной строки.
  • Веб-дашборд — панель администрирования в браузере с опциональной вкладкой чата.

Все три разделяют состояние. Можно начать сессию в одном интерфейсе и продолжить в другом.

Запуск десктоп-приложения выполняется одной командой:

hermes desktop

Команда использует текущую конфигурацию, ключи, сессии и навыки. Приложение построено по принципу chat-first: окно чата в центре, навигация — в левом сайдбаре. Дизайн рассчитан на одновременное управление несколькими разговорами агента, настройку провайдеров сообщений, создание артефактов и работу с несколькими проектами.

Контекст

Под капотом десктоп-приложение — это оболочка Electron с нативным React-интерфейсом. При первом запуске оно может установить рантайм Hermes Agent в HERMES_HOME (папка ~/.hermes на macOS/Linux или %LOCALAPPDATA%\hermes на Windows) — тот же layout, что использует CLI-инсталляция, поэтому два интерфейса взаимозаменяемы.

React-рендерер общается с headless-бэкендом, который приложение запускает самостоятельно — процесс hermes serve, предоставляющий tui_gateway JSON-RPC/WebSocket API. Десктоп не встраивает hermes —tui и не требует веб-дашборд: он самодостаточен и запускает свой собственный бэкенд.

Разрешение бэкенда работает по цепочке: сначала учитывается HERMES_DESKTOP_HERMES_ROOT, затем завершённая управляемая установка, затем hermes из PATH (если не указано —ignore-existing / HERMES_DESKTOP_IGNORE_EXISTING=1), и наконец переопределение HERMES_DESKTOP_HERMES для упаковщиков вроде Nix. Логика установки, разрешения бэкенда и самообновления живёт в главном процессе Electron.

Ключевые факты

Чат

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

Дополнительные возможности:

  • Перетаскивание файлов в область чата для прикрепления к следующему сообщению.
  • Правая панель предпросмотра — рендеринг веб-страниц, файлов и выводов инструментов рядом с чатом.
  • История композера и редактирование очереди — стрелки вверх/вниз в пустом композере вызывают предыдущие промпты, а сообщения в очереди можно редактировать до отправки.

Статус-бар

Полоса внизу чата показывает живое состояние сессии и даёт быстрый доступ к настройкам без открытия панели:

  • Переключатель YOLO для текущей сессии — включает/выключает обход подтверждений опасных команд. YOLO отключает промпты подтверждения, поэтому нужно понимать, что именно вы отключаете.

Выбор модели

Пикер модели находится в композере, слева от микрофона. Один клик — и можно переключить модель, reasoning effort и fast mode в одном выпадающем списке.

Пикер композера — это липкое UI-состояние, которое не меняет ваш дефолт. Оно запоминается локально на устройстве и сохраняется между новыми чатами и перезапусками. В активном чате смена модели применяется только к этому чату. Выбор никогда не записывается в дефолт профиля. Дефолт задаётся в Settings → Model — это «основная» модель профиля, от которой стартуют новые чаты, кроны, субагенты и вспомогательные задачи.

Для каждой модели десктоп запоминает свой уровень reasoning effort и режим fast mode и применяет их при каждом выборе этой модели. Эти пресеты — удобство десктопа, они не влияют на кроны и субагентов.

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

Файловый браузер

Просмотр и предпросмотр рабочей директории прямо в приложении — удобно следить за тем, как агент читает, пишет и редактирует файлы. Начальная директория проекта задаётся через hermes desktop —cwd или переменную окружения HERMES_DESKTOP_CWD.

Голос

Голосовой режим — разговор с Hermes и голосовые ответы. На macOS система один раз запросит доступ к микрофону.

Настройки и онбординг

Управление провайдерами, моделями, инструментами и учётными данными через UI вместо редактирования YAML. Панели настроек покрывают провайдеров и ключи, выбор модели, конфигурацию инструментов, MCP-серверы, шлюз и управление сессиями.

Панель провайдеров — отдельное место для управления inference-провайдерами с UX для входа и хранения учётных данных по каждому провайдеру. Каждый провайдер и модель из каталога hermes model доступны в меню — GUI показывает полный список, а не кураторскую подборку.

Онбординг первого запуска переработан на единой системе overlay-дизайна. Можно выбрать «Choose provider later» — пропустить настройку провайдера и сразу войти в приложение.

  • xAI Grok OAuth — Grok работает как OAuth-провайдер первого класса в лаунчере; вход через браузерный поток, как с другими OAuth-провайдерами.
  • Установка бэкендов инструментов из GUI — шаги post-setup запускаются прямо в приложении.
  • Предупреждение о вспомогательной модели — если переключить основную модель на нового провайдера, пока вспомогательные задачи (титрование, суммаризация) привязаны к другому провайдеру, приложение предупредит, чтобы вы не разделили работу по двум провайдерам случайно.

Панели управления

Десктоп также предоставляет поверхность управления Hermes, чтобы не переходить в терминал:

  • Skills — просмотр, установка и управление навыками.
  • Cron — просмотр и управление запланированными задачами.
  • Profiles — переключение между профилями Hermes (изолированные конфиги, навыки, сессии).
  • Messaging — настройка каналов шлюза.
  • Agents и Command Center — поверхности оркестрации для multi-agent работы.

Клавиатура и навигация

  • Command palette — Cmd+K (Ctrl+K на Windows/Linux) для перехода к действиям и навигации с клавиатуры.
  • Переназначаемые шорткаты — панель в Settings позволяет переназначить горячие клавиши.
  • Кастомный зум — изменение масштаба интерфейса в полушагах.
  • Переключатель языка интерфейса — смена языка в приложении, включая упрощённый китайский (zh-Hans).

Сессии и профили

  • Переработанный список сессий с архивированием и управлением гигиеной списка по мере роста.
  • Поиск сессий по id — прямой поиск конкретной сессии.
  • Параллельные мультипрофильные сессии — запуск сессий в нескольких профилях одновременно с перекрёстными ссылками @session.

Обновление

Приложение проверяет обновления в фоне и предлагает one-click обновление. Ручное обновление также работает через GUI.

Удаление

Settings → About → Danger zone предлагает три уровня удаления:

  • Удалить только Chat GUI — убирает десктоп-приложение и его данные; агент, конфигурация и чаты остаются. Эквивалент hermes uninstall —gui.
  • Удалить GUI и агента, сохранить данные — убирает приложение и агента, но сохраняет конфиги, чаты и секреты для будущей переустановки. Эквивалент hermes uninstall.
  • Удалить всё — убирает приложение, агента и все пользовательские данные. Эквивалент hermes uninstall —full.

Приложение закрывается для завершения удаления — очистка запускается после выхода, чтобы можно было удалить работающий бандл и собственный venv. Опции удаления агента скрыты, когда локальный агент не установлен (например, GUI-only клиент подключён к удалённому бэкенду).

Примечание: запуск hermes uninstall —gui из checkout исходников (dev-сборка hermes desktop) также удаляет workspace node_modules и build-вывод apps/desktop/{dist,release}, поскольку это GUI-артефакты сборки. Они восстанавливаются через hermes desktop (или npm install + пересборку) — но если вы активно дорабатываете десктоп-приложение, ожидайте переустановку зависимостей после.

CLI: hermes desktop

Команда hermes desktop по умолчанию устанавливает Node-зависимости, собирает распакованное Electron-приложение для текущей ОС и запускает его.

ФлагОписание
—skip-buildПропустить npm install/сборку и запустить существующее приложение из apps/desktop/release
—force-buildПринудительная полная пересборка, даже если stamp контента совпадает
—build-onlyСобрать приложение, но не запускать (используется hermes update)
—sourceЗапуск через electron . из apps/desktop/dist вместо упакованного приложения
—cwd PATHНачальная директория проекта для чат-сессий (устанавливает HERMES_DESKTOP_CWD)
—hermes-root PATHПереопределить корень исходников Hermes (устанавливает HERMES_DESKTOP_HERMES_ROOT)
—ignore-existingИгнорировать существующий hermes CLI на PATH при разрешении бэкенда
—fake-bootДетерминированные задержки запуска для валидации startup UI

Подключение к удалённому бэкенду

По умолчанию приложение запускает свой локальный бэкенд. Но можно подключить его к Hermes-бэкенду на другой машине — VPS, домашнем сервере или Mac mini за Tailscale.

Удалённый бэкенд — это запущенный процесс hermes serve на удалённой машине. Десктоп-приложение не запускает его; вы (или systemd) держите hermes serve запущенным на удалённом хосте, а приложение подключается к нему.

Подключение состоит из двух половин: на бэкенде вы защищаете его auth-провайдером, а в приложении вводите URL бэкенда и авторизуетесь. Привязка бэкенда к не-loopback адресу автоматически включает auth-gate.

Два варианта провайдера:

  • OAuth (Nous Portal) — предпочтителен для всего, что доступно за пределами вашего компьютера. Регистрация через hermes dashboard register, затем вход из приложения через «Sign in with Nous Research». Self-hosted OIDC работает так же, если у вас свой identity provider.
  • Username/password — только для локальной или доверенной сети. Простейший вариант, когда бэкенд в одной LAN или доступен через VPN (например, Tailscale). Не использовать для публичного интернета — для этого нужен OAuth.

Настройка через username/password на бэкенде:

# 1. Установить учётные данные для входа в дашборд
cat >> ~/.hermes/.env << 'EOF'
HERMES_DASHBOARD_BASIC_AUTH_USERNAME=admin
HERMES_DASHBOARD_BASIC_AUTH_PASSWORD=choose-a-strong-password
# Рекомендуется: стабильный signing-секрет, чтобы сессии переживали рестарт
HERMES_DASHBOARD_BASIC_AUTH_SECRET=$(openssl rand -base64 32)
EOF
chmod 600 ~/.hermes/.env

# 2. Запустить бэкенд на достижимом адресе
# Привязка к не-loopback адресу включает auth gate
hermes serve --host 0.0.0.0 --port 9119

Держите процесс hermes serve запущенным, пока нужен доступ из десктопа. Запускайте под systemd, tmux или другим процесс-менеджером, чтобы пережить выход и перезагрузки.

Отдельно убедитесь, что шлюз запущен на удалённом хосте, если используете messaging-каналы (Telegram, Discord, Slack) — hermes serve это то, к чему подключается десктоп, а gateway-сессии — отдельный процесс.

Бэкенд читает и пишет ваш .env (API-ключи, секреты) и может запускать команды агента. Настройка username/password показанная выше — только для доверенной сети. Никогда не выставляйте password-protected бэкенд напрямую в открытый интернет — поставьте за VPN. Tailscale — чистый вариант: привяжите к tailscale IP (—host ) и используйте http://:9119 как Remote URL, чтобы только ваш tailnet мог достичь его. Для доступа через публичный интернет используйте OAuth (Nous Portal).

Предпочитаете не хранить пароль в открытом виде? Установите HERMES_DASHBOARD_BASIC_AUTH_PASSWORD_HASH в scrypt-хэш вместо пароля. Вычисляется командой:

python -c "from plugins.dashboard_auth.basic import hash_password; print(hash_password('PW'))"

Полная поверхность конфигурации (ключи config.yaml, переменные окружения, rate limiter) — в документации Web Dashboard → Username/password provider.

Запуск бэкенда как systemd-сервиса? Укажите в unit-файле EnvironmentFile=%h/.hermes/.env, чтобы учётные данные были в окружении при загрузке.

В приложении: Settings → Gateway → Remote gateway:

  • Remote URL — адрес бэкенда, например http://:9119.
  • Sign in — приложение определяет провайдера бэкенда и адаптирует кнопку. Для username/password — форма ввода учётных данных. Для OAuth — кнопка «Sign in with », запускающая браузерный sign-in.
  • Save and reconnect — переключает десктоп на удалённый бэкенд. Сессия обновляется автоматически; при установленном HERMES_DASHBOARD_BASIC_AUTH_SECRET вы остаётесь авторизованным после рестартов.

URL бэкенда также можно задать через переменную окружения HERMES_DESKTOP_REMOTE_URL перед запуском приложения — она переопределяет настройку в UI.

Хост удалённого шлюза настраивается per-profile — каждый профиль может указывать на свой удалённый бэкенд или оставаться на локальном. Переключение профиля меняет удалённый хост.

Решение проблем с удалённым подключением

  • Sign-in fails с 401 / «Invalid credentials» — имя пользователя или пароль не совпадают с HERMES_DASHBOARD_BASIC_AUTH_USERNAME / HERMES_DASHBOARD_BASIC_AUTH_PASSWORD бэкенда. Бэкенд возвращает одинаковую ошибку для неизвестного пользователя и неверного пароля (без oracle перечисления), поэтому перепроверьте оба. Подтвердите, что gate включён: curl -s http://:9119/api/status | jq ‘.auth_required, .auth_providers’ — должно вернуть true и включать “basic”.
  • Нет кнопки «Sign in» — просит session token — username/password провайдер бэкенда не активен. /api/status не покажет “basic” в auth_providers. Убедитесь, что и username, и password (или hash) установлены в ~/.hermes/.env и что процесс дашборда их загрузил.
  • Вылогинивает на каждом рестарте — установите HERMES_DASHBOARD_BASIC_AUTH_SECRET в стабильное значение. Без него token-signing key регенерируется при каждой загрузке, инвалидируя все сессии.
  • Connection refused / timeout — бэкенд привязан к 127.0.0.1 (дефолт) или firewall/VPN блокирует порт. Привяжите к 0.0.0.0 или tailscale IP и откройте порт для вашей доверенной сети.

Решение проблем

Логи запуска находятся в HERMES_HOME/logs/desktop.log — они включают вывод бэкенда и недавние Python tracebacks. Читать через CLI:

hermes logs gui -f

Общие сбросы:

# Принудительная чистая настройка первого запуска (macOS/Linux)
rm "$HOME/.hermes/hermes-agent/.hermes-bootstrap-complete"

# Пересборка сломанного Python venv (macOS/Linux)
rm -rf "$HOME/.hermes/hermes-agent/venv"

# Сброс зависшего промпта микрофона на macOS
tccutil reset Microphone com.nousresearch.hermes

Если «Build desktop app» зависает на скачивании Electron — рантайм Electron (~114 MB) загружается с github.com/electron/electron/releases. Если инсталлятор висит на шаге Build desktop app с сообщением retrying attempt=…, значит GitHub заблокирован или throttled. Инсталлятор самолечится: при неудаче очищает кэш и ретраит, при повторной неудаче пробует зеркало npmmirror.com. Чтобы задать своё зеркало:

ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ \
  bash -c 'cd "$HOME/.hermes/hermes-agent/apps/desktop" && CSC_IDENTITY_AUTO_DISCOVERY=false npm run pack'

Сборка из исходников

Для разработки — установить зависимости из корня репозитория, затем запустить dev-сервер из apps/desktop:

npm install        # из корня репозитория
cd apps/desktop
npm run dev        # Vite renderer + Electron, запускает Python бэкенд

Сборка инсталлеров:

npm run dist:mac    # DMG + zip
npm run dist:win    # NSIS + MSI
npm run dist:linux  # AppImage + deb + rpm
npm run pack        # распакованное приложение в release/

Подписание и нотаризация на macOS/Windows запускаются автоматически, если в окружении есть соответствующие учётные данные (CSC_LINK, CSC_KEY_PASSWORD, APPLE_* для macOS, WIN_CSC_* для Windows).

Как это влияет на практику

Десктоп-приложение решает несколько реальных болей для тех, кто работает с Hermes Agent регулярно. Во-первых, управление несколькими одновременными разговорами агента — в терминале это требует нескольких окон или tmux, в десктопе это встроенная возможность. Во-вторых, настройка провайдеров, ключей и инструментов через UI вместо YAML — порог входа ниже для тех, кто не хочет редактировать конфиги вручную.

Удалённый бэкенд — наиболее интересная возможность для команд и индивидуальных разработчиков. Запустите hermes serve на VPS или домашнем сервере, подключите десктоп с любого устройства — и работайте с агентом, который всегда на связи, с теми же ключами и сессиями. При этом messaging-шлюз (Telegram, Discord) работает как отдельный процесс на том же хосте.

Переключение моделей mid-chat — удобная, но потенциально дорогая функция. Каждый switch сбрасывает промпт-кэш провайдера, и следующее сообщение перечитывает весь разговор. На длинных чатах это может стоить больше, чем открытие нового чата на новой модели.

Что смотреть дальше

  • Развитие management-поверхностей: Agents и Command Center для multi-agent оркестрации — пока что эти панели обозначены, но их функциональность будет расширяться.
  • Поддержка дополнительных OAuth-провайдеров помимо Nous Portal — текущая архитектура позволяет подключать self-hosted OIDC.
  • Расширение языков интерфейса — пока добавлен упрощённый китайский, ожидается появление других локализаций.
  • Эволюция удалённого бэкенда и auth-gate — возможны новые провайдеры аутентификации и упрощение настройки для доверенных сетей.

Ссылки

Ссылки