Overview
Hermes Web UI is a self-hosted browser interface for Hermes Agent, the always-on autonomous agent that runs on your own server, keeps memory across sessions and is reachable from messaging apps. The project's goal is parity with the Hermes CLI: anything you can do from a terminal you can do from the browser, using your existing Hermes configuration, models and provider keys with no extra setup.
It is deliberately small in construction — Python on the server and vanilla JavaScript in the browser, with no framework, bundler or build step. The layout is three panels: sessions and navigation on the left, chat in the centre, and a workspace file browser with inline preview on the right. Model, profile and workspace controls sit in the composer footer so they stay visible while you type, a circular context ring shows token usage at a glance, and the remaining settings and session tools live in a Hermes Control Center launched from the sidebar.
Chat runs the Hermes agent in-process, reading your `HERMES_HOME` configuration directly rather than calling an external agent API — worth knowing when you already run a Hermes endpoint, because `HERMES_API_URL` is only read by the tasks/cron health probe. Two documented alternatives exist: add your endpoint as a custom OpenAI-compatible provider, or route browser chat through a running Hermes Gateway with `HERMES_WEBUI_CHAT_BACKEND=gateway`. Deployment options include a Nix flake and NixOS module, single- and multi-container Docker, and an SSH tunnel for secure remote access. The bootstrap supports Linux, macOS and WSL2; native Windows is not yet a supported bootstrap target.
What it does
- Near-parity with the Hermes CLI from the browser, reusing your existing Hermes agent, models and provider configuration
- Three-panel layout: sessions sidebar, chat, and a workspace file browser with inline preview
- Composer-footer model, profile and workspace switches plus a circular context ring for token usage
- No build step — Python server and vanilla JS, so there is no bundler or framework to maintain
- `ctl.sh` daemon lifecycle for homelab and VM installs: start, status, logs, restart, stop, with a PID file and log under ~/.hermes
- Nix flake and NixOS module, plus single- and multi-container Docker deployments
- First-run onboarding wizard that walks through provider setup, with light and dark themes and a mobile-friendly layout
Getting started
The repository bootstrap does the whole setup: it detects Hermes Agent (and offers to run the official installer if it is missing), prepares a Python environment, starts the server, waits for /health and drops you into an onboarding wizard.
Clone and bootstrap
Run the bootstrap from the clone. It runs in the foreground, so stop it with Ctrl-C. Pass --no-browser to skip opening a browser tab.
git clone https://github.com/nesquena/hermes-webui.git hermes-webui
cd hermes-webui
python3 bootstrap.pyOr use the shell launcher
start.sh is the equivalent launcher if you prefer it.
./start.shRun it as a daemon
For a VM or homelab install, ctl.sh wraps the daemon lifecycle without needing fuser or pkill. It runs the bootstrap in foreground/no-browser mode behind a daemon wrapper, writes a PID file and logs, and honours .env plus inline overrides.
./ctl.sh start # background daemon, PID at ~/.hermes/webui.pid
./ctl.sh status # PID, uptime, bound host/port, log path, /health
./ctl.sh logs --lines 100 # tail ~/.hermes/webui.log
./ctl.sh restart
./ctl.sh stopExpose it beyond localhost
Bind to all interfaces with an inline override when you intend to reach it over a tunnel or private network. The project's recommended access path for a remote host is an SSH tunnel.
HERMES_WEBUI_HOST=0.0.0.0 ./ctl.sh startFinish provider setup
If provider configuration is still incomplete, the onboarding wizard points you at `hermes model` rather than duplicating the full CLI setup in the browser.
hermes modelCommands and code are distilled from the project's own documentation — always check the official repo for the latest.
When to use it
- Reach a server-resident Hermes agent from a laptop or phone browser instead of SSHing into a terminal
- Browse and preview the agent's workspace files next to the conversation that produced them
- Watch context usage while composing, and switch model or profile mid-session without restarting
- Run the UI as a managed daemon on a homelab box, with logs and health checks via ctl.sh
How Hermes Web UI compares
Hermes Web UI alongside other open-source chat uis tools AI/TLDR tracks, ranked by GitHub stars.
| Tool | Stars | What it does |
|---|---|---|
| Open WebUI | ★ 153k | A self-hosted web interface for chatting with local and API-based LLMs (Ollama, OpenAI-compatible) that adds RAG, web search, image generation, and multi-user access. |
| Lobe Chat | ★ 82.7k | An open-source chat UI with a plugin and agent marketplace, multi-model support, voice, vision, and one-click self-hosting. |
| AnythingLLM | ★ 66.2k | A desktop and self-hosted chat app focused on document Q&A and agents, letting you build private RAG workspaces over your own files and data sources. |
| Cherry Studio | ★ 52k | A cross-platform desktop chat client that connects to many cloud and local model providers and ships with hundreds of preset assistants and MCP support. |
| LibreChat | ★ 44.4k | A self-hostable ChatGPT-style chat app that unifies many AI providers and adds agents, MCP support, artifacts, a code interpreter, and multi-user authentication. |
| Chatbox | ★ 41.8k | A desktop and web chat client for ChatGPT, Claude, Gemini, Ollama, and other models, with local message storage and multi-provider switching. |
| Buzz | ★ 33.7k | A self-hostable team workspace built on a Nostr relay where AI agents join channels as members with their own keys, and messages, patches, workflow runs and approvals are all signed events in one log. |
| Hermes Web UI | ★ 18.5k | Self-hosted browser front-end for Hermes Agent, with near parity to its CLI |