Веб-панель
Веб-панель представляет собой пользовательский интерфейс на основе браузера для управления установкой агента Hermes. Вместо редактирования файлов YAML или запуска команд CLI вы можете настраивать параметры, управлять ключами API и отслеживать сеансы из чистого веб-интерфейса.
Быстрый старт
hermes dashboard
При этом запускается локальный веб-сервер и в вашем браузере открывается http://127.0.0.1:9119. Панель управления полностью работает на вашем компьютере — никакие данные не покидают локальный хост.
Опции
| Флаг | По умолчанию | Описание |
|---|---|---|
--порт |
9119 |
Порт для запуска веб-сервера |
--хост |
127.0.0.1 |
Привязать адрес |
--no-open |
— | Не открывать браузер автоматически |
--небезопасно |
выключен | Разрешить привязку к хостам, не являющимся локальными (ОПАСНО — ключи API доступны в сети; сопряжение с брандмауэром и строгой аутентификацией) |
--туй |
выключен | Откройте вкладку «Чат» в браузере (встроенная hermes --tui через PTY/WebSocket). Альтернативно установите HERMES_DASHBOARD_TUI=1. |
# Custom port
hermes dashboard --port 8080
# Bind to all interfaces (use with caution on shared networks)
hermes dashboard --host 0.0.0.0
# Start without opening browser
hermes dashboard --no-open
Предварительные условия
При установке hermes-agent по умолчанию не поставляется стек HTTP или помощник PTY — это необязательные дополнения. Для веб-панели требуются FastAPI и Uvicorn (дополнительно веб-интерфейс). Вкладка Чат также требует ptyprocess для создания встроенного TUI за псевдотерминалом (дополнительный pty в POSIX). Установите оба с помощью:
pip install 'hermes-agent[web,pty]'
The web extra pulls in FastAPI/Uvicorn; pty pulls in ptyprocess (POSIX) or pywinpty (native Windows — note that the embedded TUI itself still requires WSL). pip install hermes-agent[all] includes both extras and is the easiest path if you also want messaging/voice/etc.
When you run hermes dashboard without the dependencies, it will tell you what to install. If the frontend hasn't been built yet and npm is available, it builds automatically on first launch.
Pages
Status
The landing page shows a live overview of your installation:
- Agent version and release date
- Gateway status — running/stopped, PID, connected platforms and their state
- Active sessions — count of sessions active in the last 5 minutes
- Recent sessions — list of the 20 most recent sessions with model, message count, token usage, and a preview of the conversation
The status page auto-refreshes every 5 seconds.
Chat
The Chat tab embeds the full Hermes TUI (the same interface you get from hermes --tui) directly in the browser. Everything you can do in the terminal TUI — slash commands, model picker, tool-call cards, markdown streaming, clarify/sudo/approval prompts, skin theming — works identically here, because the dashboard is running the real TUI binary and rendering its ANSI output through xterm.js with its WebGL renderer for pixel-perfect cell layout.
How it works:
/api/ptyopens a WebSocket authenticated with the dashboard's session token- The server spawns
hermes --tuibehind a POSIX pseudo-terminal - Keystrokes travel to the PTY; ANSI output streams back to the browser
- xterm.js's WebGL renderer paints each cell to an integer-pixel grid; mouse tracking (SGR 1006), wide characters (Unicode 11), and box-drawing glyphs all render natively
- Resizing the browser window resizes the TUI via the
@xterm/addon-fitaddon
Resume an existing session: from the Sessions tab, click the play icon (▶) next to any session. That jumps to /chat?resume=<id> and launches the TUI with --resume, loading the full history.
Prerequisites:
- Node.js (same requirement as
hermes --tui; the TUI bundle is built on first launch) ptyprocess— installed by theptyextra (pip install 'hermes-agent[web,pty]', or[all]covers both)- POSIX kernel (Linux, macOS, or WSL2). The
/chatterminal pane specifically needs a POSIX PTY — native Windows Python has no equivalent, so on a native Windows install the rest of the dashboard (sessions, jobs, metrics, config editor) works but the/chattab will show a banner telling you to use WSL2 for that feature.
Close the browser tab and the PTY is reaped cleanly on the server. Re-opening spawns a fresh session.
Config
A form-based editor for config.yaml. All 150+ configuration fields are auto-discovered from DEFAULT_CONFIG and organized into tabbed categories:
- model — default model, provider, base URL, reasoning settings
- terminal — backend (local/docker/ssh/modal), timeout, shell preferences
- display — skin, tool progress, resume display, spinner settings
- agent — max iterations, gateway timeout, service tier
- delegation — subagent limits, reasoning effort
- memory — provider selection, context injection settings
- approvals — dangerous command approval mode (ask/yolo/deny)
- And more — every section of config.yaml has corresponding form fields
Fields with known valid values (terminal backend, skin, approval mode, etc.) render as dropdowns. Booleans render as toggles. Everything else is a text input.
Actions:
- Save — writes changes to
config.yamlimmediately - Reset to defaults — reverts all fields to their default values (doesn't save until you click Save)
- Export — downloads the current config as JSON
- Import — uploads a JSON config file to replace the current values
💡 Tip
Config changes take effect on the next agent session or gateway restart. The web dashboard edits the sameconfig.yamlfile thathermes config setand the gateway read from.
API Keys
Manage the .env file where API keys and credentials are stored. Keys are grouped by category:
- LLM Providers — OpenRouter, Anthropic, OpenAI, DeepSeek, etc.
- Tool API Keys — Browserbase, Firecrawl, Tavily, ElevenLabs, etc.
- Messaging Platforms — Telegram, Discord, Slack bot tokens, etc.
- Agent Settings — non-secret env vars like
API_SERVER_ENABLED
Each key shows: - Whether it's currently set (with a redacted preview of the value) - A description of what it's for - A link to the provider's signup/key page - An input field to set or update the value - A delete button to remove it
Advanced/rarely-used keys are hidden by default behind a toggle.
Sessions
Browse and inspect all agent sessions. Each row shows the session title, source platform icon (CLI, Telegram, Discord, Slack, cron), model name, message count, tool call count, and how long ago it was active. Live sessions are marked with a pulsing badge.
- Search — full-text search across all message content using FTS5. Results show highlighted snippets and auto-scroll to the first matching message when expanded.
- Expand — click a session to load its full message history. Messages are color-coded by role (user, assistant, system, tool) and rendered as Markdown with syntax highlighting.
- Tool calls — assistant messages with tool calls show collapsible blocks with the function name and JSON arguments.
- Delete — remove a session and its message history with the trash icon.
Logs
View agent, gateway, and error log files with filtering and live tailing.
- File — switch between
agent,errors, andgatewaylog files - Level — filter by log level: ALL, DEBUG, INFO, WARNING, or ERROR
- Component — filter by source component: all, gateway, agent, tools, cli, or cron
- Lines — choose how many lines to display (50, 100, 200, or 500)
- Auto-refresh — toggle live tailing that polls for new log lines every 5 seconds
- Color-coded — log lines are colored by severity (red for errors, yellow for warnings, dim for debug)
Analytics
Usage and cost analytics computed from session history. Select a time period (7, 30, or 90 days) to see:
- Summary cards — total tokens (input/output), cache hit percentage, total estimated or actual cost, and total session count with daily average
- Daily token chart — stacked bar chart showing input and output token usage per day, with hover tooltips showing breakdowns and cost
- Daily breakdown table — date, session count, input tokens, output tokens, cache hit rate, and cost for each day
- Per-model breakdown — table showing each model used, its session count, token usage, and estimated cost
Cron
Create and manage scheduled cron jobs that run agent prompts on a recurring schedule.
- Create — fill in a name (optional), prompt, cron expression (e.g.
0 9 * * *), and delivery target (local, Telegram, Discord, Slack, or email) - Job list — each job shows its name, prompt preview, schedule expression, state badge (enabled/paused/error), delivery target, last run time, and next run time
- Pause / Resume — toggle a job between active and paused states
- Trigger now — immediately execute a job outside its normal schedule
- Delete — permanently remove a cron job
Skills
Browse, search, and toggle skills and toolsets. Skills are loaded from ~/.hermes/skills/ and grouped by category.
- Search — filter skills and toolsets by name, description, or category
- Category filter — click category pills to narrow the list (e.g. MLOps, MCP, Red Teaming, AI)
- Toggle — enable or disable individual skills with a switch. Changes take effect on the next session.
- Toolsets — a separate section shows built-in toolsets (file operations, web browsing, etc.) with their active/inactive status, setup requirements, and list of included tools
⚠️ Warning
Security The web dashboard reads and writes your.envfile, which contains API keys and secrets. It binds to127.0.0.1by default — only accessible from your local machine. If you bind to0.0.0.0, anyone on your network can view and modify your credentials. The dashboard has no authentication of its own.
/reload Slash Command
The dashboard PR also adds a /reload slash command to the interactive CLI. After changing API keys via the web dashboard (or by editing .env directly), use /reload in an active CLI session to pick up the changes without restarting:
You → /reload
Reloaded.env (3 var(s) updated)
Это перечитает ~/.hermes/.env в среду запущенного процесса. Полезно, если вы добавили новый ключ провайдера через панель управления и хотите немедленно его использовать.
ОТДЫХ API
Веб-панель управления предоставляет REST API, который использует интерфейс. Вы также можете напрямую вызвать эти конечные точки для автоматизации:
ПОЛУЧИТЬ /api/статус
Возвращает версию агента, статус шлюза, состояния платформы и количество активных сеансов.
ПОЛУЧИТЬ /api/сессии
Возвращает 20 последних сеансов с метаданными (модель, количество токенов, временные метки, предварительный просмотр).
ПОЛУЧИТЬ /api/config
Возвращает текущее содержимое config.yaml в формате JSON.
ПОЛУЧИТЬ /api/config/defaults
Возвращает значения конфигурации по умолчанию.
GET /api/config/schema
Возвращает схему, описывающую каждое поле конфигурации — тип, описание, категорию и параметры выбора, где это применимо. Интерфейс использует это для отображения правильного виджета ввода для каждого поля.
ПОМЕЩЕНИЕ /api/config
Сохраняет новую конфигурацию. Тело: {"config": {...}}.
ПОЛУЧИТЬ /api/env
Возвращает все известные переменные среды с их статусом установки/снятия, отредактированными значениями, описаниями и категориями.
PUT /api/env
Устанавливает переменную среды. Тело: {"ключ": "VAR_NAME", "значение": "секрет"}.
УДАЛИТЬ /api/env
Удаляет переменную среды. Тело: {"ключ": "VAR_NAME"}.
GET /api/sessions/{session_id}
Возвращает метаданные для одного сеанса.
GET /api/sessions/{session_id}/messages
Возвращает полную историю сообщений для сеанса, включая вызовы инструментов и метки времени.
ПОЛУЧИТЬ /api/sessions/search
Полнотекстовый поиск по содержимому сообщения. Параметр запроса: q. Возвращает соответствующие идентификаторы сеансов с выделенными фрагментами.
УДАЛИТЬ /api/sessions/{session_id}
Удаляет сеанс и историю его сообщений.
ПОЛУЧИТЬ /api/logs
Возвращает строки журнала. Параметры запроса: файл (агент/ошибки/шлюз), линии (количество), уровень, компонент.
GET /api/analytics/usage
Возвращает использование токена, стоимость и аналитику сеансов. Параметр запроса: дни (по умолчанию 30). Ответ включает ежедневную разбивку и агрегаты по модели.
ПОЛУЧИТЬ /api/cron/jobs
Возвращает все настроенные задания cron с их состоянием, расписанием и историей выполнения.
POST /api/cron/jobs
Создает новое задание cron. Тело: {"prompt": "...", "schedule": "0 9 * * *", "name": "...", "deliver": "local"}.
POST /api/cron/jobs/{job_id}/pause
Приостанавливает работу cron.
POST /api/cron/jobs/{job_id}/resume
Возобновляет приостановленное задание cron.
POST /api/cron/jobs/{job_id}/trigger
Немедленно запускает задание cron вне расписания.
УДАЛИТЬ /api/cron/jobs/{job_id}
Удаляет задание cron.
ПОЛУЧИТЬ /api/skills
Возвращает все навыки с их именем, описанием, категорией и включенным статусом.
PUT /api/skills/toggle
Включает или отключает навык. Тело: {"name": "название навыка", "enabled": true}.
ПОЛУЧИТЬ /api/tools/toolsets
Возвращает все наборы инструментов с их меткой, описанием, списком инструментов и активным/настроенным статусом.
КОРС
Веб-сервер ограничивает CORS только источниками локального хоста:
http://localhost:9119/http://127.0.0.1:9119(производство)http://localhost:3000/http://127.0.0.1:3000http://localhost:5173/http://127.0.0.1:5173(сервер разработки Vite)
Если вы запускаете сервер на специальном порту, этот источник добавляется автоматически.
Развитие
Если вы вносите вклад в интерфейс веб-панели:
# Terminal 1: start the backend API
hermes dashboard --no-open
# Terminal 2: start the Vite dev server with HMR
cd web/
npm install
npm run dev
Сервер разработки Vite по адресу http://localhost:5173 передает запросы /api к серверной части FastAPI по адресу http://127.0.0.1:9119.
Интерфейс построен с использованием React 19, TypeScript, Tailwind CSS v4 и компонентов в стиле shadcn/ui. Производство формирует выходные данные в hermes_cli/web_dist/, который сервер FastAPI служит статическим SPA.
Автоматическая сборка при обновлении
Когда вы запускаете «hermes update», веб-интерфейс автоматически перестраивается, если доступен «npm». Это позволяет синхронизировать панель мониторинга с обновлениями кода. Если npm не установлен, обновление пропускает сборку внешнего интерфейса, а приборная панель Hermes соберет ее при первом запуске.
Темы и плагины
Панель мониторинга поставляется с шестью встроенными темами и может быть расширена за счет определяемых пользователем тем, вкладок плагинов и маршрутов внутреннего API — все это легко, клон репо не требуется.
Переключайте темы в реальном времени на панели заголовка — нажмите значок палитры рядом с переключателем языка. Выбор сохраняется в config.yaml в dashboard.theme и восстанавливается при загрузке страницы.
Встроенные темы:
| Тема | Персонаж |
|---|---|
Гермес Тил (по умолчанию) |
Темно-бирюзовый + кремовый, системные шрифты, удобный интервал |
Гермес Тил (Большой) (default-large) |
То же, что и по умолчанию, с размером текста 18 пикселей и более просторным интервалом |
| Полночь («полночь») | Глубокий сине-фиолетовый, Интер + JetBrains Mono |
Эмбер (уголь) |
Теплый малиновый + бронза, Spectral serif + IBM Plex Mono |
| Моно («моно») | Оттенки серого, IBM Plex, компактный |
| Киберпанк («киберпанк») | Неоново-зеленый на черном, Share Tech Mono |
| Rosé («роза») | Розовый + слоновая кость, Fraunces с засечками, просторный |
Чтобы создать свою собственную тему, добавьте вкладку плагина, внедрите ее в слоты оболочки или откройте конечные точки REST для конкретного плагина, см. Расширение панели мониторинга — полное руководство охватывает:
- Схема YAML темы — палитра, типографика, макет, ресурсы, компоненты, стили компонентов, colorOverrides, customCSS.
- Варианты компоновки — «стандартная», «кабина», «плитка».
- Манифест плагина, SDK, слоты оболочки, слоты на уровне страниц (внедрение виджетов во встроенные страницы без их переопределения), внутренние маршруты FastAPI.
- Полное комбинированное прохождение темы и плагина (демо-версия кабины Strike Freedom)
- Обнаружение, перезагрузка и устранение неполадок.