hermes-web-ui Documentation

Web dashboard for Hermes Agent — multi-platform AI chat, session management, scheduled jobs, usage analytics

9,944 stars TypeScript TypeScript 1 file · ~10,914 tokens #agent#ai-agent#chat-ui#dashboard#hermes#hermes-agent#hermes-web-ui#llm
RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy hermes-web-ui on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name hermes-web-ui -p 8651:8651 --restart always ${WEBUI_IMAGE:-hermes-web-ui-local:latest}
Configured Services & Ports
⚙️ hermes-webui
image: ${WEBUI_IMAGE:-hermes-web-ui-local:latest}
🔌 Ports: ${PORT:-6060}:${PORT:-6060}, ${PREVIEW_FRONTEND_PORT:-8651}:8651, ${XAI_OAUTH_PORT:-56121}:56121, ${STUDIO_P2P_UDP_PORT_RANGE:-50000-50127}:${STUDIO_P2P_UDP_PORT_RANGE:-50000-50127}/udp
docker-compose.yml
yaml (docker-compose.yml)
services:
  hermes-webui:
    build:
      context: .
      dockerfile: Dockerfile
    image: ${WEBUI_IMAGE:-hermes-web-ui-local:latest}
    container_name: ${WEBUI_CONTAINER_NAME:-hermes-webui}
    ports:
      - "${PORT:-6060}:${PORT:-6060}"
      - "${PREVIEW_FRONTEND_PORT:-8651}:8651"
      - "${XAI_OAUTH_PORT:-56121}:56121"
      - "${STUDIO_P2P_UDP_PORT_RANGE:-50000-50127}:${STUDIO_P2P_UDP_PORT_RANGE:-50000-50127}/udp"
    volumes:
      - ${HERMES_DATA_DIR:-./hermes_data}:/home/agent/.hermes
      - ${HERMES_DATA_DIR:-./hermes_data}/hermes-web-ui:/home/agent/.hermes-web-ui
    environment:
      - PORT=${PORT:-6060}
      - HERMES_HOME=/home/agent/.hermes
      - HERMES_BIN=/opt/hermes/.venv/bin/hermes
      - HERMES_WEB_UI_MANAGED_GATEWAY=1
      - HERMES_WEB_UI_AUTH_JWT_EXPIRES_IN=${HERMES_WEB_UI_AUTH_JWT_EXPIRES_IN:-30d}
      - HERMES_WEB_UI_XAI_CALLBACK_BIND_HOST=0.0.0.0
      - HERMES_PATCH_SCRIPT=${HERMES_PATCH_SCRIPT:-}
      - HERMES_LAN_ADVERTISE_URL=${HERMES_LAN_ADVERTISE_URL:-}
      - HERMES_APP_ENTITLEMENT_REQUIRED=${HERMES_APP_ENTITLEMENT_REQUIRED:-true}
      - HERMES_APP_ENTITLEMENT_PUBLIC_KEY=${HERMES_APP_ENTITLEMENT_PUBLIC_KEY:-}
      - STUDIO_P2P_UDP_PORT_RANGE=${STUDIO_P2P_UDP_PORT_RANGE:-50000-50127}
      - STUDIO_P2P_INTERFACE=${STUDIO_P2P_INTERFACE:-}
      - STUDIO_P2P_ADVERTISE_ADDRESSES=${STUDIO_P2P_ADVERTISE_ADDRESSES:-}
      - NPM_CONFIG_PREFIX=/home/agent/.hermes-web-ui/coding-agent/npm
      - PATH=/home/agent/.hermes-web-ui/coding-agent/npm/bin:/opt/hermes/.venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      - HERMES_ALLOW_ROOT_GATEWAY=1
    restart: unless-stopped
    stdin_open: true
    tty: true

File: README.md

Core Capabilities

Area What Hermes Studio does
Agent chat Runs Hermes Agent conversations with streaming responses, tool traces, generated-file previews, persistent local sessions, and standalone desktop chat windows.
Local control plane Manages profiles, providers, models, credentials, memory, skills, plugins, logs, and runtime settings from one dashboard.
Automation Builds executable visual workflows and configures platform channels, cron jobs, Kanban tasks, group-chat rooms, and MCP servers around the same Hermes profiles.
Workspace tools Provides a file browser, web terminal, Desktop Agent Browser, voice input/output, coding-agent runners, device discovery, Journey graph, and performance views.
Distribution Ships as a desktop app for Windows/macOS/Linux, an npm CLI package, and a Docker image.

Features

AI Chat

  • Real-time chat streaming over Socket.IO /chat-run; chat runs execute through the Hermes agent bridge
  • Multi-session management — create, rename, delete, switch between sessions
  • Self-built session database — local SQLite storage for Web UI sessions; Hermes state.db remains a read-only source for Hermes history APIs
  • Session grouping by source (Telegram, Discord, Slack, etc.) with collapsible accordion
  • Active session indicator — live sessions pin to top with spinner icon
  • Sessions sorted by latest message time
  • Markdown rendering with syntax highlighting and code copy
  • Tool call detail expansion (arguments / result)
  • Profile-scoped file uploads, clipboard image/file paste, and workspace attachments
  • File download support — download uploaded files and agent-generated files by resolved path across local, Docker, SSH, and Singularity backends
  • Inline previews for generated HTML, PDF, DOCX, PPTX, XLSX, CSV, images, Markdown, and source files
  • Session search — Ctrl+K search across the Web UI local session database; read-only Hermes history sessions are not included
  • Session categories, message references, compression progress, and durable background delegation results
  • Profile-aware model selector — discovers models available to the signed-in account through authorized Hermes profiles
  • Per-session model display badge and context token usage

Platform Channels

Unified configuration for 10 platforms in one page:

Platform Features
Telegram Bot token, mention control, reactions, free-response chats
Discord Bot token, mention, auto-thread, reactions, channel allow/ignore lists
Slack Bot token, mention control, bot message handling
WhatsApp Enable/disable, mention control, mention patterns
Matrix Access token, homeserver, auto-thread, DM mention threads
Feishu (Lark) App ID / Secret, mention control
DingTalk Client ID / Secret, mention control
QQBot App ID / Secret, mention control
WeChat QR code login (scan in browser, auto-save credentials)
WeCom Bot ID / Secret
  • Credential management writes to ~/.hermes/.env
  • Channel behavior settings write to ~/.hermes/config.yaml
  • Per-platform configured/unconfigured status detection

Usage Analytics

  • Total token usage breakdown (input / output)
  • Session count with daily average
  • Estimated cost tracking & cache hit rate
  • Model usage distribution chart
  • 30-day daily trend (bar chart + data table)

Scheduled Jobs

  • Create, edit, pause, resume, delete cron jobs
  • Trigger immediate execution
  • Cron expression quick presets

Kanban

  • Profile-aware Kanban board for planning and tracking agent work
  • Task creation, updates, and status movement from the dashboard
  • Shared with the same local Web UI state and authentication model

Visual Workflows

  • Vue Flow canvas for Hermes, Codex, and Claude Code nodes with file/image attachments
  • Directed edges, structured conditions, success/failure routes, loops, and approval gates
  • Import/export for portable workflow definitions and profile-aware workspaces
  • Run budgets, deadlines, stop/rerun controls, and persisted execution history
  • Frozen run snapshots, node conversations, edge decisions, and evidence playback on the canvas

Model Management

  • Auto-discover models from credential pool (~/.hermes/auth.json)
  • Fetch available models from each provider endpoint (/v1/models)
  • Add, update, and delete providers (preset and custom OpenAI-compatible)
  • OAuth/device flows for OpenAI Codex, Nous Portal, xAI, Claude, and GitHub Copilot
  • Provider URL auto-detection for non-v1 API versions (e.g. /v4)
  • Provider-level model grouping, visible-model controls, aliases, refresh, and default switching
  • Separate STT and TTS provider catalogs under Models

Multi-Profile

  • Create, rename, delete, and switch between Hermes profiles
  • Clone existing profile or import from archive (.tar.gz)
  • Export profile for backup or sharing
  • Profile-scoped configuration, cache, uploads, sessions, jobs, usage, memory, skills, plugins, providers, and model visibility
  • Account-bound profile access: super administrators can manage every profile; regular administrators only see and use profiles assigned to their account

File Browser

  • Browse files on remote backends (local, Docker, SSH, Singularity)
  • Upload, download, rename, copy, move, and delete files
  • Store uploaded files under the selected/requested Hermes profile while keeping downloads path-based for agent-generated artifacts outside the upload directory
  • Create directories
  • Preview and edit supported files with syntax highlighting, then attach workspace files back to a chat

Group Chat

  • Multi-agent chat rooms with real-time messaging via Socket.IO
  • @mention routing — mention an agent to trigger a contextual reply
  • Context compression — automatic conversation summarization when history exceeds token threshold
  • Typing status and reply progress indicators
  • Room creation, deletion, and invite code management
  • Agent management — add/remove agents from rooms with per-agent profiles
  • SQLite message persistence
  • Mobile responsive with collapsible sidebar

Coding Agents

  • Install, configure, launch, and monitor Claude Code and Codex from the dashboard
  • Built-in coding-agent terminal, session history, workspace selection, images, and file diffs
  • Dedicated proxy routes and API modes for provider/model compatibility
  • Standalone desktop chat windows and persisted output/reasoning metadata

Desktop Agent Browser

  • Desktop-only multi-tab browser that agents can navigate through the managed MCP server
  • Isolated browser profiles, per-tab control leases, proxy settings, downloads, cookies, and permissions
  • Accessibility snapshots, screenshots, console logs, and page annotations for agent-assisted browsing

Skills & Memory

  • Browse and search installed skills
  • View skill details and attached files
  • Install and manage Skill Bundles with profile-aware usage statistics
  • User notes, persistent Ekko Agent memory, and profile-scoped memory management
  • Interactive Journey graph for skill/memory relationships, category filtering, detail inspection, and playback

Theme Customization

  • Light/dark mode, interface style, base font size, text color, and active color
  • Per-account background images and live preview across the workspace

Logs

  • View agent / server / error logs
  • Filter by log level, log file, and keyword
  • Structured log parsing with HTTP access log highlighting

Admin & Runtime Management

  • Device and LAN peer views for local-network discovery and peer tooling
  • MCP manager for the managed hermes-studio server, profile injection, and api / browser / devices / use toolsets
  • Runtime version and version-preview tooling for testing newer builds in isolation
  • Performance monitor views for super administrators

Authentication

  • Token-based auth (auto-generated on first run or set via AUTH_TOKEN env var)
  • Username/password login with account management in Settings
  • Default bootstrap credentials are admin / 123456; users are prompted after login to change the default username and password
  • Super administrators can manage users and profile bindings; regular administrators can manage their own account details

CLI maintenance commands:

bash
# Delete persisted login IP lock records
hermes-web-ui clear-login-locks

# Delete login locks and restart the running Web UI process
hermes-web-ui clear-login-locks --restart

# Create or reset the default super administrator login to admin / 123456
hermes-web-ui reset-default-login

clear-login-locks removes ${HERMES_WEB_UI_HOME:-~/.hermes-web-ui}/.login-lock.json. If the server is running, restart it to clear in-memory lock state. reset-default-login updates the Web UI account database; if an admin user already exists, its password is reset to 123456 and the account is enabled as a super administrator.

Settings

  • Display (streaming, compact mode, reasoning, cost display)
  • Agent (max turns, timeout, tool enforcement)
  • Memory (enable/disable, char limits)
  • Session reset (idle timeout, scheduled reset)
  • Privacy (PII redaction)
  • Model settings (default model & provider)
  • Profile and provider configuration

Voice / TTS / STT

  • Manage voice providers under Models → STT and Models → TTS; existing Settings → Voice links redirect there.
  • TTS adapters: Edge, OpenAI-compatible, MiMo, Doubao, ElevenLabs, Gemini, xAI, Mistral, MiniMax, and DeepInfra.
  • STT adapters: Browser, OpenAI-compatible, Doubao, Groq, Mistral, xAI, ElevenLabs, and DeepInfra.
  • Use editable turn-based voice input from the chat mic, or open the full-screen real-time voice stage for a continuous voice-focused experience.
  • Provider keys and MiMo voice-clone audio stay server-side; the browser receives only masked secret status.
  • Starting a new voice turn stops current assistant playback first, but does not implicitly cancel an active agent run.
  • For supported settings, security notes, and current non-goals, see docs/voice-dialogue.md.
  • The real-time stage does not claim simultaneous full-duplex listen/speak; telephony and always-on wake-word listening remain out of scope.

Web Terminal

  • Integrated terminal powered by node-pty and @xterm/xterm
  • Multi-session support — create, switch between, and close terminal sessions
  • Real-time keyboard input and PTY output streaming via WebSocket
  • Window resize support

Desktop App & Updates

  • Native Electron shell for Windows, macOS, and Linux
  • Bundles the Web UI runtime and starts the local Hermes Studio server automatically
  • Uses Cloudflare download endpoints for desktop auto-update metadata and assets first
  • Falls back to GitHub Releases latest assets if the Cloudflare update feed is unavailable
  • Windows upgrades attempt to close an existing Hermes Studio process before replacing files

Quick Start

Download the latest Hermes Studio desktop installer from
GitHub Releases.

Desktop builds are published for macOS, Windows, and Linux, with separate
architecture assets where applicable. The desktop app bundles the Web UI
runtime and stores Hermes Agent data in the native Hermes location:

  • Windows: %LOCALAPPDATA%\hermes (falls back to %APPDATA%\hermes)
  • macOS/Linux: ~/.hermes

The desktop wrapper stores its own Web UI state separately in
~/.hermes-web-ui unless HERMES_WEB_UI_HOME is set.

After the packaged desktop app starts, it installs managed command shims so the
desktop app, bundled Hermes Agent CLI, and bundled Web UI CLI do not conflict:

Command Description
hermes-studio Open the Hermes Studio desktop app
hermes-studio cli ... Run the bundled Hermes Agent CLI
hermes-studio web ... Run the bundled hermes-web-ui command
hermes-studio -h Show wrapper help
hermes-studio-mcp [api|browser|devices|use] Run one managed Web UI MCP toolset

Use hermes-studio cli -h for Hermes Agent CLI help and
hermes-studio web -h for Web UI CLI help. hermes-studio-mcp defaults to the
api toolset; choose browser, devices, or use to keep the exposed MCP
surface focused on the current task.

Desktop auto-updates read the latest feed from
https://download.ekkolearnai.com/latest first. If that endpoint is
unavailable, the updater falls back to
https://github.com/EKKOLearnAI/hermes-studio/releases/latest/download.

npm

bash
npm install hermes-web-ui
hermes-web-ui start

Open http://localhost:8648

Docker Compose

Single-container deployment with integrated Hermes Agent:

bash
# Use pre-built image (Recommended)
WEBUI_IMAGE=ekkoye8888/hermes-web-ui docker compose up -d

# Or build from source
docker compose up -d --build

docker compose logs -f hermes-webui

Open http://localhost:6060

  • Persistent Hermes data is stored in ./hermes_data
  • Web UI auth token is stored in ./hermes_data/hermes-web-ui/.token
  • On first run with auth enabled, the token is printed to container logs
  • All runtime settings are environment-variable driven in docker-compose.yml

For detailed notes and troubleshooting, see docs/docker.md.

Hermes Agent Runtime Discovery

When Web UI starts backend chat features, it prefers a source checkout that
contains run_agent.py such as ~/.hermes/hermes-agent. If no source checkout
is found, it falls back to the Python environment used by the installed
hermes command, then the system Python. This supports both source installs
and package installs such as pip install hermes-agent.

Web UI Environment Variables

These variables configure Hermes Web UI, its local Hermes runtime integration, and development/preview helpers. Provider API keys and Hermes Agent settings are normally managed through Hermes profiles; environment variables here are process-level overrides.

Variable Default Description
PORT 8648 Web UI listen port.
BIND_HOST 0.0.0.0 Web UI bind host. Set :: explicitly for IPv6.
HERMES_LAN_ADVERTISE_URL unset Reachable Studio origin used in App LAN QR codes. Set this to the Docker host's LAN URL when Studio is opened through localhost, for example http://192.168.1.20:6060.
HERMES_APP_ENTITLEMENT_REQUIRED true Require a valid cloud-signed App entitlement before accepting a LAN App relay connection. Set false only for temporary compatibility diagnostics.
HERMES_APP_ENTITLEMENT_PUBLIC_KEY built in Optional PEM public-key override for RS256 App entitlements. The expected issuer is hermes-studio-server and audience is ekko-studio.
HERMES_WEB_UI_HOME ~/.hermes-web-ui Web UI data home for auth token, credentials, logs, DB, and default uploads. HERMES_WEBUI_STATE_DIR is also supported as a compatibility alias.
HERMES_WEBUI_STATE_DIR unset Compatibility alias for HERMES_WEB_UI_HOME.
HERMES_WEB_UI_DISABLE_MCP_AUTOINJECT unset Disable startup injection of the managed hermes-studio MCP server into Hermes profile configs.
HERMES_WEB_UI_ALLOW_TRANSIENT_MCP_AUTOINJECT unset Allow managed MCP injection when HERMES_WEB_UI_HOME is under a temporary directory, such as Version Preview runtimes.
UPLOAD_DIR $HERMES_WEB_UI_HOME/upload Upload root override. Files are stored below profile-scoped subdirectories.
CORS_ORIGINS same host only Comma- or space-separated cross-origin allowlist for HTTP, Socket.IO, and WebSocket requests. Set * only when you intentionally need legacy wildcard CORS.
AUTH_TOKEN auto-generated Explicit bearer token. If unset, Web UI creates one under HERMES_WEB_UI_HOME.
AUTH_JWT_SECRET AUTH_TOKEN JWT signing secret override for username/password sessions.
HERMES_WEB_UI_AUTH_JWT_EXPIRES_IN 30d Username/password session JWT lifetime. Accepts seconds or s/m/h/d suffixes, for example 12h or 7d.
PROFILE default Startup/default Hermes profile. Runtime requests use the profile selected by the frontend and authorized for the current account.
LOG_LEVEL info Server log level.
BRIDGE_LOG_LEVEL $LOG_LEVEL or info Bridge log level.
MAX_DOWNLOAD_SIZE 200MB Maximum file download size.
MAX_EDIT_SIZE 10MB Maximum editable file size.
WORKSPACE_BASE current user's home directory Base directory for workspace browsing.
HERMES_HOME platform default Hermes data home. Windows uses %LOCALAPPDATA%\hermes; macOS/Linux uses ~/.hermes.
HERMES_BIN hermes Custom Hermes CLI binary path.
HERMES_AGENT_ROOT auto-discovered Hermes Agent source checkout containing run_agent.py.
HERMES_AGENT_BRIDGE_PYTHON auto-discovered Python interpreter used to launch the agent bridge.
HERMES_AGENT_BRIDGE_UV auto-discovered uv executable used to launch the agent bridge when available.
UV auto-discovered Fallback uv executable path.
PYTHON auto-discovered Fallback Python executable for the agent bridge.
HERMES_AGENT_BRIDGE_ENDPOINT platform default Agent bridge broker endpoint. Windows defaults to tcp://127.0.0.1:18765; macOS/Linux defaults to ipc:///tmp/hermes-agent-bridge.sock.
HERMES_AGENT_BRIDGE_TIMEOUT_MS 120000 Timeout for Node requests to the bridge broker.
HERMES_AGENT_BRIDGE_CONNECT_RETRY_MS 5000 Short retry window for connecting to the bridge socket.
HERMES_AGENT_BRIDGE_STARTUP_TIMEOUT_MS 120000 Timeout while waiting for the Python bridge to become ready.
HERMES_AGENT_BRIDGE_STOP_ON_SHUTDOWN enabled Stop the bridge broker during Web UI shutdown and restart. Set 0, false, no, or off to keep the bridge across restarts.
HERMES_AGENT_BRIDGE_AUTO_RESTART enabled Auto-restart the bridge broker after unexpected exit. Set 0, false, no, or off to disable.
HERMES_AGENT_BRIDGE_RESTART_DELAY_MS 1000 Base delay for bridge auto-restart backoff.
HERMES_AGENT_BRIDGE_PLATFORM cli Platform identity passed to Hermes Agent.
HERMES_AGENT_BRIDGE_WORKER_TRANSPORT platform default Profile worker transport. Set tcp for loopback TCP or ipc/unix for Unix domain sockets; defaults to Windows TCP and macOS/Linux IPC.
HERMES_AGENT_BRIDGE_WORKER_PORT_BASE 18780 Base port for TCP worker endpoints.
HERMES_BRIDGE_PROVIDER profile/default Provider override for bridge runs.
HERMES_BRIDGE_TOOLSETS profile/default Toolset override for bridge runs.
HERMES_BRIDGE_MAX_TURNS profile/default Maximum turn override for bridge runs.
HERMES_BRIDGE_SUPPRESS_PLATFORM_HINT cli Controls bridge platform hint suppression passed to Hermes Agent.
HERMES_OPENROUTER_APP_REFERER https://hermes-studio.ai OpenRouter attribution referer sent by bridge runs.
HERMES_OPENROUTER_APP_TITLE Hermes Web UI OpenRouter attribution title sent by bridge runs.
HERMES_OPENROUTER_APP_CATEGORIES cli-agent,personal-agent OpenRouter attribution categories sent by bridge runs.
HERMES_WEB_UI_MANAGED_GATEWAY enabled Controls Web UI-managed Hermes gateway process handling. Set 0, false, no, or off to use hermes gateway start instead.
HERMES_WEB_UI_DISABLE_GATEWAY_AUTOSTART unset Skip startup gateway checks/autostart. Set 1, true, yes, or on for dashboard-only deployments where another service owns Hermes gateway lifecycle.
HERMES_WEB_UI_DISABLE_SKILL_INJECTION unset Skip startup bundled skill injection. Set 1, true, yes, or on when bundled skills are managed outside Hermes Web UI. When injection is enabled, Web UI updates only skills it previously installed or identical existing bundled copies; local edits and user-owned same-name skills are skipped.
HERMES_WEB_UI_STOP_GATEWAYS_ON_SHUTDOWN enabled in production Controls whether Web UI shutdown also stops managed gateway processes. Set 0 or false to detach them.
HERMES_GATEWAY_URL / GATEWAY_URL unset Explicit Hermes gateway upstream URL for proxy routes.
GATEWAY_HOST 127.0.0.1 Default Hermes gateway upstream host for proxy routes.
GATEWAY_PORT 8642 Default Hermes gateway upstream port for proxy routes.
HERMES_WEB_UI_PREVIEW_REPO package repository GitHub repository used by Version Preview.
HERMES_WEB_UI_PREVIEW_AGENT_BRIDGE_TRANSPORT platform default Version Preview broker transport. Set tcp to use loopback TCP for Preview on macOS/Linux; when unset, Preview follows HERMES_AGENT_BRIDGE_WORKER_TRANSPORT=tcp.
HERMES_WEB_UI_PREVIEW_AGENT_BRIDGE_ENDPOINT isolated preview endpoint Directly overrides the Version Preview broker endpoint.
HERMES_WEB_UI_BACKEND_PORT 8648 Backend port used by the Vite dev proxy.
HERMES_WEB_UI_FRONTEND_PORT 8649 Frontend Vite dev server port.

CLI Commands

Command Description
hermes-web-ui start [port] Start in background; accepts a positional port or --port
hermes-web-ui client [port] Start for a remote client with gateway autostart disabled and permissive CORS
hermes-web-ui restart [port] Restart; stops the bridge by default
hermes-web-ui stop Stop the background process
hermes-web-ui status Check if running
hermes-web-ui clear-login-locks [--restart] Clear persisted login locks, optionally restart
hermes-web-ui reset-default-login Create or reset the default administrator login
hermes-web-ui update / upgrade Update to the latest version and restart
hermes-web-ui version / -v Show the version
hermes-web-ui -h Show help

Add --no-open to start or client when no browser should open.

restart, update, and upgrade stop the Agent Bridge broker by default so restarted or updated servers do not reuse stale Python bridge processes. Set HERMES_AGENT_BRIDGE_STOP_ON_SHUTDOWN=0 before restarting only when you explicitly want to keep the bridge broker and running bridge sessions alive.

update / upgrade first attempt npm cache clean --force, then run npm install hermes-web-ui@latest and restart. Cache cleanup is best-effort; if it fails, the updater continues with the install.

Auto Configuration

On startup the BFF server automatically:

  • Initializes Web UI data directories, local databases, and bundled skills
  • Starts the Hermes agent bridge used by /chat-run
  • Opens a browser on successful startup unless --no-open is set

Development

bash
git clone https://github.com/EKKOLearnAI/hermes-studio.git
cd hermes-web-ui
npm install
npm run dev
bash
npm run build   # outputs to dist/

See DEVELOPMENT.md for project development guidelines.

Architecture

text
Browser → BFF (Koa, :8648) → Socket.IO /chat-run
                ↓
        Hermes agent bridge → Hermes Agent runtime
                ↓
           Hermes CLI / profiles
           profile config.yaml    (channel/provider behavior)
           profile auth.json      (credential pool)
           Tencent iLink API      (WeChat QR login)

The frontend is designed with multi-agent extensibility — all Hermes-specific code is namespaced under hermes/ directories (API, components, views, stores), making it straightforward to add new agent integrations alongside.

The BFF layer handles Socket.IO chat streaming, the Hermes agent bridge, profile-aware file upload and path-based download (multi-backend: local/Docker/SSH/Singularity), session CRUD, account- and profile-scoped management, config/credential management, WeChat QR login, model discovery, skills/memory/plugin management, TTS/STT, coding-agent proxies, MCP/runtime management, log reading, and static file serving.

Tech Stack

Frontend: Vue 3 + TypeScript + Vite + Naive UI + Pinia + Vue Router + vue-i18n + SCSS + markdown-it + highlight.js

Backend: Koa 2 (BFF server) + node-pty (web terminal)

License

BSL-1.1

The license covers Hermes Studio, the former Hermes Web UI name, the
hermes-web-ui npm package and CLI, desktop applications, firmware, release
artifacts, documentation, and associated files in this repository.


File: docs/docker.md

Docker Compose Guide

This repository ships an environment-variable driven Docker Compose setup.

Quick Start

bash
WEBUI_IMAGE=ekkoye8888/hermes-web-ui docker compose up -d
docker compose logs -f hermes-webui

Open: http://localhost:6060

Build from source

bash
docker compose up -d --build
docker compose logs -f hermes-webui

Services

This compose file runs a single service:

  • hermes-webui — Web UI dashboard with integrated Hermes Agent runtime (pre-built image or built from source)

The Web UI container is built on the nousresearch/hermes-agent base image and uses the Hermes CLI / agent bridge runtime for chat execution. By default it performs startup gateway checks/autostart for profiles, but no Hermes gateway ports are exposed by this compose setup.

Environment Variables

All key runtime settings are configured from compose variables.

Variable Default Description
PORT 6060 Web UI listen port
BIND_HOST 0.0.0.0 Optional Web UI bind host. Defaults to IPv4 for stable WSL/Windows access. Set :: explicitly if you want IPv6 listening.
CORS_ORIGINS same host only Comma- or space-separated cross-origin allowlist for HTTP, Socket.IO, and WebSocket requests. Set * only when you intentionally need legacy wildcard CORS.
HERMES_LAN_ADVERTISE_URL unset Reachable Docker host origin placed in App LAN QR codes when the browser origin is localhost. Example: http://192.168.1.20:6060.
HERMES_APP_ENTITLEMENT_REQUIRED true Require an RS256 cloud entitlement for App LAN relay connections.
HERMES_APP_ENTITLEMENT_PUBLIC_KEY built in Optional PEM public-key override for App entitlement verification.
HERMES_BIN /opt/hermes/.venv/bin/hermes Path to Hermes CLI binary
HERMES_AGENT_IMAGE nousresearch/hermes-agent:latest Hermes Agent base image (used only during build)
WEBUI_IMAGE hermes-web-ui-local:latest Web UI image (set to ekkoye8888/hermes-web-ui to use pre-built)
HERMES_DATA_DIR ./hermes_data Hermes runtime data directory

Override variables directly from shell:

bash
PORT=16060 docker compose up -d

Or create a .env file in the project root:

text
WEBUI_IMAGE=ekkoye8888/hermes-web-ui
PORT=6060

Data Persistence

Path Description
${HERMES_DATA_DIR} (./hermes_data) Hermes runtime data (sessions, config, profiles)
${HERMES_DATA_DIR}/hermes-web-ui Web UI data (auth token, etc.)
  • Hermes data persists in ./hermes_data, mapped to /home/agent/.hermes in the container.
  • Web UI data persists in ./hermes_data/hermes-web-ui/, mapped to /home/agent/.hermes-web-ui in the container.
  • The auth token is auto-generated on first run and printed to container logs.
  • Deleting the token file and restarting will generate a new one.

Port Mapping

Port Description
${PORT} (6060) Web UI dashboard

No Hermes gateway ports are exposed by this compose setup.

Code Runtime Behavior

  • Hermes CLI binary comes from HERMES_BIN env (packages/server/src/services/hermes-cli.ts).
  • If HERMES_BIN is not provided, code falls back to hermes in PATH.
  • Profile-specific chat runs are handled through the Hermes agent bridge. The selected/requested profile is authorized per account and passed with runtime requests; switching the frontend Hermes Profile does not restart the bridge or clear other running tasks.
  • Docker is a managed gateway runtime: Web UI checks profile gateways on startup, but it does not run a periodic gateway recovery loop.

Common Operations

Recreate:

bash
docker compose up -d --force-recreate

View auth token:

bash
docker compose logs hermes-webui | grep token
# or
cat ./hermes_data/hermes-web-ui/.token

Stop:

bash
docker compose down

File: README_zh.md

核心能力

模块 Hermes Studio 能做什么
Agent 聊天 运行 Hermes Agent 对话,支持流式回复、工具调用轨迹、生成文件预览、本地持久化会话和桌面独立聊天窗口。
本地控制台 在一个仪表盘中管理 Profile、Provider、模型、凭证、记忆、技能、插件、日志和运行时设置。
自动化 构建可执行的可视化工作流,并围绕同一套 Hermes Profile 配置平台渠道、Cron 任务、Kanban 任务、群聊房间和 MCP Server。
工作区工具 提供文件浏览器、Web 终端、桌面 Agent 浏览器、语音输入输出、Coding Agent、设备发现、学习轨迹和性能视图。
分发形态 支持 Windows/macOS/Linux 桌面应用、npm CLI 包和 Docker 镜像。

功能特性

AI 聊天

  • 聊天前端通过 Socket.IO /chat-run 实时流式更新;聊天运行通过 Hermes agent bridge 执行
  • 多会话管理 — 创建、重命名、删除、切换会话
  • 自建会话数据库 — Web UI 会话使用本地 SQLite;Hermes state.db 仅作为只读来源用于 Hermes 历史 API
  • 按来源分组会话(Telegram、Discord、Slack 等),可折叠手风琴面板
  • 活跃会话实时指示器 — 正在进行的会话置顶并显示旋转图标
  • 按最新消息时间排序会话列表
  • Markdown 渲染,支持语法高亮和代码复制
  • 工具调用详情展开(参数 / 结果)
  • 按 Profile 隔离的文件上传、剪贴板图片/文件粘贴和工作区附件
  • 文件下载支持 — 按解析后的路径下载用户上传文件和 Agent 生成文件,兼容 local、Docker、SSH、Singularity 等多种 terminal backend
  • 可直接预览 Agent 生成的 HTML、PDF、DOCX、PPTX、XLSX、CSV、图片、Markdown 和源码文件
  • 会话搜索 — Ctrl+K 搜索 Web UI 本地会话库;不包含只读 Hermes 历史会话
  • 会话分类、消息引用、压缩进度和可持久恢复的后台委派结果
  • 按账号授权 Profile 汇总模型选择器 — 只展示当前账号可访问的 Hermes Profile 中可用的模型
  • 每个会话显示模型标签和上下文 Token 用量

平台渠道

在一个页面统一配置 10 个平台:

平台 功能
Telegram Bot Token、提及控制、表情回应、自由回复聊天
Discord Bot Token、提及、自动线程、表情回应、频道白名单/黑名单
Slack Bot Token、提及控制、Bot 消息处理
WhatsApp 启用/禁用、提及控制、提及模式
Matrix Access Token、Homeserver、自动线程、私信提及线程
飞书 App ID / Secret、提及控制
钉钉 Client ID / Secret、提及控制
QQBot App ID / Secret、提及控制
微信 扫码登录(浏览器扫码,自动保存凭证)
企业微信 Bot ID / Secret
  • 凭证管理写入 ~/.hermes/.env
  • 渠道行为设置写入 ~/.hermes/config.yaml
  • 每个平台已配置/未配置状态检测

用量分析

  • Token 总用量明细(输入 / 输出)
  • 会话数及日均统计
  • 预估费用追踪及缓存命中率
  • 模型使用分布图
  • 30 天每日趋势(柱状图 + 数据表格)

定时任务

  • 创建、编辑、暂停、恢复、删除 Cron 任务
  • 立即触发执行
  • Cron 表达式快捷预设

Kanban

  • 按 Profile 管理的 Kanban 看板,用于规划和跟踪 Agent 工作
  • 可在仪表盘中创建任务、更新任务并移动状态
  • 复用 Web UI 本地状态和认证体系

可视化工作流

  • 基于 Vue Flow 的画布,支持 Hermes、Codex 和 Claude Code 节点以及文件/图片附件
  • 支持有向连线、结构化条件、成功/失败路由、循环和审批门
  • 工作流定义可导入/导出,并支持按 Profile 管理工作区
  • 支持运行预算、截止时间、停止、重跑和持久化执行历史
  • 可在画布回放冻结的运行快照、节点对话、路径选择和执行证据

模型管理

  • 从凭证池自动发现模型(~/.hermes/auth.json)
  • 从每个 Provider 端点获取可用模型(/v1/models)
  • 添加、更新、删除 Provider(预设和自定义 OpenAI 兼容)
  • 支持 OpenAI Codex、Nous Portal、xAI、Claude 和 GitHub Copilot 的 OAuth/设备授权
  • Provider URL 自动检测,支持非 v1 API 版本(如 /v4)
  • Provider 级模型分组、可见模型控制、别名、刷新和默认模型切换
  • 在模型页分别管理 STT 与 TTS Provider

多配置文件

  • 创建、重命名、删除、切换 Hermes 配置文件(Profile)
  • 克隆现有配置文件或从归档导入(.tar.gz)
  • 导出配置文件用于备份或分享
  • 按 Profile 隔离配置、缓存、上传、会话、任务、用量、记忆、技能、插件、Provider 和模型可见性
  • 账号绑定 Profile 权限:超级管理员可以管理全部 Profile;普通管理员只能查看和使用分配给自己的 Profile

文件浏览器

  • 浏览远程后端文件(local、Docker、SSH、Singularity)
  • 上传、下载、重命名、复制、移动和删除文件
  • 上传文件保存到当前选择/请求的 Hermes Profile 目录下;下载按真实路径解析,支持下载上传目录外的 Agent 产物
  • 创建目录
  • 预览和编辑支持的文件并提供语法高亮,还可把工作区文件附加回聊天

群聊

  • 多 Agent 聊天房间,通过 Socket.IO 实时通信
  • @提及路由 — 提及 Agent 触发上下文回复
  • 上下文压缩 — 历史消息超过 Token 阈值时自动摘要压缩
  • 输入状态和回复进度指示器
  • 房间创建、删除和邀请码管理
  • Agent 管理 — 添加/移除房间中的 Agent,支持独立 Profile
  • SQLite 消息持久化
  • 移动端响应式布局,可折叠侧边栏

Coding Agents

  • 在仪表盘中安装、配置、启动和监控 Claude Code 与 Codex
  • 内置 Coding Agent 终端、会话历史、工作区选择、图片输入和文件 Diff
  • 提供独立代理路由和 API 模式,适配不同 Provider/模型
  • 支持桌面独立聊天窗口,并持久化输出和 reasoning 元数据

桌面 Agent 浏览器

  • 桌面端多标签浏览器,Agent 可通过托管 MCP Server 进行导航和交互
  • 支持隔离浏览器 Profile、标签控制租约、代理、下载、Cookie 和权限管理
  • 支持可访问性快照、截图、控制台日志和页面标注

技能与记忆

  • 浏览和搜索已安装的技能
  • 查看技能详情和附件
  • 安装和管理 Skill Bundles,并查看按 Profile 统计的技能用量
  • 用户笔记、Ekko Agent 持久记忆和按 Profile 管理的记忆
  • 学习轨迹关系图,支持技能/记忆关系、分类筛选、详情查看和播放

主题自定义

  • 支持明暗模式、界面风格、基础字号、文字颜色和选中颜色
  • 支持按账号保存背景图片,并在整个工作区实时预览

日志

  • 查看 Agent / Server / Error 日志
  • 按日志级别、日志文件和关键词过滤
  • 结构化日志解析,HTTP 访问日志高亮

管理与运行时

  • 设备和局域网 Peer 页面,用于本地网络发现和 Peer 工具能力
  • MCP 管理器,用于托管的 hermes-studio Server、Profile 自动注入和 api / browser / devices / use 工具集
  • Runtime Version 和 Version Preview 工具,用于隔离测试新版本
  • 面向超级管理员的性能监控视图

认证

  • 基于 Token 的认证(首次运行自动生成或通过 AUTH_TOKEN 环境变量设置)
  • 用户名/密码登录,并在设置页提供账户管理
  • 默认登录名/密码为 admin / 123456;登录后会提示尽快修改默认账户和密码
  • 超级管理员可以管理用户和 Profile 绑定;普通管理员只能管理自己的账户信息

CLI 维护命令:

bash
# 删除持久化的登录 IP 锁记录
hermes-web-ui clear-login-locks

# 删除登录锁并重启正在运行的 Web UI 进程
hermes-web-ui clear-login-locks --restart

# 创建或重置默认超级管理员登录名/密码为 admin / 123456
hermes-web-ui reset-default-login

clear-login-locks 会删除 ${HERMES_WEB_UI_HOME:-~/.hermes-web-ui}/.login-lock.json。如果服务正在运行,需要重启服务才能清理内存中的锁定状态。reset-default-login 会更新 Web UI 账户数据库;如果已存在 admin 用户,则会把密码重置为 123456,并启用为超级管理员账户。

设置

  • 显示(流式输出、紧凑模式、推理过程、费用显示)
  • Agent(最大轮次、超时时间、工具强制执行)
  • 记忆(启用/禁用、字符限制)
  • 会话重置(空闲超时、定时重置)
  • 隐私(PII 脱敏)
  • 模型设置(默认模型 & Provider)
  • Profile 和 Provider 配置

语音 / TTS / STT

  • 在模型 → STT 和模型 → TTS 中管理语音 Provider;旧的设置 → 语音入口会跳转到这里。
  • TTS 适配器:Edge、OpenAI 兼容、MiMo、豆包、ElevenLabs、Gemini、xAI、Mistral、MiniMax、DeepInfra。
  • STT 适配器:浏览器、OpenAI 兼容、豆包、Groq、Mistral、xAI、ElevenLabs、DeepInfra。
  • 可在聊天输入框使用可编辑的回合制语音输入,也可打开全屏实时语音舞台进入连续的语音交互体验。
  • Provider Key 和 MiMo 音色复刻音频保存在服务端,浏览器只接收脱敏后的 Secret 状态。
  • 开始新的语音输入会先停止 Assistant 播放,但不会隐式取消正在执行的 Agent Run。
  • 支持的设置项、安全边界和当前非目标范围见 docs/voice-dialogue.md。
  • 实时语音舞台不代表同时听说的全双工通话;电话接入和常驻唤醒词监听仍不在当前范围。

Web 终端

  • 集成终端,基于 node-pty 和 @xterm/xterm
  • 多会话支持 — 创建、切换、关闭终端会话
  • 通过 WebSocket 实时传输键盘输入和 PTY 输出
  • 支持窗口大小调整

桌面应用与自动更新

  • Windows、macOS 和 Linux 原生 Electron 桌面壳
  • 内置 Web UI 运行时,并自动启动本地 Hermes Studio 服务
  • 桌面自动更新优先使用 Cloudflare 下载端点获取更新元数据和安装包
  • 如果 Cloudflare 更新源不可用,会回退到 GitHub Releases latest 资源
  • Windows 升级时会先尝试关闭已有 Hermes Studio 进程,再替换文件

快速开始

桌面应用(推荐)

从 GitHub Releases
下载最新的 Hermes Studio 桌面安装包。

桌面版会发布 macOS、Windows 和 Linux 构建;适用时会区分不同 CPU 架构。
桌面应用内置 Web UI 运行时,Hermes Agent 数据会保存到原生 Hermes 目录:

  • Windows:%LOCALAPPDATA%\hermes(找不到时回退到 %APPDATA%\hermes)
  • macOS/Linux:~/.hermes

桌面壳自身的 Web UI 状态会单独保存到 ~/.hermes-web-ui,除非设置了
HERMES_WEB_UI_HOME。

打包后的桌面应用启动后,会安装受管命令 shim,避免桌面应用、内置 Hermes Agent CLI
和内置 Web UI CLI 的命令互相冲突:

命令 说明
hermes-studio 打开 Hermes Studio 桌面应用
hermes-studio cli ... 运行内置 Hermes Agent CLI
hermes-studio web ... 运行内置 hermes-web-ui 命令
hermes-studio -h 显示 wrapper 帮助
hermes-studio-mcp [api|browser|devices|use] 运行指定的受管 Web UI MCP 工具集

使用 hermes-studio cli -h 查看 Hermes Agent CLI 帮助,使用
hermes-studio web -h 查看 Web UI CLI 帮助。hermes-studio-mcp 默认暴露
api 工具集;按任务选择 browser、devices 或 use,可以缩小 MCP 暴露面。

桌面自动更新会优先读取 https://download.ekkolearnai.com/latest。
如果该端点不可用,更新器会回退到
https://github.com/EKKOLearnAI/hermes-studio/releases/latest/download。

npm 安装

bash
npm install hermes-web-ui
hermes-web-ui start

打开 http://localhost:8648

Docker Compose

单容器部署,内置 Hermes Agent 运行时:

bash
# 使用预构建镜像(推荐)
WEBUI_IMAGE=ekkoye8888/hermes-web-ui docker compose up -d

# 或从源码构建
docker compose up -d --build

docker compose logs -f hermes-webui

打开 http://localhost:6060

  • Hermes 持久化数据目录:./hermes_data
  • Web UI 认证 Token 存储在 ./hermes_data/hermes-web-ui/.token
  • 首次启动并开启认证时,Token 会打印到容器日志中
  • 运行参数全部由 docker-compose.yml 环境变量驱动

更详细的说明与排错见:docs/docker.md

Hermes Agent 运行时发现

Web UI 启动后端聊天能力时,会优先使用包含 run_agent.py 的源码目录,例如
~/.hermes/hermes-agent。如果找不到源码目录,会退回到已安装 hermes 命令所使用
的 Python 环境,再退到系统 Python。因此源码安装和 pip install hermes-agent 这类
包安装方式都可以兼容。

Web UI 环境变量

这些变量用于配置 Hermes Web UI、本地 Hermes runtime 集成以及开发/预览辅助能力。Provider API Key 和 Hermes Agent 相关设置通常仍通过 Hermes profile 管理;这里列出的变量是进程级覆盖项。

变量 默认值 说明
PORT 8648 Web UI 监听端口。
BIND_HOST 0.0.0.0 Web UI 绑定地址。如需 IPv6,可显式设置为 ::。
HERMES_LAN_ADVERTISE_URL 未设置 App 局域网二维码使用的可访问 Studio 地址。Docker 中若通过 localhost 打开,请设置为宿主机局域网 URL,例如 http://192.168.1.20:6060。
HERMES_APP_ENTITLEMENT_REQUIRED true App 局域网 Relay 必须携带有效的云端签名。仅在临时兼容排查时设置为 false。
HERMES_APP_ENTITLEMENT_PUBLIC_KEY 内置 可选的 RS256 App 签名 PEM 公钥覆盖。签名 issuer 为 hermes-studio-server,audience 为 ekko-studio。
HERMES_WEB_UI_HOME ~/.hermes-web-ui Web UI 数据目录,用于认证 token、登录凭据、日志、数据库和默认上传目录。兼容支持 HERMES_WEBUI_STATE_DIR 作为别名。
HERMES_WEBUI_STATE_DIR 未设置 HERMES_WEB_UI_HOME 的兼容别名。
HERMES_WEB_UI_DISABLE_MCP_AUTOINJECT 未设置 关闭启动时向 Hermes profile 配置自动注入托管的 hermes-studio MCP server。
HERMES_WEB_UI_ALLOW_TRANSIENT_MCP_AUTOINJECT 未设置 当 HERMES_WEB_UI_HOME 位于临时目录(例如 Version Preview runtime)时,仍允许托管 MCP 自动注入。
UPLOAD_DIR $HERMES_WEB_UI_HOME/upload 覆盖上传根目录。文件会保存在按 Profile 隔离的子目录下。
CORS_ORIGINS 仅同 host HTTP、Socket.IO、WebSocket 跨源 allowlist,支持逗号或空格分隔。只有明确需要旧版 wildcard CORS 时才设置为 *。
AUTH_TOKEN 自动生成 显式指定 bearer token。未设置时,Web UI 会在 HERMES_WEB_UI_HOME 下自动生成。
AUTH_JWT_SECRET AUTH_TOKEN 用户名/密码会话的 JWT 签名密钥覆盖。
HERMES_WEB_UI_AUTH_JWT_EXPIRES_IN 30d 用户名/密码会话 JWT 有效期。支持秒数或 s/m/h/d 后缀,例如 12h 或 7d。
PROFILE default 启动/默认 Hermes profile。运行时请求使用前端当前选择且当前账号有权限访问的 Profile。
LOG_LEVEL info Server 日志级别。
BRIDGE_LOG_LEVEL $LOG_LEVEL 或 info Bridge 日志级别。
MAX_DOWNLOAD_SIZE 200MB 最大文件下载大小。
MAX_EDIT_SIZE 10MB 最大可编辑文件大小。
WORKSPACE_BASE 当前用户 Home 目录 Workspace 浏览根目录。
HERMES_HOME 平台默认值 Hermes 数据目录。Windows 使用 %LOCALAPPDATA%\hermes;macOS/Linux 使用 ~/.hermes。
HERMES_BIN hermes 自定义 Hermes CLI 二进制路径。
HERMES_AGENT_ROOT 自动发现 包含 run_agent.py 的 Hermes Agent 源码目录。
HERMES_AGENT_BRIDGE_PYTHON 自动发现 用于启动 agent bridge 的 Python 解释器。
HERMES_AGENT_BRIDGE_UV 自动发现 可用时用于启动 agent bridge 的 uv 可执行文件。
UV 自动发现 uv 可执行文件 fallback。
PYTHON 自动发现 agent bridge 的 Python 可执行文件 fallback。
HERMES_AGENT_BRIDGE_ENDPOINT 平台默认值 Agent bridge broker endpoint。Windows 默认 tcp://127.0.0.1:18765;macOS/Linux 默认 ipc:///tmp/hermes-agent-bridge.sock。
HERMES_AGENT_BRIDGE_TIMEOUT_MS 120000 Node 请求 bridge broker 的响应超时。
HERMES_AGENT_BRIDGE_CONNECT_RETRY_MS 5000 连接 bridge socket 失败时的短重试窗口。
HERMES_AGENT_BRIDGE_STARTUP_TIMEOUT_MS 120000 等待 Python bridge ready 的超时。
HERMES_AGENT_BRIDGE_STOP_ON_SHUTDOWN 开启 Web UI 关闭和重启时是否停止 bridge broker;设为 0、false、no 或 off 才会在重启时保留 broker。
HERMES_AGENT_BRIDGE_AUTO_RESTART 开启 bridge broker 意外退出后是否自动重启;设为 0、false、no 或 off 可关闭。
HERMES_AGENT_BRIDGE_RESTART_DELAY_MS 1000 bridge 自动重启退避的基础延迟。
HERMES_AGENT_BRIDGE_PLATFORM cli 传给 Hermes Agent 的 platform 标识。
HERMES_AGENT_BRIDGE_WORKER_TRANSPORT 平台默认值 Profile worker transport。设为 tcp 使用 loopback TCP;设为 ipc/unix 使用 Unix domain socket;默认 Windows TCP、macOS/Linux IPC。
HERMES_AGENT_BRIDGE_WORKER_PORT_BASE 18780 TCP worker endpoint 起始端口。
HERMES_BRIDGE_PROVIDER profile/默认值 bridge 运行时的 provider 覆盖。
HERMES_BRIDGE_TOOLSETS profile/默认值 bridge 运行时的 toolset 覆盖。
HERMES_BRIDGE_MAX_TURNS profile/默认值 bridge 运行时的最大轮数覆盖。
HERMES_BRIDGE_SUPPRESS_PLATFORM_HINT cli 控制传给 Hermes Agent 的 bridge platform hint suppression。
HERMES_OPENROUTER_APP_REFERER https://hermes-studio.ai bridge 运行发送给 OpenRouter 的 attribution referer。
HERMES_OPENROUTER_APP_TITLE Hermes Web UI bridge 运行发送给 OpenRouter 的 attribution title。
HERMES_OPENROUTER_APP_CATEGORIES cli-agent,personal-agent bridge 运行发送给 OpenRouter 的 attribution categories。
HERMES_WEB_UI_MANAGED_GATEWAY 默认开启 控制 Web UI 托管 Hermes gateway 进程;设为 0、false、no 或 off 时改用 hermes gateway start。
HERMES_WEB_UI_DISABLE_GATEWAY_AUTOSTART 未设置 跳过启动时的 gateway 检查/自动启动;dashboard-only 部署中如果由其它服务管理 Hermes gateway,可设为 1、true、yes 或 on。
HERMES_WEB_UI_DISABLE_SKILL_INJECTION 未设置 跳过启动时的内置 skill 注入;如果内置 skills 由 Hermes Web UI 外部管理,可设为 1、true、yes 或 on。启用注入时,Web UI 只更新自己此前安装的 skills 或内容完全相同的既有内置副本;本地修改和用户拥有的同名 skills 会跳过。
HERMES_WEB_UI_STOP_GATEWAYS_ON_SHUTDOWN 生产环境默认开启 Web UI 关闭时是否同时停止托管的 gateway 进程;设为 0 或 false 可让 gateway 分离运行。
GATEWAY_HOST 127.0.0.1 旧 gateway 兼容配置中写入 profile 的默认 gateway host。
HERMES_WEB_UI_PREVIEW_REPO package repository Version Preview 使用的 GitHub 仓库。
HERMES_WEB_UI_PREVIEW_AGENT_BRIDGE_TRANSPORT 平台默认值 Version Preview broker transport。设为 tcp 可让预览环境在 macOS/Linux 上也使用 loopback TCP;未设置时会跟随 HERMES_AGENT_BRIDGE_WORKER_TRANSPORT=tcp。
HERMES_WEB_UI_PREVIEW_AGENT_BRIDGE_ENDPOINT 隔离的预览 endpoint 直接覆盖 Version Preview 的 broker endpoint。
HERMES_WEB_UI_BACKEND_PORT 8648 Vite dev proxy 使用的后端端口。
HERMES_WEB_UI_FRONTEND_PORT 8649 前端 Vite dev server 端口。

CLI 命令

命令 说明
hermes-web-ui start [port] 后台启动;支持位置端口或 --port
hermes-web-ui client [port] 为远程客户端启动,关闭 Gateway 自动启动并允许跨域
hermes-web-ui restart [port] 重启;默认会关闭 Bridge Broker
hermes-web-ui stop 停止后台进程
hermes-web-ui status 查看运行状态
hermes-web-ui clear-login-locks [--restart] 清理持久登录锁,可选择重启
hermes-web-ui reset-default-login 创建或重置默认管理员登录
hermes-web-ui update / upgrade 更新到最新版本并重启
hermes-web-ui version / -v 显示版本号
hermes-web-ui -h 显示帮助信息

如不希望自动打开浏览器,可在 start 或 client 后添加 --no-open。

restart、update 和 upgrade 默认会停止 Agent Bridge broker,避免重启或更新后的服务复用旧 Python bridge 进程。只有明确希望保留 broker 和正在运行的 bridge session 时,才在重启前设置 HERMES_AGENT_BRIDGE_STOP_ON_SHUTDOWN=0。

update / upgrade 会先尝试执行 npm cache clean --force,再执行 npm install hermes-web-ui@latest 并重启。缓存清理是 best-effort;如果清理失败,只提示 warning,升级安装会继续执行。

自动配置

启动时 BFF 服务器会自动:

  • 初始化 Web UI 数据目录、本地数据库和内置技能
  • 启动 /chat-run 使用的 Hermes agent bridge
  • 启动成功后自动打开浏览器;设置 --no-open 时跳过

开发

bash
git clone https://github.com/EKKOLearnAI/hermes-studio.git
cd hermes-web-ui
npm install
npm run dev
bash
npm run build   # 构建输出到 dist/

项目开发规范见:DEVELOPMENT.md。

架构

text
浏览器 → BFF (Koa, :8648) → Socket.IO /chat-run
                ↓
        Hermes agent bridge → Hermes Agent runtime
                ↓
           Hermes CLI / profiles
           profile config.yaml    (渠道/Provider 配置)
           profile auth.json      (凭证池)
           腾讯 iLink API         (微信扫码登录)

前端采用 多 Agent 可扩展架构 — 所有 Hermes 相关代码都按命名空间组织在 hermes/ 目录下(API、组件、视图、Store),可以方便地并行接入新的 Agent。

BFF 层负责:Socket.IO 聊天流式推送、Hermes agent bridge、按 Profile 隔离的上传和按路径解析的下载(多 Backend 支持:local/Docker/SSH/Singularity)、会话 CRUD、分账户分 Profile 管理、配置/凭证管理、微信扫码登录、模型发现、技能/记忆/插件管理、TTS/STT、Coding Agent 代理、MCP/Runtime 管理、日志读取和静态文件服务。

技术栈

前端: Vue 3 + TypeScript + Vite + Naive UI + Pinia + Vue Router + vue-i18n + SCSS + markdown-it + highlight.js

后端: Koa 2(BFF 服务器)+ node-pty(Web 终端)

许可证

BSL-1.1

该许可证覆盖 Hermes Studio、原 Hermes Web UI 名称、hermes-web-ui npm 包和
CLI、桌面应用、固件、发布产物、文档以及本仓库内的关联文件。