hermes-ui
Glassmorphic web interface for Hermes Agent — your self-hosted AI assistant
Overview
Hermes UI is a glassmorphic web interface designed to provide a visual management layer for the self-hosted Hermes Agent. It operates as a single-file React application served via a lightweight Python proxy that handles real-time log streaming and API communication without external pip dependencies. The interface includes specialized panels for monitoring system stats, inspecting internal memory files, and browsing Model Context Protocol (MCP) tools. Users can also preview generated artifacts like HTML or SVG files in a sandboxed environment and manage their agent's skills and session history.
- Single-file React architecture with no build steps or dependencies
- Real-time log streaming and tool call visualization via SSE
- Integrated file browser and memory inspector for agent configuration
Full README from GitHub
Hermes UI
A sleek, glassmorphic web interface for Hermes Agent — your self-hosted AI assistant.
Built as a single-file HTML application with React 18, Hermes UI provides a full-featured chat interface, real-time log streaming, file browsing, memory inspection, and more — all through a lightweight Python proxy server.
Artifact Panel

Midnight (default)

Twilight

Dawn

Features
Chat Interface
- SSE streaming with real-time token display
- Tool call visualization with expandable results
- Message editing and re-sending
- Image paste/drop with Gemini vision analysis
- Pause, interject, and stop controls mid-stream
- Multiple personality modes (default, technical, creative, pirate, kawaii, and more)
- PDF and HTML chat export
- Markdown rendering with syntax-highlighted code blocks
Dashboard
- Live auto-refreshing stats (sessions, messages, tools, tokens)
- System info panel (model, provider, uptime)
- Hermes configuration overview
Artifact Panel
- 5th tab in the live terminal panel (alongside Gateway, Errors, Web UI, All)
- Auto-detects HTML, SVG, and code blocks in Hermes responses and renders them live
- Auto-detects file paths Hermes saves to disk (e.g.
~/Desktop/page.html) and loads them automatically — no need to copy-paste code - Panel dynamically widens from 320px to 600px when Artifacts tab is active
- Sandboxed iframe rendering for HTML/SVG with full animation and JavaScript support
- Syntax-highlighted code blocks for Python, JS, CSS, and other languages
- Per-artifact Copy and close (✕) buttons
- Manual "Load File" button to open any local HTML/SVG/code file directly in the panel
- Scroll position preserved when switching between tabs
Terminal
- Tabbed interface: Gateway, Errors, Web UI, All — real-time log streaming via SSE
- Live connection indicator with line count
File Browser
- Browse
~/.hermesdirectory tree - View and edit config files, logs, and memory files in-place
- Image preview support
Memory Inspector
- View and edit Hermes internal memory (MEMORY.md, USER.md)
- Live memory usage stats
Skills Browser
- Search and browse all installed Hermes skills
- Sort by newest, oldest, or name — see what Hermes has been creating
- Relative timestamps on each skill (e.g. "2h ago", "3d ago")
- View skill descriptions, tags, and trigger phrases
Jobs Monitor
- Track active and recent Hermes sessions
- Message, tool call, and token counts per session
- Auto-refresh every 10 seconds
MCP Tool Browser
- Browse all connected MCP servers and their tools
- View tool descriptions and status
UI/UX
- Glassmorphism design with ambient animated glow
- Collapsible sidebar and right panel
- System status bar (connection, model, memory count, sessions)
- Inter + JetBrains Mono typography
- Keyboard shortcuts
- Theme switcher (Midnight, Twilight, Dawn)
- Responsive layout for tablets and mobile phones
- Bottom navigation bar on small screens with quick access to key views
- Touch-optimized targets and safe-area inset support for notched devices
Quick Start
Prerequisites
- Python 3.8+
- A running Hermes Agent instance on
localhost:8642 - (Optional) Claude Code CLI for the Claude terminal tab
Install & Run
# Clone the repo
git clone https://github.com/pyrate-llama/hermes-ui.git
cd hermes-ui
# Start the proxy server
python3 serve_lite.py
# Or specify a custom port
python3 serve_lite.py --port 8080
Note:
serve.pystill exists as a backwards-compatibility shim that prints a deprecation notice and execsserve_lite.py. Existing systemd units and launchers that referenceserve.pywill keep working, but new setups should invokeserve_lite.pydirectly.
Open http://localhost:3333/hermes-ui.html in your browser.
That's it — no npm install, no build step, no dependencies beyond Python's standard library.
Configuration
The proxy server connects to Hermes at http://127.0.0.1:8642 by default. To change this, edit the HERMES variable at the top of serve_lite.py.
For image analysis (paste/drop images in chat), add your Gemini API key in the Settings modal within the UI.
Using OpenRouter or Custom Inference Endpoints
Hermes supports any OpenAI-compatible API endpoint, which means you can use OpenRouter to access Claude, GPT-4, Llama, Mistral, and dozens of other models through a single API key.
In your ~/.hermes/config.yaml, set your inference endpoint and API key:
inference:
base_url: https://openrouter.ai/api/v1
api_key: sk-or-v1-your-openrouter-key
model: anthropic/claude-sonnet-4-20250514
This also works with other compatible providers like LiteLLM (self-hosted proxy), Ollama (http://localhost:11434/v1), or any endpoint that speaks the OpenAI chat completions format.
Remote Access (Tailscale)
Access Hermes UI from your phone, tablet, or any device using Tailscale — a zero-config mesh VPN built on WireGuard. No ports exposed to the internet, no DNS to configure, all traffic encrypted end-to-end.
Install Tailscale on your server (the machine running Hermes):
brew install tailscale # macOS # or: curl -fsSL https://tailscale.com/install.sh | sh # Linux tailscale upInstall Tailscale on your phone/other devices — download the app (iOS/Android) and sign in with the same account.
Connect — find your server's Tailscale IP (
tailscale ip) and open:http://100.x.x.x:3333/hermes-ui.htmlOptional: HTTPS via Tailscale Serve — get a real certificate and clean URL:
tailscale serve --bg 3333 # Accessible at https://your-machine.tail1234.ts.net
A built-in setup guide is also available in the app under Settings > Remote Access.
Architecture
┌─────────────┐ ┌────────────────┐ ┌──────────────────┐
│ Browser │───▶│ serve_lite.py │───▶│ Hermes Agent │
│ (React 18) │ │ port 3333 │ │ port 8642 │
│ │◀───│ proxy + │◀───│ (WebAPI) │
│ Single HTML │ │ log stream │ │ │
└─────────────┘ └────────────────┘ └──────────────────┘
hermes-ui.html— The entire frontend in a single file: React components, CSS, and markup. Uses Babel standalone for JSX compilation in the browser.serve_lite.py— A lightweight Python proxy (stdlib only, no pip dependencies) that serves static files, proxies the/api/chat/*two-step SSE flow to the Hermes agent, streams logs via SSE, provides shell/Claude CLI execution, and enables file browsing/editing within~/.hermes. This is the canonical server.serve.py— Backwards-compatibility shim. Prints a deprecation notice and execsserve_lite.py. Kept so existing systemd units and launchers don't break.
CDN Dependencies
All loaded from cdnjs.cloudflare.com at runtime:
| Library | Version | Purpose |
|---|---|---|
| React | 18.2.0 | UI framework |
| React DOM | 18.2.0 | DOM rendering |
| Babel Standalone | 7.23.9 | JSX compilation |
| marked | 11.1.1 | Markdown parsing |
| highlight.js | 11.9.0 | Code syntax highlighting |
| Inter | — | UI typography (Google Fonts) |
| JetBrains Mono | — | Code/terminal typography (Google Fonts) |
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
Enter |
Send message |
Shift+Enter |
New line in input |
? |
Show keyboard shortcuts |
Ctrl/Cmd+K |
Focus search |
Ctrl/Cmd+N |
New chat |
Ctrl/Cmd+\ |
Toggle sidebar |
Ctrl/Cmd+E |
Export chat as markdown |
Escape |
Close modals / dismiss |
Themes
Hermes UI ships with three built-in themes, accessible via the theme switcher in the header:
- Midnight (default) — Deep indigo/purple glassmorphism with ambient purple and green glow
- Twilight — Warm amber/gold tones with copper accents
- Dawn — Soft light theme with blue-gray tones for daytime use
Troubleshooting
Hermes stops responding / hangs after a few messages
If Hermes responds once or twice then goes silent, check your ~/.hermes/config.yaml for this bug in the context compression config:
compression:
summary_base_url: null # ← this causes a 404 and hangs the agent
Fix it by setting summary_base_url to match your inference provider's base URL. For MiniMax:
compression:
summary_base_url: https://api.minimax.io/anthropic
Then restart Hermes: hermes restart
Chat hangs, times out silently, or returns 404 on /api/chat/start
Two common causes:
You're running the old
serve.pydirectly from a stale checkout or a systemd unit. The current client (hermes-ui.html) talks to the two-step/api/chat/*SSE API, which onlyserve_lite.pyimplements. If your launcher callspython3 serve.py, pull the repo — the newserve.pyis a shim that forwards toserve_lite.pyand will keep working. If you're on an older checkout, update your unit to callserve_lite.pydirectly:ExecStart=/usr/bin/python3 /path/to/hermes-ui/serve_lite.pyThe Hermes agent itself (port 8642) isn't reachable.
serve_lite.pyon 3333 is only a proxy — it needs the agent running on 8642. Checkcurl http://127.0.0.1:8642/health.
If you still see silent hangs, open the browser console — the client now surfaces SSE errors as visible chat messages rather than stalling.
License
MIT — see LICENSE.
Credits
Built by Pyrate Llama with help from Claude (Anthropic).
Powered by Hermes Agent.