2026-04-11 18:54:46 +08:00
# Hermes Web UI
2026-04-11 15:59:14 +08:00
2026-04-13 15:15:14 +08:00
Web dashboard for [Hermes Agent ](https://github.com/NousResearch/hermes-agent ) — chat interaction, session management, scheduled jobs, platform channel configuration, and log viewing.
2026-04-11 15:59:14 +08:00
2026-04-13 15:26:10 +08:00

2026-04-13 09:34:29 +08:00
2026-04-11 18:54:46 +08:00
## Tech Stack
2026-04-11 15:59:14 +08:00
- **Vue 3** — Composition API + `<script setup>`
- **TypeScript**
2026-04-11 18:54:46 +08:00
- **Vite** — Build tool
- **Naive UI** — Component library
- **Pinia** — State management
- **Vue Router** — Routing (Hash mode)
2026-04-13 15:15:14 +08:00
- **vue-i18n** — Internationalization (Chinese / English)
2026-04-11 21:33:04 +08:00
- **Koa 2** — BFF server (API proxy, file upload, session management)
2026-04-11 18:54:46 +08:00
- **SCSS** — Style preprocessor
- **markdown-it** + **highlight.js ** — Markdown rendering and code highlighting
2026-04-11 15:59:14 +08:00
2026-04-11 21:33:04 +08:00
## Install and Run
2026-04-11 15:59:14 +08:00
2026-04-11 21:33:04 +08:00
``` bash
npm install -g hermes-web-ui
hermes-web-ui start
2026-04-11 15:59:14 +08:00
```
2026-04-11 21:33:04 +08:00
Open http://localhost:8648
2026-04-11 15:59:14 +08:00
2026-04-11 21:33:04 +08:00
### CLI Commands
2026-04-11 15:59:14 +08:00
2026-04-13 15:22:12 +08:00
| Command | Description |
| --------------------------------- | --------------------------------- |
| `hermes-web-ui start` | Start in background (daemon mode) |
| `hermes-web-ui start --port 9000` | Start on custom port |
| `hermes-web-ui stop` | Stop background process |
| `hermes-web-ui restart` | Restart background process |
| `hermes-web-ui status` | Check if running |
| `hermes-web-ui` | Run in foreground (for debugging) |
2026-04-11 15:59:14 +08:00
2026-04-11 21:33:04 +08:00
### Auto Configuration
2026-04-11 15:59:14 +08:00
2026-04-11 21:33:04 +08:00
On startup, the BFF server automatically checks `~/.hermes/config.yaml` and ensures `platforms.api_server.enabled` is set to `true` . If modified, it backs up the original to `config.yaml.bak` and restarts the gateway.
2026-04-11 15:59:14 +08:00
2026-04-11 21:33:04 +08:00
## Development
2026-04-11 15:59:14 +08:00
``` bash
2026-04-11 18:54:46 +08:00
git clone https://github.com/EKKOLearnAI/hermes-web-ui.git
cd hermes-web-ui
2026-04-11 15:59:14 +08:00
npm install
npm run dev
```
2026-04-11 21:33:04 +08:00
This starts:
2026-04-13 15:22:12 +08:00
2026-04-11 21:33:04 +08:00
- Frontend: http://localhost:5173
- BFF Server: http://localhost:8648 (proxies to Hermes on 8642)
### Build
``` bash
npm run build
```
Outputs to `dist/` (frontend + compiled BFF server).
2026-04-11 18:54:46 +08:00
## Project Structure
2026-04-11 15:59:14 +08:00
```
2026-04-11 21:33:04 +08:00
hermes-web-ui/
├── bin/
│ └── hermes-web-ui.mjs # CLI entry (start/stop/restart/status)
├── server/src/
│ ├── index.ts # BFF entry (Koa app bootstrap)
│ ├── config.ts # Configuration (port, upstream, etc.)
│ ├── routes/
│ │ ├── proxy.ts # API proxy to Hermes (/api/*, /v1/*)
2026-04-13 15:15:14 +08:00
│ │ ├── config.ts # Config & credentials management
│ │ ├── weixin.ts # WeChat QR code login proxy
2026-04-11 21:33:04 +08:00
│ │ ├── upload.ts # File upload (POST /upload)
│ │ ├── sessions.ts # Session management via Hermes CLI
2026-04-12 23:23:50 +08:00
│ │ ├── filesystem.ts # Skills, memory, config model management
2026-04-11 21:33:04 +08:00
│ │ ├── webhook.ts # Webhook receiver
│ │ └── logs.ts # Log file listing and reading
│ └── services/
│ └── hermes-cli.ts # Hermes CLI wrapper (sessions, logs, version)
├── src/
2026-04-13 15:15:14 +08:00
│ ├── i18n/ # Internationalization (en / zh)
│ │ ├── index.ts # i18n instance setup
│ │ └── locales/
│ │ ├── en.ts # English translations
│ │ └── zh.ts # Chinese translations
2026-04-11 21:33:04 +08:00
│ ├── api/ # Frontend API layer
│ ├── stores/ # Pinia state management
│ ├── components/
2026-04-12 23:23:50 +08:00
│ │ ├── layout/
│ │ │ ├── AppSidebar.vue # Sidebar navigation
2026-04-13 15:15:14 +08:00
│ │ │ ├── LanguageSwitch.vue # Language toggle (EN / 中文)
2026-04-12 23:23:50 +08:00
│ │ │ └── ModelSelector.vue # Global model selector
2026-04-11 21:33:04 +08:00
│ │ ├── chat/ # Chat components
2026-04-13 15:15:14 +08:00
│ │ ├── jobs/ # Job components
│ │ ├── models/ # Model/provider components
│ │ ├── settings/ # Settings components
│ │ │ ├── PlatformCard.vue # Platform card with config status
│ │ │ └── PlatformSettings.vue # Platform channel configuration
│ │ └── skills/ # Skill components
2026-04-11 21:33:04 +08:00
│ ├── views/
│ │ ├── ChatView.vue # Chat page
│ │ ├── JobsView.vue # Jobs page
2026-04-12 23:23:50 +08:00
│ │ ├── LogsView.vue # Logs page
2026-04-13 15:15:14 +08:00
│ │ ├── ModelsView.vue # Model management page
│ │ ├── ChannelsView.vue # Platform channels page
│ │ ├── SkillsView.vue # Skills page
│ │ ├── MemoryView.vue # Memory page
│ │ └── SettingsView.vue # Settings page
2026-04-11 21:33:04 +08:00
│ └── router/index.ts # Router configuration
└── dist/ # Build output (published to npm)
├── server/index.js # Compiled BFF
├── index.html # Frontend entry
└── assets/ # Frontend static assets
2026-04-11 15:59:14 +08:00
```
2026-04-11 18:54:46 +08:00
## Features
2026-04-11 15:59:14 +08:00
2026-04-11 18:54:46 +08:00
### Chat
2026-04-13 15:22:12 +08:00
2026-04-11 21:33:04 +08:00
- Async Run + SSE event streaming via BFF proxy
- Session management via Hermes CLI
- Multi-session switching with message history
2026-04-13 15:15:14 +08:00
- Session grouping by source (Telegram, Discord, Slack, etc.) with collapsible accordion
- Session rename and deletion
2026-04-11 21:33:04 +08:00
- Markdown rendering with syntax highlighting and code copy
2026-04-13 15:15:14 +08:00
- Tool call detail expansion (arguments / result)
2026-04-11 21:33:04 +08:00
- File upload support (saved to temp, path passed to API)
2026-04-12 23:23:50 +08:00
- Model selector — automatically discovers available models from `~/.hermes/auth.json` credential pool
- Global model switching (updates `~/.hermes/config.yaml` )
- Per-session model display (badge in chat header and session list)
2026-04-13 15:15:14 +08:00
### Platform Channels
2026-04-13 15:22:12 +08:00
2026-04-13 15:15:14 +08:00
- Unified channel configuration page (Telegram, Discord, Slack, WhatsApp, Matrix, Feishu, WeChat, WeCom)
- Credential management — writes to `~/.hermes/.env` (matching `hermes gateway setup` behavior)
- Channel behavior settings — writes to `~/.hermes/config.yaml`
- WeChat QR code login — opens QR in browser, polls scan status, auto-saves credentials
- Auto gateway restart after any channel config change
- Per-platform configured/unconfigured status detection
2026-04-12 23:23:50 +08:00
### Model Management
2026-04-13 15:22:12 +08:00
2026-04-12 23:23:50 +08:00
- Automatically reads credential pool from `~/.hermes/auth.json`
- Fetches available models from each provider endpoint (`/v1/models` )
- Groups models by provider (e.g. zai, subrouter.ai)
2026-04-13 15:15:14 +08:00
- Add custom OpenAI-compatible providers
2026-04-12 23:23:50 +08:00
- Switching model updates `model.provider` in config.yaml to bypass env auto-detection
- Error handling: parallel fetching, per-provider timeout, fallback to config.yaml parsing
2026-04-11 15:59:14 +08:00
2026-04-13 15:15:14 +08:00
### Settings
2026-04-13 15:22:12 +08:00
2026-04-13 15:15:14 +08:00
- Display settings (streaming, compact mode, reasoning, cost, etc.)
- Agent settings (max turns, timeout, tool enforcement)
- Memory settings (enable/disable, char limits)
- Session reset settings (idle timeout, scheduled reset)
- Privacy settings (PII redaction)
- API server settings
2026-04-11 18:54:46 +08:00
### Scheduled Jobs
2026-04-13 15:22:12 +08:00
2026-04-11 18:54:46 +08:00
- Job list view (including paused/disabled jobs)
2026-04-11 21:33:04 +08:00
- Create, edit, pause, resume, and delete jobs
2026-04-11 18:54:46 +08:00
- Trigger immediate job execution
- Cron expression quick presets
2026-04-11 15:59:14 +08:00
2026-04-13 15:15:14 +08:00
### Skills & Memory
2026-04-13 15:22:12 +08:00
2026-04-13 15:15:14 +08:00
- Browse and search installed skills
- View skill details and attached files
- User notes and profile management
2026-04-11 21:33:04 +08:00
### Logs
2026-04-13 15:22:12 +08:00
2026-04-11 21:33:04 +08:00
- View Hermes agent/gateway/error logs
- Filter by log level, log file, and search keyword
- Structured log parsing with HTTP access log highlighting
2026-04-11 15:59:14 +08:00
2026-04-11 21:33:04 +08:00
### Other
2026-04-13 15:22:12 +08:00
2026-04-13 15:15:14 +08:00
- Internationalization — auto-detect browser language, manual toggle between Chinese and English
2026-04-11 21:33:04 +08:00
- Real-time connection status monitoring
- Hermes version display in sidebar
- Auto config check on startup
- Minimalist dark theme
2026-04-13 15:15:14 +08:00
- Session group collapse state persisted across navigation
2026-04-11 15:59:14 +08:00
2026-04-11 21:33:04 +08:00
## Architecture
2026-04-11 15:59:14 +08:00
```
2026-04-11 21:33:04 +08:00
Browser → BFF (Koa, :8648) → Hermes API (:8642)
↓
Hermes CLI (sessions, logs, version)
2026-04-13 15:15:14 +08:00
↓
~/.hermes/config.yaml (channel behavior)
~/.hermes/.env (platform credentials)
Tencent iLink API (WeChat QR login)
2026-04-11 15:59:14 +08:00
```
2026-04-11 21:33:04 +08:00
The BFF layer handles:
2026-04-13 15:22:12 +08:00
2026-04-11 21:33:04 +08:00
- API proxy to Hermes (with header forwarding)
- SSE streaming passthrough
- File upload to temp directory
- Session CRUD via Hermes CLI
2026-04-13 15:15:14 +08:00
- Config & credential management (config.yaml + .env)
- WeChat QR code login flow (fetch QR, poll status, save credentials)
- Auto gateway restart on platform config changes
2026-04-12 23:23:50 +08:00
- Model discovery from `~/.hermes/auth.json` credential pool
- Skills, memory, and custom provider management
2026-04-11 21:33:04 +08:00
- Log file reading and parsing
- Static file serving (SPA fallback)
2026-04-11 15:59:14 +08:00
---
2026-04-11 18:54:46 +08:00
## License
[MIT ](./LICENSE )