hermes-webui README

The project's README from github.com/nesquena/hermes-webui. As one markdown file: README.md.

Hermes Web UI

Hermes Agent is a sophisticated autonomous agent that lives on your server, accessed via a terminal or messaging apps, that remembers what it learns and gets more capable the longer it runs.

Hermes WebUI is a lightweight, dark-themed web app interface in your browser for Hermes Agent. Full parity with the CLI experience - everything you can do from a terminal, you can do from this UI. No build step, no framework, no bundler. Just Python and vanilla JS.

Layout: three-panel. Left sidebar for sessions and navigation, center for chat, right for workspace file browsing. Model, profile, and workspace controls live in the composer footer — always visible while composing. A circular context ring shows token usage at a glance. All settings and session tools are in the Hermes Control Center (launcher at the sidebar bottom).

Setup Hermes so you can access it natively on every device:

image
Light mode with full profile support
Light mode with full profile support
Customize your settings, configure a password
Customize your settings, configure a password
Workspace file browser with inline preview
Workspace file browser with inline preview
Session projects, tags, and tool call cards
Session projects, tags, and tool call cards

This gives you nearly 1:1 parity with Hermes CLI from a convenient web UI which you can access securely through an SSH tunnel from your Hermes setup. Single command to start this up, and a single command to SSH tunnel for access on your computer. Every single part of the web UI uses your existing Hermes agent and existing models, without requiring any additional setup.


Contents

image


Why Hermes

Most AI tools reset every session. They don't know who you are, what you worked on, or what conventions your project follows. You re-explain yourself every time.

Hermes retains context across sessions, runs scheduled jobs while you're offline, and gets smarter about your environment the longer it runs. It uses your existing Hermes agent setup, your existing models, and requires no additional configuration to start.

What makes it different from other agentic tools:

vs. the field (landscape is actively shifting — see docs/why-hermes.md for the full breakdown):

OpenClaw Claude Code Codex CLI OpenCode Hermes
Persistent memory (auto) Yes Partial† Partial Partial Yes
Scheduled jobs (self-hosted) Yes No‡ No No Yes
Messaging app access Yes (15+ platforms) Partial (Telegram/Discord preview) No No Yes (10+)
Web UI (self-hosted) Dashboard only No No Yes Yes
Self-improving skills Partial No No No Yes
Python / ML ecosystem No (Node.js) No No No Yes
Provider-agnostic Yes No (Claude only) Yes Yes Yes
Open source Yes (MIT) No Yes Yes Yes

† Claude Code has CLAUDE.md / MEMORY.md project context and rolling auto-memory, but not full automatic cross-session recall
‡ Claude Code has cloud-managed scheduling (Anthropic infrastructure) and session-scoped /loop; no self-hosted cron

The closest competitor is OpenClaw — both are always-on, self-hosted, open-source agents with memory, cron, and messaging. The key differences: Hermes writes and saves its own skills automatically as a core behavior (OpenClaw's skill system centers on a community marketplace); Hermes is more stable across updates (OpenClaw has documented release regressions and ClawHub has had security incidents involving malicious skills); and Hermes runs natively in the Python ecosystem. See docs/why-hermes.md for the full side-by-side.


Quick start

Run the repo bootstrap:

git clone https://github.com/nesquena/hermes-webui.git hermes-webui
cd hermes-webui
python3 bootstrap.py

Or keep using the shell launcher:

./start.sh

For self-hosted VM or homelab installs, ctl.sh wraps the common daemon lifecycle commands without requiring fuser or pkill:

./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 stop

ctl.sh start runs the bootstrap in foreground/no-browser mode behind the daemon wrapper, writes logs to ~/.hermes/webui.log, and respects .env plus inline overrides such as HERMES_WEBUI_HOST=0.0.0.0 ./ctl.sh start.

Stopping the server. Each launch method has its own stop path because only ctl.sh start writes a PID file (~/.hermes/webui.pid):

Launch method How to stop
python3 bootstrap.py Ctrl-C in the terminal (runs in the foreground)
./ctl.sh start ./ctl.sh stop (sends SIGTERM, waits, then SIGKILL)
Detached bootstrap.py (no --foreground) or ./start.sh Find the PID via lsof -i :8787 (or ss -tlnp) and kill it

./ctl.sh stop cannot stop a server launched by bootstrap.py or start.sh directly — it only manages processes it started itself.

How chat runs by default. WebUI runs the Hermes agent in-process, reading your HERMES_HOME config directly. It does not connect to an external Hermes/agent OpenAI-compatible API server to run chat. HERMES_API_URL is only read by the Tasks/cron health probe and does not route chat.

Two options if you run an external endpoint:

  1. Use its models as a chat provider (supported today): add it in Settings → Providers as a custom OpenAI-compatible provider with base_url = http://127.0.0.1:8642/v1 and your bearer token.
  2. Route chat through a Hermes Gateway API server (supported today via HERMES_WEBUI_CHAT_BACKEND=gateway): see docs/advanced-chat-setup.md. Full agent-loop delegation is not yet shipped; tracked in #1925.

Advanced: dynamic recall prefill & Gateway-backed chat

Two optional, self-hosted-deployment features — attaching dynamic session-recall prefill to browser turns (Joplin/Obsidian/Notion/llm-wiki routers), and routing browser chat through a running Hermes Gateway — are documented in docs/advanced-chat-setup.md. Most users need neither.

The bootstrap will:

  1. Detect Hermes Agent and, if missing, attempt the official installer (curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash).
  2. Find or create a Python environment with the WebUI dependencies.
  3. Start the web server and wait for /health.
  4. Open the browser unless you pass --no-browser.
  5. Drop you into a first-run onboarding wizard inside the WebUI.

Native Windows is not supported for this bootstrap yet. Use Linux, macOS, or WSL2. For Windows / WSL auto-start at login, see docs/wsl-autostart.md.

A community-maintained native Windows setup is documented at @markwang2658/hermes-windows-native-guide (companion setup repo: @markwang2658/hermes-windows-native). Notes from the community report in #1952:

If provider setup is still incomplete after install, the onboarding wizard will point you to finish it with hermes model instead of trying to replicate the full CLI setup in-browser. For a step-by-step walkthrough of the wizard, provider choices, local model server Base URLs, and safe re-runs, see docs/onboarding.md. If an AI assistant is helping with install, reinstall, bootstrap, provider setup, or first-run support, have it read docs/onboarding-agent-checklist.md before running commands or inspecting logs.


Features

Chat and agent

Sessions

Workspace file browser

Voice input

Profiles

Authentication and security

Themes

Settings and configuration

Slash commands

Panels

hermes-webui (nesquena/hermes-webui)

chat
Searching Database…

What is this?Hermes WebUI is a lightweight, dark-themed web interface for Hermes Agent, a self-hosted autonomous agent that remembers across sessions. It gives you full CLI parity in the browser, on your computer or phone.
Is this a front-end for my existing Hermes Agent, or a separate agent of its own?It is a front-end, not a separate agent: the WebUI runs your Hermes agent in-process with your existing config and models. The screen is three panels — sessions sidebar, chat, and a workspace file browser.
How do I get it running?Clone the repo and run python3 bootstrap.py (or ./start.sh): it detects or installs Hermes Agent, sets up Python, starts the server, and drops you into a first-run onboarding wizard. Docker and Nix options exist too.
Do I need anything besides Python to run it?You need Hermes Agent itself — the bootstrap installs it if missing — plus Python. There is no build step, framework, or bundler, and models run on the provider keys you already have, so no new accounts.
Does it run natively on Windows?Not via the official bootstrap — it supports Linux, macOS, or WSL2. A community-maintained native Windows setup exists; it is lighter (~330 MB vs ~1 GB under WSL2) but has some path and tool quirks.
Can I use it from my phone, not just my laptop?Yes — the usual route is a one-command SSH tunnel to the machine running the agent, and the docs also cover remote access via Tailscale and phone setups.
Where do my conversations and the agent's memory live?Everything stays self-hosted: conversations, memory, and workspace files live on your own server and hardware, not in someone else's cloud. You reach it over your own tunnel.
What does the chat show while the agent is working?Each tool call becomes an expandable card with the tool name, args, and a result snippet; you also get subagent delegation cards, inline Mermaid diagrams, collapsible thinking blocks, and an approval card before dangerous shell commands.
Which model providers does it support?Any provider your Hermes setup supports: OpenAI, Anthropic, Google, DeepSeek, Nous Portal, OpenRouter, MiniMax, Xiaomi MiMo, and Z.AI, with a model dropdown built from your configured keys.
What can the underlying Hermes agent do that a plain chatbot can't?It keeps persistent memory across sessions, runs scheduled cron jobs while you are offline, reaches 10+ messaging platforms, and writes its own reusable skills from experience instead of relying on a plugin marketplace.
Can I share or export a conversation?Yes — make a public read-only share link from the Control Center (a sanitized snapshot, no workspace or profile), or export a session as a Markdown transcript or full JSON.
Creator
nesquena
Size
245.8 MB
Stars
19K
Age
6mo
Commits · 90 Days