nesquena/hermes-webui
⭐ 6,485 · Python · GitHub Repo
Hermes WebUI: The best way to use Hermes Agent from the web or from your phone!
agent ai-agents hermes hermes-agent nous-research
1-Sentence Summary
Self-hosted AI agent web UI with persistent memory, offline scheduling, and full CLI parity.
🔥 Key Capabilities & USP
- Persistent Memory & Self-Improving Skills — Solves the fundamental pain point of AI agents forgetting everything between sessions. Automatically builds a user profile, retains agent notes, and writes reusable procedures from experience. No marketplace or plugin ecosystem required—the agent improves itself over time.
- Self-Hosted Scheduling — Run cron jobs that execute even when your browser is closed. Results deliver to Telegram, Discord, Slack, Signal, email, and 10+ other platforms. This turns the agent from a chat companion into a truly autonomous background worker.
- Provider-Agnostic Architecture — Not locked into a single LLM provider. Supports OpenAI, Anthropic, Google, DeepSeek, OpenRouter, and more. Can even delegate heavy coding tasks to specialized agents like Claude Code or Codex, acting as an orchestration layer.
- Three-Panel Web UI with Composer — Left sidebar for session management, center chat panel, and right workspace file browser. The composer footer includes model/profile/workspace controls and a circular context ring showing real-time token usage. No build step, no framework, no bundler—just Python and vanilla JavaScript.
- Docker & Multi-Container Deployments — Pre-built images for amd64 and arm64. Choose from single-container, two-container (agent + WebUI), or three-container (agent + dashboard + WebUI) setups. SSH tunnel support for secure remote access.
USP: Hermes WebUI delivers 1:1 parity with the Hermes CLI experience through a lightweight, dark-themed web interface that requires zero configuration beyond running a bootstrap script or pulling a Docker image.

Technical Architecture
| Component | Detail |
|---|---|
| Language | Python (backend), vanilla JavaScript (frontend) |
| Build System | None required—no bundlers, no frameworks, no build step |
| Deployment | Bootstrap script (bootstrap.py), Docker (GHCR-published images), or manual start.sh |
| Storage | Bind-mount or named volumes for persistent state at ~/.hermes |
| Process Management | ctl.sh script for daemon control (start, stop, status, logs) |
| Networking | SSH tunnel support; password protection required when exposing outside localhost |
| Container Configs | Multi-container compose files for agent, dashboard, and WebUI separation |
| Architecture | Three-panel layout (sessions, chat, workspace) with composer footer and Hermes Control Center launcher |
Quick Start Guide
Bootstrap (Linux, macOS, or WSL2):
git clone https://github.com/nesquena/hermes-webui.git hermes-webui
cd hermes-webui
python3 bootstrap.pyStart the server:
./start.shDaemon management with ctl.sh:
./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 stopDocker deployment:
git clone https://github.com/nesquena/hermes-webui
cd hermes-webui
cp .env.docker.example .env
# Edit .env if your host UID isn't 1000 (e.g. macOS where UIDs start at 501)
docker compose up -d
# Open http://localhost:8787Add password protection:
echo "HERMES_WEBUI_PASSWORD=change-me-to-something-strong" >> .env
docker compose up -d --force-recreateManual Docker run:
docker pull ghcr.io/nesquena/hermes-webui:latest
docker run -d \
-e WANTED_UID=$(id -u) -e WANTED_GID=$(id -g) \
-v ~/.hermes:/home/hermeswebui/.hermes \
-e HERMES_WEBUI_STATE_DIR=/home/hermeswebui/.hermes/webui \
-v ~/workspace:/workspace \
-p 127.0.0.1:8787:8787 \
ghcr.io/nesquena/hermes-webui:latestPros, Cons & Use Cases
Pros
- Full CLI parity — Every Hermes Agent feature is available through the web UI, no feature gaps
- Zero model setup — Provider-agnostic; bring your own API keys for OpenAI, Anthropic, Google, etc.
- Self-hosted privacy — All data stays on your infrastructure
- Persistent memory — Agent remembers you, your preferences, and your procedures across sessions
- Offline scheduling — Cron jobs run even when you're not watching
- 10+ messaging platforms — Results deliver to Telegram, Discord, Slack, Signal, email, and more
- No build step — Python + vanilla JavaScript means instant startup
Cons
- No native Windows bootstrap — Requires Linux, macOS, or WSL2 for the bootstrap process
- Two-container limitation — Tools run in the WebUI container, not the agent container, which can cause path or permission issues
- Password required for external access — Must set
HERMES_WEBUI_PASSWORDbefore exposing the port outside localhost - Vanilla JS frontend — No React/Vue means less ecosystem support for UI customization
Who should NOT use this?
- Windows-only users who cannot or will not use WSL2
- Users who want a managed, cloud-hosted agent with zero infrastructure responsibility
- Teams needing multi-user authentication and role-based access control — This is a single-user tool
- Anyone expecting a plugin ecosystem or marketplace — Skills are self-written, not downloaded
Ideal Use Cases
- Solo developers who want a persistent, always-on AI coding assistant with workspace access
- Power users who need scheduled tasks (scraping, monitoring, report generation) delivered to their phone
- Privacy-conscious users who want full control over their agent's data and model choices
- Hermes CLI users who want mobile access or a more visual interface without losing functionality
- Self-hosters running homelab environments who want to orchestrate multiple AI agents
Community & Activity
Hermes WebUI has 6,485 stars on GitHub, signaling strong interest in the self-hosted AI agent space. The project is actively maintained with the latest update on May 10, 2026, showing ongoing development momentum. This is a project that's clearly resonating with the developer community—the combination of persistent memory, offline scheduling, and provider-agnostic design hits a sweet spot for anyone who's felt the frustration of AI agents that forget everything between conversations. The active maintenance cadence suggests this isn't a side project that's been abandoned; it's a tool that's being refined and improved in real-time.