Docs/Web Dashboard

Web Dashboard

Веб-панель управления Hermes Agent -- браузерный интерфейс для администрирования установки Hermes. Вместо редактирования YAML-файлов или выполнения CLI-команд можно настраивать параметры, управлять API-ключами и отслеживать сессии через удобный веб-интерфейс.

Панель запускается полностью на локальной машине -- никакие данные не покидают localhost.


1. Быстрый старт

terminal
Copy
hermes dashboard

Запускает локальный веб-сервер и открывает http://127.0.0.1:9119 в браузере.

Параметры запуска

ФлагПо умолчаниюОписание
--port9119Порт веб-сервера
--host127.0.0.1Адрес привязки
--no-open--Не открывать браузер автоматически
--insecureoffРазрешить привязку к не-localhost адресам (ОПАСНО -- открывает API-ключи по сети; требует файрвол и сильную аутентификацию)
--isolatedoffЗапуск выделенного сервера для конкретного профиля

Примеры:

bash
# Кастомный порт hermes dashboard --port 8080 # Привязка ко всем интерфейсам (осторожно в общих сетях) hermes dashboard --host 0.0.0.0 # Запуск без автоматического открытия браузера hermes dashboard --no-open

2. Предварительные требования

Стандартная установка hermes-agent не включает HTTP-стек и PTY-хелпер -- это опциональные компоненты. Веб-панель требует FastAPI и Uvicorn (web extra). Вкладка Chat также требует ptyprocess для встроенного TUI через псевдо-терминал (pty extra).

Установка:

bash
cd ~/.hermes/hermes-agent && uv pip install -e ".[web,pty]"

Для полной установки с поддержкой мессенджинга/голоса и прочего:

bash
cd ~/.hermes/hermes-agent && uv pip install -e ".[all]"

Если зависимости не установлены, при запуске hermes dashboard будет выведена инструкция по установке. Если фронтенд еще не собран и npm доступен, он автоматически собирается при первом запуске.

Требования для вкладки Chat:

  • Node.js
  • ptyprocess (из extras pty)
  • POSIX-ядро (Linux, macOS или WSL2). На нативном Windows Python вкладка Chat не работает -- нужно использовать WSL2.

3. Управление несколькими профилями

Панель управления является машинным интерфейсом: один сервер управляет всеми профилями на машине. Переключатель профилей в боковой панели (видимый при наличии более одного профиля) определяет, какой профиль управляется на страницах Config, API Keys, Skills, MCP, Models и Chat.

При выборе профиля, отличного от собственного профиля панели, отображается амберный баннер с именем управляемого профиля, чтобы запись всегда была однозначной.

Выбор сохраняется в URL (?profile=<name>), поэтому прямые ссылки вида http://127.0.0.1:9119/skills?profile=worker работают с предустановленным переключателем и сохраняются при обновлении страницы.

Запуск панели из профильного алиаса маршрутизирует к машинной панели:

bash
worker dashboard # -> уже запущена: открывает браузер с ?profile=worker # -> не запущена: стартует машинную панель с предустановкой "worker"

Флаг --isolated запускает выделенный сервер, привязанный к конкретному профилю.

Вкладка Chat также следует переключателю:Scoped chat запускает PTY-процесс с HERMES_HOME выбранного профиля, поэтому диалог работает с моделью, скиллами, памятью и историей сессий этого профиля.

Что остается привязанным к профилю и не управляется переключателем: процессы шлюза (gateway), базы данных сессий, планировщики cron.


4. Страницы панели управления

4.1. Status (Статус)

Главный экран с обзором установки в реальном времени:

  • Версия агента и дата релиза
  • Статус шлюза -- запущен/остановлен, PID, подключенные платформы и их состояние
  • Активные сессии -- количество сессий, активных за последние 5 минут
  • Последние сессии -- список 20 последних сессий с моделью, количеством сообщений, использованием токенов и превью разговора

Автоматическое обновление каждые 5 секунд.

4.2. Chat (Чат)

Вкладка встраивает полный TUI Hermes (тот же интерфейс, что и hermes --tui) прямо в браузере. Все возможности терминального TUI -- слеш-команды, выбор модели, карточки вызовов инструментов, markdown-стриминг, запросы утверждений, темы скинов -- работают идентично.

Как это работает:

  • /api/pty открывает WebSocket с токеном аутентификации панели
  • Сервер запускает hermes --tui за POSIX-терминалом
  • Нажатия клавиш идут в PTY; ANSI-вывод транслируется в браузер
  • xterm.js с WebGL-рендерером отрисовывает каждый символ в пиксельную сетку

Возобновление сессии: на вкладке Sessions нажмите иконку воспроизведения (▶) рядом с сессией -- откроется /chat?resume=<id> с полной историей.

Переключатель сессий (правая панель): список бесед в стиле ChatGPT позволяет менять сессии без покидания страницы. Панель содержит выбор модели сверху и список сессий снизу. Отображается заголовок (или превью сообщения), время последней активности, количество сообщений и канал. Нажатие на строку возобновляет сессию. Кнопка "New chat" начинает новую сессию.

Примеры:

bash
# Подключение к удаленному бэкенду из Hermes Desktop # Settings -> Gateway -> Remote gateway -> http://VM_IP:9119

4.3. Config (Конфигурация)

Формовый редактор для config.yaml. Все 150+ полей конфигурации автоматически обнаруживаются из DEFAULT_CONFIG и организованы по вкладкам:

  • model -- модель по умолчанию, провайдер, базовый URL, настройки рассуждений
  • terminal -- бэкенд (local/docker/ssh/modal), таймаут, предпочтения оболочки
  • display -- скин, прогресс инструментов, отображение восстановления, настройки спиннера
  • agent -- макс. итерации, таймаут шлюза, уровень сервиса
  • delegation -- лимиты подагентов, усилие рассуждений
  • memory -- выбор провайдера памяти, настройки инъекции контекста
  • approvals -- режим утверждения опасных команд (ask/yolo/deny)

Поля с известными допустимыми значениями отображаются как выпадающие списки. Булевы значения -- как переключатели. Остальное -- текстовые поля.

Действия:

  • Save -- записывает изменения в config.yaml
  • Reset to defaults -- сбрасывает все поля к значениям по умолчанию
  • Export -- скачивает текущую конфигурацию в JSON
  • Import -- загружает JSON-файл конфигурации

4.4. API Keys (Ключи API)

Управление файлом .env с API-ключами и учетными данными. Ключи сгруппированы по категориям:

  • LLM Providers -- OpenRouter, Anthropic, OpenAI, DeepSeek и др.
  • Tool API Keys -- Browserbase, Firecrawl, Tavily, ElevenLabs и др.
  • Messaging Platforms -- токены Telegram, Discord, Slack и др.
  • Agent Settings -- не-секретные переменные окружения

Каждый ключ отображает:

  • Установлен ли он (с замаскированным превью значения)
  • Описание назначения
  • Ссылку на страницу создания ключа провайдера
  • Поле ввода для установки или обновления
  • Кнопку удаления

Редко используемые ключи скрыты по умолчанию за переключателем.

4.5. Sessions (Сессии)

Просмотр и inspect всех сессий агента. Каждая строка показывает: заголовок сессии, иконку платформы (CLI, Telegram, Discord, Slack, cron), модель, количество сообщений, количество вызовов инструментов и время последней активности. Активные сессии отмечаются пульсирующим бейджем.

Функции:

  • Поиск -- полнотекстовый поиск по содержимому сообщений (FTS5). Результаты показывают выделенные фрагменты.
  • Статистика -- сводка: общее количество сессий, активные, архивированные, всего сообщений, разбивка по источникам.
  • Раскрытие -- клик по сессии загружает полную историю сообщений. Сообщения раскрашены по ролям (user, assistant, system, tool) и рендерятся как Markdown.
  • Tool calls -- сообщения ассистента с вызовами инструментов показывают сворачиваемые блоки с именем функции и JSON-аргументами.
  • Переименование -- установка или очистка заголовка сессии.
  • Экспорт -- скачивание сессии (метаданные + история) в JSON.
  • Prune -- удаление завершенных сессий старше N дней.
  • Удаление -- удаление сессии и ее истории.

4.6. Logs (Логи)

Просмотр файлов логов агента, шлюза и ошибок с фильтрацией и автообновлением:

  • File -- переключение между agent, errors и gateway
  • Level -- фильтр: ALL, DEBUG, INFO, WARNING, ERROR
  • Component -- фильтр по компоненту: gateway, agent, tools, cli, cron
  • Lines -- количество строк: 50, 100, 200, 500
  • Auto-refresh -- живой тейлинг с опросом каждые 5 секунд
  • Цветовая кодировка -- строки окрашены по severity

4.7. Analytics (Аналитика)

Аналитика использования и стоимости на основе истории сессий. Выберите период (7, 30 или 90 дней):

  • Сводные карточки -- общее количество токенов (вход/выход), процент кеш-попаданий, общая стоимость, количество сессий
  • Дневной график токенов -- стековая гистограмма входных и выходных токенов по дням
  • Дневная таблица -- дата, сессии, токены, кеш, стоимость
  • Разбивка по моделям -- таблица с количеством сессий, токенами и стоимостью для каждой модели

4.8. Cron (Планировщик)

Создание и управление запланированными задачами:

  • Создание -- имя (опционально), промпт, cron-выражение (например, 0 9 * * *), цель доставки (local, Telegram, Discord, Slack, email)
  • Список задач -- имя, промпт, расписание, состояние (enabled/paused/error), цель, время последнего и следующего запуска
  • Пауза / Возобновление -- переключение состояния
  • Редактирование -- модальное окно для изменения промпта, расписания, имени или цели
  • Запуск сейчас -- немедленное выполнение вне расписания
  • Удаление --permanentное удаление

4.9. Profiles (Профили)

Создание и управление профилями -- изолированными экземплярами Hermes со своей конфигурацией, скиллами и сессиями:

  • Карточки профилей -- модель/провайдер, количество скиллов, состояние шлюза, описание, бейджи (active, default, alias)
  • Создание -- имя + клонирование (опционально), описание, модель; полноценный Profile Builder на /profiles/new
  • Управление скиллами -- переход к странице Skills в контексте профиля
  • Установка по умолчанию -- переключение профиля по умолчанию для будущих CLI/gateway запусков
  • Редактирование -- модели, описания, SOUL
  • Переименование / Удаление -- только для именованных профилей

4.10. Skills (Скиллы)

Просмотр, поиск, включение/выключение установленных скиллов и наборов инструментов, установка новых из хаба:

  • Поиск -- фильтрация по имени, описанию или категории
  • Фильтр по категории -- MLOps, MCP, Red Teaming, AI и др.
  • Переключение -- включение/выключение отдельных скиллов. Изменения вступают в силу на следующей сессии.
  • Toolsets -- встроенные наборы инструментов (файловые операции, веб-браузинг и др.) со статусом и требованиями настройки
  • Browse hub -- поиск в хабе скиллов, установка по идентификатору, кнопка "Update all"

4.11. MCP

Управление серверами MCP без CLI. Тот же блок mcp_servers в config.yaml.

Настроенные серверы:

  • Добавление -- HTTP/SSE сервер (URL) или stdio сервер (команда + аргументы) с переменными окружения
  • Включение / Выключение -- переключатель без удаления
  • Тест -- подключение, список инструментов, отключение
  • Удаление -- удаление из конфигурации

Каталог: просмотр одобренных Nous MCP-серверов (каталог optional-mcps/), установка одним кликом. Серверы, требующие API-ключи, запрашивают их инлайн; значения записываются в .env.

4.12. Webhooks

Управление динамическими подписками на вебхуки:

  • Создание -- имя, описание, фильтр событий, цель доставки, промпт агента. После создания отображается URL маршрута и одноразовый HMAC-секрет.
  • Включение / Выключение -- переключатель. Отключенные маршруты остаются в файле, но шлюз отклоняет их входящие события (403). Изменения применяются к следующему событию без перезапуска.
  • Удаление -- удаление подписки

4.13. Pairing (Сопряжение)

Утверждение и отзыв пользователей мессенджеров без CLI:

  • Ожидающие запросы -- платформа, код, пользователь, возраст запроса, кнопка "Approve"
  • Утвержденные пользователи -- платформа и пользователь, кнопка "Revoke"
  • Очистка ожидающих -- удаление всех ожидающих кодов

4.14. Channels (Каналы)

Подключение Hermes к платформам мессенджеров из браузера -- полный паритет с hermes setup gateway. Список всех поддерживаемых каналов (Telegram, Discord, Slack, Matrix, Mattermost, WhatsApp, Signal, BlueBubbles/iMessage, Email, SMS/Twilio, DingTalk, Feishu/Lark, WeCom, WeChat, QQ Bot, Yuanbao и др.) со статусом подключения.

Функции:

  • Настройка -- форма с полями, специфичными для платформы (токен бота, URL сервера, allowlist и др.). Секреты маскируются. Ссылка "Setup guide" ведет к документации платформы.
  • Включение / Выключение -- переключатель. Учетные данные сохраняются на диске.
  • Тест -- проверка конфигурации, включения и статуса подключения шлюза.
  • Перезапуск шлюза -- учетные данные записываются в ~/.hermes/.env и config.yaml.

4.15. System (Система)

Сводная панель администрирования:

  • Host -- системная статистика в реальном времени: ОС/ядро, архитектура, hostname, Python и Hermes, CPU (количество + загрузка), память, диск, аптайм. Бейдж обновлений (up to date / N коммитов позади) и кнопка "Check for updates". При доступности обновления -- кнопка "Update now" с подтверждением.
  • Nous Portal -- статус входа, провайдер инференса, таблица маршрутизации Tool Gateway.
  • Skill curator -- статус фонового обслуживания скиллов (active/paused), пауза/возобновление, запуск сейчас.
  • Gateway -- запуск, остановка, перезапуск шлюза мессенджеров со статусом (running/stopped, PID, состояние).
  • Memory -- выбор внешнего провайдера памяти или сброс встроенных хранилищ MEMORY.md / USER.md.
  • Credential pool -- добавление и удаление ротируемых API-ключей (по провайдеру). Ключи маскируются в списке.
  • Operations -- doctor, аудит безопасности, бэкап/восстановление, обновление скиллов, размер системного промпта, support dump, миграция конфигурации.
  • Checkpoints -- просмотр размера shadow store /rollback и его очистка.
  • Shell hooks -- список настроенных хуков, создание (с предупреждением безопасности и согласием), удаление.

5. Аутентификация

При привязке панели к публичному или не-localhost адресу Hermes включает аутентификацию. Три встроенных провайдера:

Username/Password (без OAuth)

Простой способ защитить self-hosted панель. Нет внешнего провайдера идентичности. Используйте только в доверенных сетях или за VPN.

Конфигурация в config.yaml:

yaml
dashboard: basic_auth: username: admin password_hash: "scrypt$16384$8$1$...$..." secret: "<32+ случайных байт, base64 или hex>" session_ttl_seconds: 43200

Переменные окружения:

  • HERMES_DASHBOARD_BASIC_AUTH_USERNAME
  • HERMES_DASHBOARD_BASIC_AUTH_PASSWORD_HASH (предпочтительно) или HERMES_DASHBOARD_BASIC_AUTH_PASSWORD
  • HERMES_DASHBOARD_BASIC_AUTH_SECRET
  • HERMES_DASHBOARD_BASIC_AUTH_TTL_SECONDS

Пример из командной строки:

bash
# Генерация хеша пароля python -c "from plugins.dashboard_auth.basic import hash_password; print(hash_password('your-password'))" # Генерация секрета openssl rand -base64 32

OAuth (Nous Portal)

Для публичных развертываний и подключения Hermes Desktop к удаленному бэкенду. Каждый вход проверяется через Nous Portal.

Регистрация панели:

bash
hermes setup # если еще не вошли в Nous Portal hermes dashboard register # Записывает HERMES_DASHBOARD_OAUTH_CLIENT_ID в ~/.hermes/.env

Запуск с OAuth:

bash
hermes dashboard --host 0.0.0.0 --port 9119 --no-open

Проверка:

bash
curl -s http://<host>:9119/api/status | jq '.auth_required, .auth_providers' # true # ["nous"]

Self-hosted OIDC

Для использования собственного провайдера идентичности (Keycloak, Auth0, Okta, Google, GitHub через OIDC bridge и др.) без Nous Portal.

Когда включается аутентификация

УсловиеАутентификация
hermes dashboard (по умолчанию, 127.0.0.1)Выкл
hermes dashboard --host 0.0.0.0Вкл
--insecureПропуск (ОПАСНО)

Аутентификация включается если:

  1. Адрес привязки не 127.0.0.1, ::1, localhost или 0.0.0.0 И
  2. Флаг --insecure не установлен

6. REST API

Веб-панель предоставляет REST API для автоматизации. Все эндпоинты поддерживают опциональный параметр ?profile=<name> для скопирования операций к конкретному профилю.

Основные эндпоинты

МетодПутьОписание
GET/api/statusВерсия агента, статус шлюза, платформы, активные сессии
GET/api/sessions20 последних сессий с метаданными
GET/api/sessions/{id}Метаданные одной сессии
GET/api/sessions/{id}/messagesПолная история сообщений сессии
GET/api/sessions/search?q=...Полнотекстовый поиск по сообщениям (FTS5)
DELETE/api/sessions/{id}Удаление сессии
PATCH/api/sessions/{id}Переименование / архивирование
GET/api/sessions/{id}/exportЭкспорт сессии в JSON
POST/api/sessions/pruneУдаление сессий старше N дней
GET/api/sessions/statsСтатистика хранилища сессий

Конфигурация и окружение

МетодПутьОписание
GET/api/configТекущая конфигурация как JSON
GET/api/config/defaultsЗначения по умолчанию
GET/api/config/schemaСхема полей конфигурации
PUT/api/configСохранение конфигурации
GET/api/envВсе переменные окружения со статусом
PUT/api/envУстановка переменной окружения
DELETE/api/envУдаление переменной окружения

Скиллы и инструменты

МетодПутьОписание
GET/api/skillsВсе скиллы со статусом
PUT/api/skills/toggleВключение/выключение скилла
GET/api/tools/toolsetsВсе наборы инструментов

Логи и аналитика

МетодПутьОписание
GET/api/logs?file=...&lines=...&level=...Строки логов
GET/api/analytics/usage?days=30Аналитика использования и стоимости

Cron

МетодПутьОписание
GET/api/cron/jobsВсе задачи cron
POST/api/cron/jobsСоздание задачи
PUT/api/cron/jobs/{id}Редактирование задачи
POST/api/cron/jobs/{id}/pauseПауза
POST/api/cron/jobs/{id}/resumeВозобновление
POST/api/cron/jobs/{id}/triggerНемедленный запуск
DELETE/api/cron/jobs/{id}Удаление

MCP

МетодПутьОписание
GET/api/mcp/serversСписок серверов
POST/api/mcp/serversДобавление сервера
POST/api/mcp/servers/{name}/testТест подключения
PUT/api/mcp/servers/{name}/enabledВключение/выключение
DELETE/api/mcp/servers/{name}Удаление
GET/api/mcp/catalogКаталог Nous MCP
POST/api/mcp/catalog/installУстановка из каталога

Мессенджеры и вебхуки

МетодПутьОписание
GET/api/messaging/platformsВсе каналы со статусом
PUT/api/messaging/platforms/{id}Настройка канала
POST/api/messaging/platforms/{id}/testТест канала
GET/api/pairingОжидающие и утвержденные пользователи
POST/api/pairing/approveУтверждение кода
POST/api/pairing/revokeОтзыв пользователя
GET/api/webhooksСписок подписок
POST/api/webhooksСоздание подписки
DELETE/api/webhooks/{name}Удаление подписки
PUT/api/webhooks/{name}/enabledВключение/выключение

Система

МетодПутьОписание
GET/api/system/statsСистемная статистика
GET/api/credentials/poolПул API-ключей
POST/api/credentials/poolДобавление ключа
DELETE/api/credentials/pool/{provider}/{index}Удаление ключа
GET/api/memoryСтатус памяти
PUT/api/memory/providerВыбор провайдера
POST/api/memory/resetСброс памяти
POST/api/gateway/startЗапуск шлюза
POST/api/gateway/stopОстановка шлюза
POST/api/gateway/restartПерезапуск шлюза
POST/api/ops/doctorДиагностика
POST/api/ops/backupСоздание бэкапа
POST/api/ops/importВосстановление из бэкапа
GET/api/hermes/update/checkПроверка обновлений
GET/api/curatorСтатус куратора скиллов
GET/api/portalСтатус Nous Portal

Скилл хаб

МетодПутьОписание
GET/api/skills/hub/searchПоиск в хабе
POST/api/skills/hub/installУстановка
POST/api/skills/hub/uninstallУдаление
POST/api/skills/hub/updateОбновление

7. Подключение Hermes Desktop к удаленному бэкенду

Hermes Desktop обычно запускает собственный локальный бэкенд, но может подключиться к панели на удаленной машине через Settings -> Gateway -> Remote gateway.

Предварительное требование: hermes dashboard должен быть запущен на удаленном хосте.

Настройка удаленной панели

Задайте имя пользователя и пароль, затем запустите панель на доступном адресе. Пример конфигурации systemd:

ini
[Service] EnvironmentFile=%h/.hermes/.env ExecStart=/path/to/venv/bin/python -m hermes_cli.main dashboard \ --host 0.0.0.0 --port 9119 --no-open

Файл ~/.hermes/.env:

terminal
Copy
HERMES_DASHBOARD_BASIC_AUTH_USERNAME=admin HERMES_DASHBOARD_BASIC_AUTH_PASSWORD=choose-a-strong-password HERMES_DASHBOARD_BASIC_AUTH_SECRET=<32+ случайных байт; openssl rand -base64 32>

В Desktop введите Remote URL (например, http://VM_IP:9119) и Sign in с именем пользователя и паролем.

Проверка

bash
curl -s http://VM_IP:9119/api/status | jq '.auth_required, .auth_providers' # true # ["basic"]
  • auth_required: true и "basic" в списке провайдеров -- процесс "Sign in" будет работать.
  • auth_required: false -- привязка loopback или аутентификация не включена.
  • auth_required: true но нет "basic" -- переменные окружения не загружены.

8. Команда /reload

При изменении API-ключей через веб-панель или редактировании .env используйте /reload в активной CLI-сессии для применения изменений без перезапуска:

terminal
Copy
You -> /reload Reloaded .env (3 var(s) updated)

9. Безопасность

  • Панель читает и записывает файл .env с API-ключами и секретами.
  • По умолчанию привязывается к 127.0.0.1 -- доступна только с локальной машины.
  • Привязка к 0.0.0.0 делает учетные данные доступными по сети -- используйте файрвол и аутентификацию.
  • --insecure отключает аутентификацию полностью -- не используйте для удаленных подключений.
  • Провайдер username/password предназначен для доверенных сетей -- не для публичного интернета.
  • Для публичного интернета используйте OAuth (Nous Portal) или self-hosted OIDC.