explainx / blog
Comprehensive guide to Hermes WebUI by Nous Research - a self-hosted web interface for autonomous AI agents with persistent memory, scheduled jobs, 10+ messaging platforms, and self-improving skills. Learn setup, features, and how it compares to Claude Code and OpenClaw.

Jun 24, 2026
Hermes Agent by Nous Research has 188k GitHub stars and runs 271 billion tokens monthly on OpenRouter. Here are the 10 most powerful real-world workflows people are running on it in 2026 — from self-scheduling cron jobs to multi-agent DevOps pipelines, deep research, and self-improving marketing briefs.
May 9, 2026
Launched February 25, 2026, Hermes Agent is now #1 on OpenRouter's token rankings across all categories—personal, CLI, and beyond. With 140K GitHub stars, MIT license, 40+ tools, persistent memory, and a skills system that learns from experience, open-source is proving dominant in the agent stack.
Apr 22, 2026
A readable blog-style take on Hermes: what problem it solves, how the pieces fit together (CLI, gateway, memory, skills, cron), how builders route frontier vs budget models, and what a typical remote setup looks like—with links to official sources.
TL;DR: Hermes WebUI is a self-hosted web interface for Hermes Agent (Nous Research) that brings autonomous AI with persistent memory, self-improving skills, and 24/7 scheduled jobs to your browser. Unlike Claude Code (coding-focused, no self-hosting) or OpenClaw (marketplace skills, less stable), Hermes learns your environment once and gets more capable over time. 140,000 GitHub stars in 3 months. Setup: one command (./start.sh). Zero build tools, zero cloud dependencies.
Before diving into the WebUI, understand what Hermes Agent is.
Most AI tools reset every session:
You explain yourself repeatedly. Every new chat starts from zero.
Hermes Agent by Nous Research is a self-hosted autonomous AI agent that:
Released February 2026. 140,000 GitHub stars in under 3 months, making it one of the fastest-growing open-source AI projects.
Hermes WebUI is the official web interface for Hermes Agent.
No build step. No framework. No bundler.
| Feature | Description |
|---|---|
| Full CLI Parity | Everything you can do in terminal, you can do in browser |
| Persistent Memory | Cross-session context via USER.md, MEMORY.md, agent notes |
| Self-Improving Skills | Agent writes and saves reusable procedures automatically |
| Scheduled Jobs | Cron tasks with completion alerts and history |
| Workspace Browser | Full file tree with preview, edit, create, delete |
| 10+ Messaging Platforms | Telegram, Discord, Slack, Teams, Signal, Matrix, IRC, email |
| Voice Input | Web Speech API for hands-free interaction |
| Multiple Profiles | Switch between agent configurations without restart |
| Session Projects | Organize conversations with tags and colors |
| Zero Cloud | Self-hosted, no external dependencies |
Source: Hermes Agent Official
Hermes WebUI completes the self-hosted AI stack:
┌─────────────────────────────────────┐
│ Your Infrastructure │
│ │
│ ┌─────────────────────────────┐ │
│ │ Hermes WebUI (Browser) │ │
│ └────────────┬────────────────┘ │
│ │ │
│ ┌────────────▼────────────────┐ │
│ │ Hermes Agent (Python) │ │
│ │ - Memory │ │
│ │ - Skills │ │
│ │ - Cron │ │
│ └────────────┬────────────────┘ │
│ │ │
│ ┌────────────▼────────────────┐ │
│ │ LLM Provider │ │
│ │ - OpenAI / Anthropic │ │
│ │ - Ollama / LMStudio │ │
│ │ - OpenRouter / DeepSeek │ │
│ └─────────────────────────────┘ │
└─────────────────────────────────────┘
No external services required. All state lives on your machine.
| Tool | Self-Hosted | Memory | Skills | Cron |
|---|---|---|---|---|
| Hermes WebUI | ✅ Yes | ✅ Persistent | ✅ Self-improving | ✅ 24/7 |
| Claude Code | ❌ No | 🟡 Partial† | ❌ No | 🟡 Cloud-managed |
| ChatGPT | ❌ No | 🟡 Memory feature | ❌ No | ❌ No |
| Cursor | ❌ No | ❌ No | ❌ No | ❌ No |
† Claude Code has CLAUDE.md / MEMORY.md project context and rolling auto-memory, but not full automatic cross-session recall
Claude Code (Anthropic):
Hermes Agent:
When to use which:
Sources: Utilo Comparison, MindStudio Analysis
OpenClaw:
Hermes Agent:
When to use which:
Source: Medium PM Comparison
They're not direct competitors - they live at different layers:
┌──────────────────────────────────┐
│ Claude Code │ Coding layer
│ (IDE, GitHub Actions) │
└──────────────────────────────────┘
↕ Can orchestrate ↕
┌──────────────────────────────────┐
│ Hermes Agent │ Intelligence layer
│ (Memory, Skills, Learning) │
└──────────────────────────────────┘
↕ Can orchestrate ↕
┌──────────────────────────────────┐
│ OpenClaw │ Automation layer
│ (Life automation, Messaging) │
└──────────────────────────────────┘
Pro workflow: Use Hermes as your main agent, which spawns Claude Code for heavy coding and returns results to Hermes memory.
Sources: Brilworks Comparison, AI.cc Guide
The defining feature: Hermes never forgets.
How it works:
Example workflow:
You: "Set up a new Next.js project with TypeScript, Tailwind, and our auth patterns"
[First time]
Hermes: *asks questions, sets up project, documents process*
Hermes: *writes skill "create-nextjs-project" for reuse*
[Six months later, new project]
You: "Set up another Next.js project"
Hermes: *immediately applies saved skill, uses remembered auth patterns*
No re-explanation needed. Hermes learned once and remembers forever.
Skills are code. Hermes writes executable Python functions from experience.
The Learning Loop:
Example skill (auto-generated):
# File: ~/.hermes/skills/database_backup.py
def backup_database(db_name: str, output_dir: str = "/backups"):
"""
Create timestamped backup of specified database.
Learned from: Session 2024-03-15 backup workflow
"""
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"{db_name}_{timestamp}.sql"
run_command(f"pg_dump {db_name} > {output_dir}/{filename}")
run_command(f"gzip {output_dir}/{filename}")
return f"Backup created: {filename}.gz"
No marketplace browsing. No plugin installation. Hermes learns from doing.
Hermes runs 24/7 even when you're offline.
Use cases:
| Schedule | Task | Notification |
|---|---|---|
| Every 6 hours | Check CI/CD status, report failures | Telegram |
| Daily 9am | Summarize overnight GitHub activity | |
| Weekly Monday | Generate team status report | Slack |
| Monthly 1st | Analyze AWS costs, suggest optimizations | Discord |
From the WebUI:
Delivery channels: Telegram, Discord, Slack, Teams, Signal, email, or write to file.
Full file tree management from the browser:
Features:
Chat integration:
You: "Check the API routes"
Hermes: "Found 12 API routes in workspace://api/"
[Click link → opens file in preview panel]
Web Speech API integration:
Supported browsers: Chrome, Edge, Safari
Profiles = separate agent configurations:
Use cases:
| Profile | Purpose | Model |
|---|---|---|
| work | Work tasks, company workspace | Claude Opus |
| personal | Personal automation, learning | GPT-4 |
| local | Experiments, testing | Ollama Llama 3 |
| research | Paper reading, summarization | Gemini Pro |
Switch instantly from dropdown in composer - no server restart.
Organize conversations:
Search works across titles and message content.
Backend (Python):
server.py # HTTP routing + auth
api/
auth.py # Password + passkeys (WebAuthn)
config.py # Auto-discovery, model detection
routes.py # All GET/POST handlers
streaming.py # SSE engine, agent execution
workspace.py # File operations
models.py # Session CRUD + SQLite bridge
profiles.py # Profile management
Frontend (Vanilla JS):
index.html # HTML template
style.css # All CSS (themes, mobile, animations)
ui.js # DOM helpers, markdown rendering
workspace.js # File browser, git badge
sessions.js # Session list, search, groups
messages.js # Chat, SSE streaming
panels.js # Cron, skills, memory, settings
commands.js # Slash command autocomplete
boot.js # Init, theme loading, mobile nav
Zero dependencies:
Updates: git pull and restart. No rebuild.
~/.hermes/
├── hermes-agent/ # Agent source
│ ├── config.yaml # API keys, providers
│ ├── skills/ # Auto-generated skills
│ ├── MEMORY.md # Long-term memory
│ └── USER.md # User profile
└── webui/ # WebUI state
├── sessions/ # Chat sessions (JSON)
├── workspaces/ # Workspace definitions
├── settings.json # UI preferences
├── projects.json # Session projects
└── attachments/ # Uploaded files
Portable: Copy ~/.hermes to another machine and everything works.
† Community-maintained native Windows setup exists - see docs
1. Clone and bootstrap:
git clone https://github.com/nesquena/hermes-webui.git
cd hermes-webui
python3 bootstrap.py
The bootstrap will:
/health2. Complete onboarding:
The wizard guides you through:
3. Start chatting:
You: "What can you do?"
Hermes: *explains capabilities, checks for saved skills*
Done. No build step, no additional configuration.
./start.sh # Start with auto-detection
./start.sh 9000 # Custom port
# Daemon mode (background)
./ctl.sh start # Start as daemon
./ctl.sh status # Check status
./ctl.sh logs # View logs
./ctl.sh restart # Restart
./ctl.sh stop # Stop
Single container (simplest):
git clone https://github.com/nesquena/hermes-webui
cd hermes-webui
cp .env.docker.example .env
# Set password (required for network access)
echo "HERMES_WEBUI_PASSWORD=your-strong-password" >> .env
docker compose up -d
Open http://localhost:8787
Images: Pre-built for amd64 + arm64 at ghcr.io/nesquena/hermes-webui:latest
Multi-container (agent + WebUI separated):
docker compose -f docker-compose.two-container.yml up -d
Full Docker guide with troubleshooting: See project docs/docker.md
Core settings:
| Variable | Default | Description |
|---|---|---|
HERMES_WEBUI_HOST | 127.0.0.1 | Bind address (use 0.0.0.0 for network) |
HERMES_WEBUI_PORT | 8787 | Port |
HERMES_WEBUI_PASSWORD | (unset) | Enable auth (required for remote) |
HERMES_WEBUI_AGENT_DIR | Auto-detected | Path to hermes-agent |
HERMES_WEBUI_STATE_DIR | ~/.hermes/webui | Where sessions/state are stored |
HERMES_WEBUI_DEFAULT_WORKSPACE | ~/workspace | Default workspace |
HERMES_HOME | ~/.hermes | Base Hermes directory |
Example (network access with auth):
export HERMES_WEBUI_HOST=0.0.0.0
export HERMES_WEBUI_PASSWORD=strong-password-here
./start.sh
SSH Tunnel (recommended):
# On server
./start.sh
# On local machine
ssh -N -L 8787:127.0.0.1:8787 user@server
# Open http://localhost:8787
Tailscale (for mobile):
HERMES_WEBUI_HOST=0.0.0.0 + HERMES_WEBUI_PASSWORDhttp://<server-tailscale-ip>:8787 from phoneFull guide with ARM64-Android field report: docs/remote-access.md
Your terminal sessions appear in the WebUI.
hermes-agent SQLite store show with gold "cli" badgeNo manual export/import. Automatic bridge.
Per-conversation metrics:
Enable: Settings → Preferences → "Show token usage" or /usage command
Two axes:
Switch: Settings → Appearance (instant live preview) or /theme <name>
Persists across reloads.
Password auth (optional):
HERMES_WEBUI_PASSWORD env or SettingsPasskeys (optional):
Type / in composer for autocomplete:
| Command | Effect |
|---|---|
/help | Show help |
/clear | Clear current session |
/compress [topic] | Compress session to focus on topic |
/model <name> | Switch model |
/workspace <name> | Switch workspace |
/new | New session |
/usage | Toggle token display |
/theme <theme-or-skin> | Change theme/skin |
Arrow keys navigate, Tab/Enter select, Esc closes.
Full mobile support:
Works on phones: iOS Safari, Chrome Android, Firefox Mobile
1. Project Memory
First interaction:
You: "This project uses Prisma with PostgreSQL. Auth is Clerk.
Payments via Stripe. Always use TypeScript strict mode."
Hermes: *saves to MEMORY.md*
Two weeks later:
You: "Add a new subscription tier"
Hermes: *automatically applies Prisma, Clerk, Stripe patterns*
*no re-explanation needed*
2. CI/CD Monitoring
# Scheduled job: every 30 min
name: CI Status Check
schedule: "*/30 * * * *"
action: |
Check GitHub Actions status for main branch.
If any failures in last 30min, analyze logs and report.
notify: Telegram
3. Code Review Automation
# Scheduled job: hourly
name: PR Review
schedule: "0 * * * *"
action: |
List open PRs requiring review.
For each: summarize changes, check tests, suggest improvements.
notify: Slack #engineering
4. Daily Standup Reports
# Scheduled job: daily 9am
name: Standup Summary
schedule: "0 9 * * 1-5"
action: |
Summarize:
- GitHub commits since yesterday
- JIRA tickets moved to Done
- Slack discussions needing follow-up
notify: Email [email protected]
5. On-Call Rotation
# Scheduled job: every 6 hours
name: On-Call Check
schedule: "0 */6 * * *"
action: |
Check PagerDuty incidents in last 6h.
Summarize severity, response time, status.
Flag any incidents >2h unresolved.
notify: Discord #oncall
6. News Digest
# Scheduled job: daily 7am
name: Morning News
schedule: "0 7 * * *"
action: |
Summarize top HN posts, filter for AI/ML topics.
Check /r/MachineLearning for research papers.
Send 5-bullet digest.
notify: Telegram
7. Finance Tracking
# Scheduled job: monthly 1st
name: Finance Report
schedule: "0 0 1 * *"
action: |
Connect to bank CSV exports.
Categorize transactions.
Generate spending breakdown by category.
Compare to budget, flag overages.
notify: Email
v0.51.x releases (May-June 2026):
Community contributions:
docs/What Hermes is NOT:
When NOT to use Hermes:
When TO use Hermes:
Before you install:
Installation:
git clone https://github.com/nesquena/hermes-webuipython3 bootstrap.pyFirst tasks:
Optional:
From project ROADMAP.md:
Hermes aims to be:
NOT aiming for:
Source: Hermes Atlas State Report
| Feature | Hermes | Claude Code | OpenClaw | Cursor | ChatGPT |
|---|---|---|---|---|---|
| Persistent Memory (Auto) | ✅ Yes | 🟡 Partial | 🟡 Partial | ❌ No | 🟡 Memory feature |
| Self-Improving Skills | ✅ Auto-writes | ❌ No | 🟡 Marketplace | ❌ No | ❌ No |
| Scheduled Jobs (24/7) | ✅ Yes | 🟡 Cloud-managed | ✅ Yes | ❌ No | ❌ No |
| Messaging Platforms | ✅ 10+ | 🟡 2 preview | ✅ 15+ | ❌ No | ❌ No |
| Self-Hosted | ✅ Yes | ❌ No | ✅ Yes | ❌ No | ❌ No |
| Open Source | ✅ MIT | ❌ Closed | ✅ MIT | ❌ Closed | ❌ Closed |
| Web UI | ✅ Full-featured | ❌ No | 🟡 Dashboard only | ✅ Yes | ✅ Yes |
| Provider-Agnostic | ✅ Yes | ❌ Claude only | ✅ Yes | ✅ Yes | ❌ OpenAI only |
| Python/ML Ecosystem | ✅ Native | ❌ No | ❌ Node.js | 🟡 Via extensions | ❌ API only |
| IDE Integration | 🟡 Via orchestration | ✅ Deep | ❌ No | ✅ Deep | ❌ No |
| Best for Coding | 🟡 Good | ✅ Excellent | 🟡 Fair | ✅ Excellent | 🟡 Good |
| Learning Curve | Medium | Low | Medium | Low | Very Low |
| Cost (self-host) | $5+/mo VPS | N/A | $5+/mo VPS | N/A |
Sources: MindStudio, Grandlinux Comparison
No web framework needed - Uses Python's http.server with custom routing:
# Simple if/elif dispatch, no decorators
def handle_request(method, path, body):
if path == '/api/chat/send':
return send_message(body)
elif path == '/api/sessions':
return list_sessions()
elif path.startswith('/api/workspace/'):
return workspace_operation(path, body)
# ...
Why no Flask/FastAPI for routes:
SSE Streaming:
# Server-Sent Events for live chat
def stream_response(session_id):
yield f"data: {json.dumps({'type': 'start'})}\n\n"
for token in agent.generate():
yield f"data: {json.dumps({'type': 'token', 'content': token})}\n\n"
yield f"data: {json.dumps({'type': 'done'})}\n\n"
No framework - Direct DOM manipulation:
// No React, just clean vanilla JS
function renderMessage(msg) {
const div = document.createElement('div');
div.className = msg.role === 'user' ? 'message-user' : 'message-assistant';
div.innerHTML = renderMarkdown(msg.content);
chatContainer.appendChild(div);
scrollToBottom();
}
// SSE handling
const eventSource = new EventSource('/api/chat/stream');
eventSource.onmessage = (e) => {
const data = JSON.parse(e.data);
if (data.type === 'token') {
appendToken(data.content);
}
};
CSS Variables for theming:
/* Theme system via CSS custom properties */
:root {
--bg-primary: #0a0a0a;
--text-primary: #e4e4e7;
--accent: #3b82f6;
}
[data-skin="ares"] {
--accent: #ef4444;
--bg-secondary: #1c0f0f;
}
Why no Tailwind/Bootstrap:
Server-side state (JSON files):
~/.hermes/webui/
├── sessions/
│ ├── sess_abc123.json
│ └── sess_def456.json
├── settings.json
├── projects.json
└── attachments/
No database - Filesystem is the database:
Session format:
{
"id": "sess_abc123",
"title": "Project Setup",
"created": "2026-06-01T10:30:00Z",
"profile": "work",
"workspace": "~/projects/myapp",
"messages": [
{"role": "user", "content": "Set up Next.js project"},
{"role": "assistant", "content": "I'll help...", "tool_calls": [...]}
]
}
Yes. Hermes supports:
ollama serve + set base URL in onboardingNo OpenAI/Anthropic account required.
No. Zero telemetry, zero tracking, zero external calls except to your chosen LLM provider.
All data stays on your machine. Open source - audit the code.
Yes, with:
HERMES_WEBUI_PASSWORDDo NOT expose without auth - anyone can read your conversations and execute code.
Infrastructure:
API costs (pay-per-use):
Total: $5-80/month depending on usage and provider choice.
Yes. MIT license allows commercial use.
Enterprise considerations:
Support: Community support via GitHub. No official enterprise support yet.
Current state (v0.51.x):
git pull + restart (usually)Production readiness: Many users run in production. Test updates in staging first.
Hermes WebUI brings autonomous AI agents to your browser without sacrificing self-hosting, privacy, or learning capabilities.
It's the right choice when:
✅ You need AI that remembers your environment ✅ You want scheduled background jobs ✅ You require self-hosted deployment ✅ You prefer open source over closed tools ✅ You value AI that improves over time
It's NOT the right choice when:
❌ You only need coding help (use Claude Code) ❌ You want simplest setup (use ChatGPT) ❌ You can't self-host ❌ You need WhatsApp specifically (use OpenClaw)
The vision: An AI that learns once and remembers forever. That gets more capable with every task. That runs on your infrastructure, on your terms.
Get started: github.com/nesquena/hermes-webui
Official:
Analysis & Comparisons:
Guides:
Community:
This comprehensive guide covers Hermes WebUI as of June 2026. Features, setup, and ecosystem details may change. Visit hermes-agent.org for official updates.
| N/A |
| Cost (cloud) | $0 platform | $20-100/mo | $0 platform | $20+/mo | $20/mo |