English · 简体中文
The command center for Hermes Agent — chat, steer, browse files, manage skills, and monitor everything from a single glassmorphic HTML app.
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.
Hermes UI 3.0 is the release where the web client catches up with the bigger Hermes Agent 0.11 world instead of feeling like a thin wrapper around chat.
Hermes Agent 0.11 features now surfaced in the UI
- Provider and API-key management in Settings — save local provider keys without hand-editing config files
- Live model capability labels — see at a glance whether the active model supports vision, steer, reasoning, tools, and live model discovery
- Reasoning effort control in the composer —
Off,Low,Med,High,XHigh, orAuto - Steer during streaming — send guidance into a running turn without pausing or canceling it
- Native image path for vision-capable models — pasted images go straight through when the current model supports vision, with Gemini still available as the fallback path for MiniMax-style setups
- Provider and model status surfaced across the dashboard, composer, and status bar so 0.11's expanded routing/provider surface is visible instead of hidden
Big UX additions in this release
- Search across all chat sessions — title and content search from the global search entrypoint
- Redo / retry on older prompts without deleting newer turns — retries append as a new branch at the bottom instead of wiping history underneath
- Resizable layout — left and right columns can be dragged tighter or wider
- Token / context meter — simple context pressure shown in the bottom status bar
- Sidebar attention indicators — active, unread, and recent activity are much easier to spot
- Streaming polish — better incremental markdown rendering, cleaner tool-output ordering, and stronger compression/session-rotation handling
Everything good from the earlier builds stays
- Document upload in chat
- Artifact panel for HTML, SVG, PDF, and CSV previews
- MCP Tools browser
- Base System Prompt support and
extra_system_prompt.md - Built-in shell / Hermes / Claude Code terminal area
- File browser, memory tools, cron jobs, skills browser, themes, and mobile layout support
Chat Interface
- SSE streaming with incremental markdown rendering
- Tool call visualization with expandable results
- Message editing and re-sending
- Retry / redo from older prompts without deleting later messages
- Session search across titles and message content
- Image paste/drop with native vision passthrough for supported models, plus Gemini fallback when needed
- Document upload in the composer (.txt, .md, .pdf, .json, .csv, .py, .js, .ts) — RTF auto-converts to plain text
- Pause, steer, and stop controls mid-stream
- Reasoning effort selector in the composer
- Command search (
Ctrl/Cmd+K) for jumping into session search fast - Multiple personality modes (default, technical, creative, pirate, kawaii, and more)
- Base System Prompt field in Settings — write your own persona or instructions
- 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, capabilities)
- Hermes configuration overview
Artifact Panel
- Dedicated tab in the live right panel (alongside Errors, Web UI, All)
- Auto-detects HTML, SVG, PDF, and CSV output 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 for Shell, Hermes, and Claude Code flows
- Real-time log streaming views for Gateway, Errors, Web UI, and All
- 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")
- Edit and delete installed skills from the UI
- 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
- Resizable left and right columns
- System status bar with connection, model, capability pills, memory count, sessions, and context pressure
- Sidebar activity indicators for streaming, unread, and recent chats
- 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
- Python 3.8+
- A running Hermes Agent instance on
localhost:8642 - (Optional) Claude Code CLI for the Claude terminal tab
# Clone the repo
git clone https://github.com/pyrate-llama/hermes-ui.git
cd hermes-ui
# Start the proxy server with the Hermes venv interpreter
~/.hermes/hermes-agent/venv/bin/python3 serve_lite.py
# Or specify a custom port
~/.hermes/hermes-agent/venv/bin/python3 serve_lite.py --port 8080Note:
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.If you accidentally start
serve_lite.pywith the wrong Python, it will try to re-launch itself with the Hermes venv interpreter automatically.
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.
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.
Provider keys can be managed directly in Settings, including local API-key storage for supported providers. For image analysis fallback on non-vision setups, add your Gemini API key there as well.
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-20250514This 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.
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 up
-
Install 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.html -
Optional: 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.
┌─────────────┐ ┌────────────────┐ ┌──────────────────┐
│ 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.
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) |
| 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 |
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
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 agentFix it by setting summary_base_url to match your inference provider's base URL. For MiniMax:
compression:
summary_base_url: https://api.minimax.io/anthropicThen 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.py -
The 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.
MIT — see LICENSE.
Built by Pyrate Llama with help from Claude (Anthropic).
Powered by Hermes Agent.







