← Blog
explainx / blog

Hermes WebUI: The Self-Hosted AI Agent Interface That Remembers Everything (2026 Complete Guide)

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.

16 min readYash Thakker
Hermes AgentAI AgentsSelf-Hosted AINous ResearchOpen Source AI

MDX restores the committed source plus an HTML comment attribution; plain text bundles the rendered markdown body with the explainx.ai attribution footer.

Hermes WebUI: The Self-Hosted AI Agent Interface That Remembers Everything (2026 Complete Guide)

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.


What is Hermes Agent?

Before diving into the WebUI, understand what Hermes Agent is.

The Problem with Most AI Tools

Most AI tools reset every session:

  • No memory of previous conversations
  • No learning from past tasks
  • Manual repetition of context every time
  • Stateless - they never improve

You explain yourself repeatedly. Every new chat starts from zero.

How Hermes is Different

Hermes Agent by Nous Research is a self-hosted autonomous AI agent that:

  1. Remembers everything - Persistent memory across sessions via USER.md and MEMORY.md
  2. Learns from experience - Automatically writes reusable skills after completing tasks
  3. Runs 24/7 - Scheduled cron jobs that fire while you're offline
  4. Lives on your server - Self-hosted, no cloud lock-in, zero telemetry
  5. Supports 10+ platforms - Terminal, web, Telegram, Discord, Slack, Teams, Signal, email

Released February 2026. 140,000 GitHub stars in under 3 months, making it one of the fastest-growing open-source AI projects.


What is Hermes WebUI?

Hermes WebUI is the official web interface for Hermes Agent.

Core Design Philosophy

No build step. No framework. No bundler.

  • Backend: Pure Python standard library + FastAPI
  • Frontend: Vanilla JavaScript + CSS
  • Dependencies: Zero npm packages, zero webpack, zero compilation

Key Features at a Glance

FeatureDescription
Full CLI ParityEverything you can do in terminal, you can do in browser
Persistent MemoryCross-session context via USER.md, MEMORY.md, agent notes
Self-Improving SkillsAgent writes and saves reusable procedures automatically
Scheduled JobsCron tasks with completion alerts and history
Workspace BrowserFull file tree with preview, edit, create, delete
10+ Messaging PlatformsTelegram, Discord, Slack, Teams, Signal, Matrix, IRC, email
Voice InputWeb Speech API for hands-free interaction
Multiple ProfilesSwitch between agent configurations without restart
Session ProjectsOrganize conversations with tags and colors
Zero CloudSelf-hosted, no external dependencies

Source: Hermes Agent Official


Why Hermes WebUI Exists

The Self-Hosted AI Stack

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.

vs. Cloud-Dependent Tools

ToolSelf-HostedMemorySkillsCron
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


Hermes vs. The Competition

vs. Claude Code

Claude Code (Anthropic):

  • Focus: IDE-integrated coding assistant
  • Strength: Superior code generation, deep IDE integration
  • Limitation: Claude-only, no self-hosting, limited memory, no scheduled jobs
  • Best for: Professional developers working in VS Code/JetBrains

Hermes Agent:

  • Focus: General-purpose autonomous agent with learning
  • Strength: Persistent memory, self-improving skills, runs 24/7
  • Limitation: Coding quality slightly behind specialized tools
  • Best for: Users wanting an AI that learns their environment and improves over time

When to use which:

  • Need best coding quality? → Claude Code
  • Need AI that remembers and learns? → Hermes
  • Need scheduled jobs? → Hermes
  • Need self-hosted? → Hermes

Sources: Utilo Comparison, MindStudio Analysis

vs. OpenClaw

OpenClaw:

  • Skills: Marketplace with 3,200+ community skills
  • Messaging: Strong WhatsApp integration
  • Community: 347,000+ GitHub stars
  • Challenges: Release regressions, ClawHub security incidents
  • Architecture: Node.js-based

Hermes Agent:

  • Skills: Automatically writes its own from experience (self-improving)
  • Messaging: 10+ platforms including Teams, Signal, Matrix
  • Stability: Better across updates, no marketplace dependencies
  • Architecture: Python-native (better ML ecosystem integration)

When to use which:

  • Need WhatsApp integration? → OpenClaw
  • Want largest skill library? → OpenClaw
  • Need stability and self-improvement? → Hermes
  • Need Python/ML ecosystem? → Hermes

Source: Medium PM Comparison

The Layer Model

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


Key Features Deep Dive

1. Persistent Memory

The defining feature: Hermes never forgets.

How it works:

  • USER.md - Your profile, preferences, conventions
  • MEMORY.md - Long-term knowledge and patterns
  • Agent notes - Session-specific context
  • Skills library - Learned procedures

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.

2. Self-Improving Skills

Skills are code. Hermes writes executable Python functions from experience.

The Learning Loop:

  1. You ask Hermes to do something complex
  2. Hermes completes the task
  3. Hermes automatically writes a skill to handle similar tasks
  4. Skill saved to library
  5. Next time, Hermes uses the skill directly

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.

3. Scheduled Jobs (Cron)

Hermes runs 24/7 even when you're offline.

Use cases:

ScheduleTaskNotification
Every 6 hoursCheck CI/CD status, report failuresTelegram
Daily 9amSummarize overnight GitHub activityEmail
Weekly MondayGenerate team status reportSlack
Monthly 1stAnalyze AWS costs, suggest optimizationsDiscord

From the WebUI:

  • View all cron jobs
  • Create new schedules
  • Edit timing and actions
  • Pause/resume jobs
  • View run history
  • Get completion alerts

Delivery channels: Telegram, Discord, Slack, Teams, Signal, email, or write to file.

4. Workspace File Browser

Full file tree management from the browser:

Features:

  • Expand/collapse directory tree
  • Breadcrumb navigation
  • Preview text, code, Markdown, images
  • Syntax highlighting (Prism.js)
  • Edit files inline
  • Create/delete/rename files and folders
  • Git branch detection with dirty file badge
  • Binary file downloads
  • Drag-resizable right panel

Chat integration:

You: "Check the API routes"
Hermes: "Found 12 API routes in workspace://api/"
[Click link → opens file in preview panel]

5. Voice Input

Web Speech API integration:

  • Tap microphone button in composer
  • Speak your message
  • Live transcription appears as you talk
  • Auto-stops after 2s silence
  • Appends to existing text (doesn't replace)

Supported browsers: Chrome, Edge, Safari

6. Multiple Profiles

Profiles = separate agent configurations:

  • Different API keys per profile
  • Separate skill libraries
  • Independent memory
  • Different model preferences
  • Separate cron jobs

Use cases:

ProfilePurposeModel
workWork tasks, company workspaceClaude Opus
personalPersonal automation, learningGPT-4
localExperiments, testingOllama Llama 3
researchPaper reading, summarizationGemini Pro

Switch instantly from dropdown in composer - no server restart.

7. Session Projects & Tags

Organize conversations:

  • Projects - Named groups with colors (e.g., "Product Launch", "Bug Fixes")
  • Tags - Add #tag to titles for filtering (#urgent, #finance, #automation)
  • Pin - Star important sessions to top
  • Archive - Hide without deleting

Search works across titles and message content.


Architecture

No Build Tools, No Framework

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:

  • No React, Vue, Svelte
  • No webpack, Vite, esbuild
  • No Tailwind, Bootstrap
  • No npm install

Updates: git pull and restart. No rebuild.

State Directory Structure

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


Setup Guide

Prerequisites

  • OS: Linux, macOS, or WSL2 (Windows not supported natively yet†)
  • Python: 3.11+
  • Git: For cloning repo
  • LLM Provider: API key for OpenAI, Anthropic, or local model server

† Community-maintained native Windows setup exists - see docs

5-Minute Install

1. Clone and bootstrap:

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

The bootstrap will:

  • Detect Hermes Agent (install if missing)
  • Create Python venv with dependencies
  • Start server and wait for /health
  • Open browser to WebUI
  • Launch first-run onboarding wizard

2. Complete onboarding:

The wizard guides you through:

  • Provider setup (OpenAI, Anthropic, Ollama, etc.)
  • Base URL for local model servers
  • Default model selection
  • Workspace configuration

3. Start chatting:

You: "What can you do?"
Hermes: *explains capabilities, checks for saved skills*

Done. No build step, no additional configuration.

Alternative: Shell Launcher

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

Docker Setup

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


Configuration

Environment Variables

Core settings:

VariableDefaultDescription
HERMES_WEBUI_HOST127.0.0.1Bind address (use 0.0.0.0 for network)
HERMES_WEBUI_PORT8787Port
HERMES_WEBUI_PASSWORD(unset)Enable auth (required for remote)
HERMES_WEBUI_AGENT_DIRAuto-detectedPath to hermes-agent
HERMES_WEBUI_STATE_DIR~/.hermes/webuiWhere sessions/state are stored
HERMES_WEBUI_DEFAULT_WORKSPACE~/workspaceDefault workspace
HERMES_HOME~/.hermesBase Hermes directory

Example (network access with auth):

export HERMES_WEBUI_HOST=0.0.0.0
export HERMES_WEBUI_PASSWORD=strong-password-here
./start.sh

Remote Access

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):

  1. Join server and phone to Tailscale network
  2. Set HERMES_WEBUI_HOST=0.0.0.0 + HERMES_WEBUI_PASSWORD
  3. Browse to http://<server-tailscale-ip>:8787 from phone

Full guide with ARM64-Android field report: docs/remote-access.md


Advanced Features

1. CLI Session Bridge

Your terminal sessions appear in the WebUI.

  • CLI sessions from hermes-agent SQLite store show with gold "cli" badge
  • Click to import with full history
  • Reply normally from WebUI
  • Continues seamlessly

No manual export/import. Automatic bridge.

2. Token Usage & Cost Tracking

Per-conversation metrics:

  • Input tokens
  • Output tokens
  • Estimated cost (model-aware)
  • Context usage bar in composer

Enable: Settings → Preferences → "Show token usage" or /usage command

3. Themes & Skins

Two axes:

  • Theme: System, Dark, Light
  • Skin: 11 options
    • Default
    • Ares
    • Mono
    • Slate
    • Poseidon
    • Sisyphus
    • Charizard
    • Sienna
    • Catppuccin
    • Nous
    • Geist Contrast

Switch: Settings → Appearance (instant live preview) or /theme <name>

Persists across reloads.

4. Authentication

Password auth (optional):

  • Off by default for localhost
  • Required for network access
  • Set via HERMES_WEBUI_PASSWORD env or Settings
  • HMAC-signed HTTP-only cookie (24h TTL)

Passkeys (optional):

  • Register from Settings → System after signing in
  • WebAuthn support (Face ID, Touch ID, security keys)
  • Can remove password and go passkey-only

5. Slash Commands

Type / in composer for autocomplete:

CommandEffect
/helpShow help
/clearClear current session
/compress [topic]Compress session to focus on topic
/model <name>Switch model
/workspace <name>Switch workspace
/newNew session
/usageToggle token display
/theme <theme-or-skin>Change theme/skin

Arrow keys navigate, Tab/Enter select, Esc closes.

6. Mobile Responsive

Full mobile support:

  • Hamburger sidebar (slide-in overlay <640px)
  • Files slide-over from right
  • Touch targets minimum 44px
  • Full-height chat without bottom nav stealing space
  • Desktop layout completely unchanged

Works on phones: iOS Safari, Chrome Android, Firefox Mobile


Use Cases

For Developers

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

For Teams

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

For Personal Automation

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

Community & Ecosystem

GitHub Activity

  • Repository: nesquena/hermes-webui
  • Stars: 10,200+ (WebUI), 140,000+ (Agent)
  • Contributors: 176 on WebUI, growing
  • License: MIT (fully open source)

Recent Milestones

v0.51.x releases (May-June 2026):

  • Autonomous Curator for skill library maintenance
  • 57% faster TUI cold start
  • Native Microsoft Teams integration
  • Passkeys/WebAuthn support
  • Session lineage tracking
  • Four new inference providers

Community contributions:

  • 517 releases since launch
  • 190+ contributors shipped code
  • Docker images for amd64 + arm64
  • Native Windows setup guide (community-maintained)

Getting Help

  • Documentation: Full docs in repo under docs/
  • Issues: GitHub Issues for bugs/features
  • Discussions: GitHub Discussions for questions
  • Discord: Nous Research server (link in repo)

Limitations & Trade-offs

What Hermes is NOT:

  1. Not a coding copilot - Claude Code, Cursor, Codex are better for pure coding
  2. Not a chatbot wrapper - More complex than ChatGPT UI, steeper learning curve
  3. Not cloud-managed - You maintain the server, updates, backups
  4. Not plug-and-play - Requires VPS/homelab and basic Linux knowledge

When NOT to use Hermes:

  • You want simplest possible setup → Use ChatGPT Plus
  • You only need coding help → Use Claude Code or Cursor
  • You can't self-host → Use cloud tools
  • You need WhatsApp integration → Use OpenClaw

When TO use Hermes:

  • You need AI that remembers your environment
  • You want scheduled background jobs
  • You require self-hosted/privacy
  • You prefer Python ecosystem
  • You want AI that improves over time

Getting Started Checklist

Before you install:

  • Have a server/VPS or local machine for hosting
  • Choose LLM provider (OpenAI, Anthropic, local, etc.)
  • Decide on access method (localhost, SSH tunnel, Tailscale)
  • Read architecture overview to understand system design

Installation:

  • Clone repo: git clone https://github.com/nesquena/hermes-webui
  • Run bootstrap: python3 bootstrap.py
  • Complete onboarding wizard
  • Configure provider API keys

First tasks:

  • Create your first session
  • Add user profile info to USER.md (via Memory panel)
  • Set up a simple cron job (via Tasks panel)
  • Let Hermes complete a complex task and watch it write a skill
  • Test session memory by referring back to earlier context

Optional:

  • Set up remote access (SSH tunnel or Tailscale)
  • Install Telegram/Discord bot for mobile access
  • Configure additional profiles for different use cases
  • Explore themes and customize appearance

Roadmap & Future

Current Focus

From project ROADMAP.md:

  1. Enhanced skill learning - Better automatic skill extraction
  2. Multi-agent orchestration - Spawn specialized sub-agents
  3. Improved memory retrieval - Semantic search in MEMORY.md
  4. Better mobile experience - PWA support, native app wrappers
  5. Marketplace integration - Optional community skills (while keeping self-improvement)

Long-term Vision

Hermes aims to be:

  • The self-hosted AI that gets smarter the longer you use it
  • A platform where skills compound over time
  • An agent that understands your entire workflow
  • The open-source alternative to proprietary AI assistants

NOT aiming for:

  • Marketplace dependence (core value is self-improvement)
  • Cloud lock-in
  • Closed-source features
  • Subscription models

Source: Hermes Atlas State Report


Comparison Table: Full Feature Matrix

FeatureHermesClaude CodeOpenClawCursorChatGPT
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 CurveMediumLowMediumLowVery Low
Cost (self-host)$5+/mo VPSN/A$5+/mo VPSN/AN/A
Cost (cloud)$0 platform$20-100/mo$0 platform$20+/mo$20/mo

Sources: MindStudio, Grandlinux Comparison


Technical Architecture Details

Backend Design

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:

  • Zero dependencies
  • Faster startup
  • Simpler debugging
  • Full control over SSE

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"

Frontend Design

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:

  • ~500 lines of CSS covers entire UI
  • No build step
  • Full control over every pixel
  • Instant theme switching

State Management

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:

  • Sessions as JSON files
  • Settings as single JSON
  • Simple backup (copy directory)
  • Easy debugging (cat file)

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": [...]}
  ]
}

FAQ Extended

Can I use local models only (no API costs)?

Yes. Hermes supports:

  • Ollama - ollama serve + set base URL in onboarding
  • LMStudio - Point to LMStudio API endpoint
  • llama.cpp server - Any OpenAI-compatible endpoint
  • vLLM - For production local deployment

No OpenAI/Anthropic account required.

Does Hermes phone home?

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.

Can I expose this to the internet safely?

Yes, with:

  1. Strong password via HERMES_WEBUI_PASSWORD
  2. HTTPS/TLS (configure via env or reverse proxy)
  3. Firewall limiting access to specific IPs
  4. VPN (Tailscale, WireGuard)

Do NOT expose without auth - anyone can read your conversations and execute code.

How much does it cost to run?

Infrastructure:

  • VPS: $5-20/month (DigitalOcean, Hetzner, Linode)
  • Homelab: $0 (if you have hardware)

API costs (pay-per-use):

  • OpenAI GPT-4 Turbo: ~$10-50/month for normal usage
  • Anthropic Claude: ~$15-60/month
  • Local models (Ollama): $0

Total: $5-80/month depending on usage and provider choice.

Can companies use this?

Yes. MIT license allows commercial use.

Enterprise considerations:

  • Deploy on company infrastructure
  • Use company LLM accounts
  • All data stays in company network
  • Customize for internal workflows
  • No vendor lock-in

Support: Community support via GitHub. No official enterprise support yet.

How stable is it?

Current state (v0.51.x):

  • Core features: Stable
  • Active development: 2-5 releases/week
  • Breaking changes: Rare, but happens
  • Upgrade path: git pull + restart (usually)

Production readiness: Many users run in production. Test updates in staging first.


Related Posts


Conclusion

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


Related Posts


Sources & References

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.

Related posts