hermes-control-interface

A self-hosted web dashboard for the Hermes AI agent stack. Provides a browser-based terminal, file explorer, session overview, cron management, system metrics, and an agent status panel β€” all behind a single password gate.

β˜… 332 JavaScript MIT Updated 4/17/2026
View on GitHub β†’ Homepage

Overview

The Hermes Control Interface is a self-hosted web dashboard designed to manage the Hermes AI agent stack through a centralized graphical interface. It utilizes a Node.js and Express backend with WebSockets to provide real-time system monitoring, multi-agent gateway management, and a browser-based terminal. Users can configure over 80 agent settings, track detailed token analytics across different models, and manage scheduled cron jobs for automated tasks. The platform also includes a revamped chat interface with collapsible tool call cards and a secure file explorer scoped to the agent's directory.

Full README from GitHub

Hermes Control Interface

A self-hosted web dashboard for the Hermes AI agent stack. Manage terminals, files, sessions, cron jobs, token analytics, multi-agent gateways, and team access β€” all behind a password gate.

Stack: Vanilla JS + Vite Β· Node.js Β· Express Β· WebSocket Β· xterm.js Version: 3.3.2


Highlights

Chat Revamped β€” Collapsible tool call cards with JSON viewer, session sidebar with model tags, banner-free output.

RBAC v2 β€” 28 permissions across 12 groups. Admin, viewer, or custom roles per user.

Multi-Agent Gateway β€” Start/stop/configure multiple Hermes profiles. Real-time logs. Systemd service management.

Token Analytics β€” Track sessions, messages, tokens, cost by model, platform, and time range.


Screenshots

Navigation β€” 8 Pages

Home Β· Agents Β· Usage Β· Skills Β· Chat Β· Logs Β· Maintenance Β· Files

Dark Mode

Home Agents
Home Agents
Chat Usage & Analytics
Chat Usage
Skills Hub Maintenance
Skills Maintenance
File Explorer Agent Dashboard
Files Dashboard
Agent Gateway Agent Sessions
Gateway Sessions
Agent Config Agent Memory
Config Memory
Agent Skills Agent Cron
Skills Cron

Light Mode

Home Agents Skills Hub
Home Agents Skills
Gateway Memory
Gateway Memory

Features

πŸ” Authentication

  • Single password login (configurable via HERMES_CONTROL_PASSWORD)
  • bcrypt password hashing (cost factor 10)
  • CSRF tokens on all mutating requests
  • Conditional Secure cookie flag (auto-detects HTTPS)
  • Rate limiting: 5 failed logins per 15 minutes per IP
  • Multi-user support with role-based access control (RBAC)

🏠 Home Dashboard

System overview at a glance:

  • System Health: CPU usage, RAM usage, Disk usage, Uptime
  • Agent Overview: active model, provider, gateway status, configured API keys, active platforms
  • Gateway Status: per-profile running/stopped indicators
  • Token Usage (7d): sessions count, messages, total tokens, estimated cost, models used, platforms breakdown, top tools

πŸ€– Agents β€” Multi-Agent Management

Manage all Hermes profiles from one place:

  • List all profiles with status badge (running/stopped) and active model
  • Create new profile
  • Clone existing profile
  • Delete profile
  • Set default profile
  • Start/Stop/Restart gateway per profile
  • Quick gateway log viewer

πŸ’¬ Chat β€” Revamped Interface

The chat interface got a full overhaul in v3.3.0:

Tool Call Cards

  • Each tool call displayed as a collapsible card
  • Shows tool name, status (running/success/error), and execution time
  • Expand to see full JSON input/output
  • Collapsed by default for clean output

Session Sidebar

  • List of past chat sessions with timestamps
  • Resume any session with one click
  • New chat button for fresh session
  • Shows active model tag

Clean Output

  • Banner suppression (-Q flag) for noise-free responses
  • Auto-detects both new (session_id:) and legacy (Session:) session ID formats
  • --continue "" (empty) creates new session
  • Bare --continue resumes last session

Session Management

  • Rename sessions
  • Delete sessions
  • Export session transcript

πŸ“Š Usage & Analytics β€” Token Insights

Full breakdown of LLM usage:

  • Time Range: Today, 7d, 30d, 90d filters
  • Agent Filter: per-profile or all combined
  • Overview Cards: total sessions, messages, tokens, cost, active hours
  • Models Table: per-model breakdown β€” sessions count, total tokens, avg tokens/session
  • Platforms Table: per-platform breakdown (CLI, Telegram, WhatsApp, etc.)
  • Top Tools: most called tools with call counts and success rates

πŸ› οΈ Agent Detail β€” Per-Agent Management

Six-tab interface for deep agent configuration:

Dashboard Tab

  • Agent identity: name, model, provider
  • Gateway service status
  • Quick token usage summary
  • Active platforms

Sessions Tab

  • List all sessions for this profile
  • Search by keyword
  • Rename session
  • Delete session
  • Export session (JSON format)
  • Resume session in CLI (one click)

Gateway Tab

  • Start/Stop/Restart gateway service
  • Real-time log stream (WebSocket)
  • Systemd service management (for non-root users: hermes-gateway-<profile>)
  • Gateway configuration panel

Config Tab

  • 13 categories, 80+ settings
  • Structured form editor with labeled fields
  • Raw YAML editor toggle
  • Reset to defaults per category
  • Apply changes with validation

Memory Tab

  • Dynamic memory provider panel
  • Provider options: Built-in MEMORY.md, Honcho (self-hosted), External providers
  • Honcho status: connected/disconnected
  • Memory usage stats

Cron Tab

  • List all scheduled jobs for this profile
  • Create new cron job with schedule presets (hourly, daily, weekly, custom cron expression)
  • Pause/Resume scheduled jobs
  • Run job immediately (on-demand)
  • Edit/Delete cron jobs
  • Next run time display

πŸ“¦ Skills Marketplace

Browse and manage installed Hermes skills:

  • Grouped by category (devops, mlops, creative, etc.)
  • Shows skill name, description snippet, source (builtin/local), trust level
  • Search and filter skills
  • Install new skills from the Hermes skills registry
  • Check for updates
  • Uninstall skills

πŸ”§ Maintenance β€” System Administration

Full admin panel:

  • Doctor: Run diagnostics β€” detects common issues, auto-fix where possible
  • Dump: Generate debug summary (system info, config, recent logs)
  • Update: Update Hermes agent to latest version
  • Backup: Download all Hermes data as a zip file
  • Import: Restore from backup zip
  • HCI Restart: Restart the Control Interface web server from UI (no SSH needed)
  • Users (NEW in v3.3.0): Create/edit/delete users, assign roles, manage permissions
  • Auth: View provider status (OpenRouter, Nous Portal, etc.), add/remove API keys
  • Audit: Timestampped activity log β€” who did what and when

πŸ“ File Explorer

Split-view file editor:

  • Left panel: Directory tree browser
  • Right panel: Text editor with syntax highlighting
  • Save: Write changes back to disk
  • Secure: Paths scoped to ~/.hermes, traversal attacks prevented
  • Multiple roots: Configurable via HERMES_CONTROL_ROOTS

πŸ’» Terminal

Real browser-based terminal:

  • Full PTY via node-pty + xterm.js over WebSocket
  • Touch-friendly controls (↑↓␣↡) for mobile
  • Fullscreen toggle
  • Auto-cleanup flow: Ctrl+C β†’ clear β†’ ready for next command
  • Rate limited: 30 commands/minute per IP

πŸ”” Notifications

  • Bell icon with unread count badge (top-right)
  • Dropdown panel with notification list
  • Dismiss individual or clear all
  • Sources: system alerts (disk/RAM/CPU), gateway events, session CRUD, user management
  • Persistent: stored in ~/.hermes/hci-notifications.json

🎨 Theme

  • Dark mode (default): #0b201f background, #dccbb5 foreground, #7c945c accent
  • Light mode: #e4ebdf background, #0b201f foreground, #2e6fb0 accent
  • Toggle via header button
  • Preference persisted in localStorage
  • Login page: themed background image with overlay

πŸ”’ Security

  • Multi-user RBAC: 28 permissions across 12 groups
  • Roles: admin (full access), viewer (read-only), custom (your choice)
  • bcrypt password hashing (cost factor 10)
  • CSRF tokens on all mutating requests
  • Secure cookie flag (auto-detects HTTPS)
  • WebSocket origin verification (exact match)
  • Input sanitization: strict regex on all user inputs (profiles, sessions, titles, filenames)
  • Path traversal prevention in file explorer
  • Rate limiting: login (5 failed/15min), terminal exec (30/min)
  • XSS protection: all dynamic values escaped in rendered HTML
  • Admin gate: critical endpoints (/api/plugins, etc.) require admin role
  • Token cleanup: automatic session token cleanup every 15 minutes
  • Unhandled exception handlers: unhandledRejection + uncaughtException caught and logged

See full security audit: docs/SECURITY_AUDIT.md


Where HCI Can Be Installed

HCI runs as a single Node.js process β€” any server environment that supports Node.js works.

Environment Status Notes
Local Linux server βœ… Full support
VPS (DigitalOcean, Hetzner, AWS EC2, Linode, etc.) βœ… Recommended for production
macOS βœ… Works
WSL2 (Windows Subsystem for Linux) βœ… Full support
Raspberry Pi (arm64) βœ… Works
Docker / Podman ⚠️ Works but not officially supported
Shared hosting ❌ Requires Node.js + WebSocket + PTY support
Browser-only (no server) ❌ Requires Node.js backend

Requirements

Requirement Minimum Recommended
Node.js v18+ v20 LTS
RAM 512 MB 1 GB+
Disk 200 MB 500 MB+
OS Linux / macOS / WSL2 Ubuntu 22.04 LTS
Hermes Agent v3.x Latest
Build tools python3, make, g++ For node-pty native module

Dependencies (installed via npm install):

  • express β€” HTTP server
  • ws β€” WebSocket
  • node-pty β€” PTY support (requires build tools)
  • xterm.js β€” Terminal emulator in browser
  • bcrypt β€” Password hashing
  • cookie-parser, dotenv, js-yaml, etc.

Installation Methods

Manual (Recommended)

# 1. Clone
git clone https://github.com/xaspx/hermes-control-interface.git
cd hermes-control-interface

# 2. Install dependencies
npm install

# 3. Configure
cp .env.example .env
# Edit .env and set:
#   HERMES_CONTROL_PASSWORD=your-secure-password
#   HERMES_CONTROL_SECRET=$(openssl rand -hex 32)

# 4. Build frontend
npm run build

# 5. Start
npm start

Access at http://localhost:10272 (default PORT).

Systemd Service (Production)

# Use the provided gateway service script as reference
bash scripts/setup-gateway-service.sh

Or create a simple systemd unit:

# /etc/systemd/system/hermes-control.service
[Unit]
Description=Hermes Control Interface
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/path/to/hermes-control-interface
ExecStart=/usr/bin/node server.js
Restart=always

[Install]
WantedBy=multi-user.target
sudo systemctl enable hermes-control
sudo systemctl start hermes-control

Environment Variables

Variable Required Description
HERMES_CONTROL_PASSWORD Yes Login password
HERMES_CONTROL_SECRET Yes CSRF + internal auth secret
PORT No Server port (default: 10272)
HERMES_CONTROL_HOME No Hermes home dir (default: ~/.hermes)
HERMES_CONTROL_ROOTS No File explorer roots (JSON array)
HERMES_PROJECTS_ROOT No Projects directory

Reset Password Without Dashboard Access

If you can't log in to the dashboard, reset the password via CLI:

Option 1 β€” Edit .env directly

# SSH into your server
nano ~/.hermes/.env
# Change HERMES_CONTROL_PASSWORD=your-new-password

# Restart
sudo systemctl restart hermes-control
# or: pkill node; npm start &

Option 2 β€” Generate bcrypt hash via Node.js

node -e "const bcrypt=require('bcrypt'); bcrypt.hash(require('crypto').randomBytes(24).toString('hex'), 10).then(h=>console.log('HERMES_CONTROL_PASSWORD='+h))"
# Copy the output to .env, then restart

Key point: .env is the source of truth. Dashboard access = server access. If you lose access to both, you must have server/SSH access to reset.


Architecture

src/                    # Vite source (ES modules)
β”œβ”€β”€ index.html          # Entry point
β”œβ”€β”€ js/main.js          # App logic (~4800 lines, modular sections)
β”œβ”€β”€ css/
β”‚   β”œβ”€β”€ theme.css       # Color palette (dark/light)
β”‚   β”œβ”€β”€ layout.css      # Topbar, modals, dropdowns, sidebar
β”‚   └── components.css  # Cards, tables, forms, editor, file explorer
β”œβ”€β”€ public/
β”‚   └── favicon.svg     # Served unhashed
└── assets/             # SVG icons

dist/                   # Vite build output (served by Express)
server.js               # Express + WebSocket + PTY + API (~2300 lines)
auth.js                 # Multi-user auth + RBAC (bcrypt, sessions, permissions)

Development

# Edit source in src/
npx vite build

# Restart (never in foreground β€” use detached)
kill $(lsof -t -i:10272) 2>/dev/null
nohup node server.js &>/dev/null & disown

API

100+ endpoints covering:

  • Auth: login, logout, session management, setup
  • Users: CRUD, role assignment, permission management, reset password
  • Sessions: list, rename, delete, export, resume
  • Profiles: list, create, clone, delete, use, gateway control
  • Chat: send message, stream response, tool calls
  • Cron: list, create, pause, resume, run, remove
  • Config: read, write, YAML parsing, reset
  • Memory: provider-specific panels (MEMORY.md, honcho, external)
  • Skills: list, parse, search, install, uninstall, check updates
  • Files: list, read, write, save (scoped to Hermes home)
  • System: health, insights, usage analytics, doctor, dump, update, backup
  • Notifications: list, dismiss, clear
  • Plugins: admin-only plugin management
  • Terminal: exec command via PTY
  • Audit: activity log

See docs/API.md for full reference.


Security Audit

Full audit report: docs/SECURITY_AUDIT.md Score: 7.0/10 β€” Production-ready.

Issues found and fixed in v3.3.0:

  • XSS in home cards (loadHomeCards()) β€” fixed with escapeHtml()
  • Missing admin gate on plugins API β€” fixed
  • Terminal exec rate limit β€” 30 commands/minute per IP
  • Token cleanup interval β€” now runs every 15 minutes

Updating HCI

# 1. Pull latest code
cd /root/projects/hermes-control-interface
git pull origin main

# 2. Install dependencies (if package.json changed)
npm install

# 3. Rebuild frontend
npm run build

# 4. Restart production server
kill $(lsof -t -i :10272) 2>/dev/null
nohup node server.js &>/dev/null & disown

Or use the HCI UI: Maintenance β†’ HCI Restart (restarts from browser).

Non-root users: Replace /root/projects with your user's project directory. If running via systemd, use sudo systemctl restart hermes-control.


Changelog

v3.3.2 (2026-04-17)

πŸ› Bug Fixes:

  • HTTP-only deployments: Disable upgrade-insecure-requests CSP directive that broke UI on Tailscale/LAN/dev environments
  • HOST env var: Support HOST env var for non-localhost server binding (Tailscale IP, LAN, specific interface)

🀝 Contributors:

  • @hifiguy β€” 2 fixes (HOST env + CSP HTTP fix)

v3.3.0 (2026-04-17)

πŸ’¬ Chat Revamp:

  • Tool call cards: collapsible cards with JSON viewer, collapsed by default
  • Banner suppression: -Q flag passed to hermes for clean output
  • Session sidebar: model tag, session list, resume/new chat buttons
  • Auto-detect session ID format: new (session_id: YYYYMMDD_HHMMSS_HEX) and legacy (Session: YYYYMMDD_HHMMSS_HEX)
  • --continue "" (empty) creates fresh session; bare --continue resumes last session

πŸ‘₯ User Management v2 (RBAC):

  • 28 permissions across 12 groups: Sessions, Chat, Logs, Usage, Gateway, Config, Secrets, Skills, Cron, Files, Terminal, Users, System
  • Built-in roles: admin (full access), viewer (read-only), custom role
  • Create/edit user modal: role presets (Admin/Viewer), grouped permission checklist, reset password button
  • Permission gating on 9 previously-unprotected endpoints

πŸ”’ Security:

  • Full security audit (docs/SECURITY_AUDIT.md) β€” score 7.0/10
  • XSS fix: loadHomeCards() now escapes all dynamic values with escapeHtml()
  • Rate limiter: terminal exec limited to 30 commands/minute per IP (429 on exceeded)
  • Token cleanup: proper setInterval() every 15 minutes (was only on token creation)
  • Admin-only gate: GET /api/plugins now requires admin role
  • Full activity audit log: Maintenance β†’ Audit panel

πŸ“¦ Skills:

  • Check updates: handles "unavailable" source status gracefully (info message, not error)
  • Uninstall: uses stdin pipe (echo y |) instead of unsupported --yes flag

πŸ› Bug Fixes:

  • Notification dismiss: backend handles both /api/notifications/:id/dismiss and /api/notifications/dismiss
  • Sidebar: responsive CSS, flex-shrink:0, mobile breakpoints at 480px
  • Agent dropdown: follows dark/light theme correctly
  • Favicon 404 loop: moved to public/ to prevent Vite hash mismatch
  • HCI Info panel: version, GitHub link, Twitter @bayendor link in Maintenance

πŸ“ Docs:

  • Security audit report (12 categories)
  • Removed outdated script references (install.sh, reset-password.sh)
  • Screenshots: 13 dark mode, 6 light mode

v3.2.0 (2026-04-14)

⚑ Performance:

  • Insights speed: 60s+ timeout β†’ 0.65s via IPv4 adapter on model_metadata.py
  • Timeouts reduced: 10s β†’ 5s (model metadata), 5s β†’ 3s (llama.cpp props)

πŸ”’ Security:

  • WebSocket origin: exact match (was substring check)
  • Body limit: 10MB β†’ 1MB global, 10MB only on avatar upload
  • Temp files: crypto.randomUUID() (no predictable paths)
  • Skills install/uninstall: execHermes() instead of shell interpolation
  • Username validation: 2-32 chars, alphanumeric/_.- only

✨ Features:

  • Log tabs: Agent, Error, and Gateway logs now working
  • Non-root user support: dynamic HCI identity, HOME-aware paths
  • Gateway service: auto-detect hermes-gateway-<profile> for non-root

πŸ› Fixes:

  • Terminal flow: transcript handling after sendCommand
  • XSS: 15+ escaped user-facing error messages
  • Auth panel: data loaded async, doesn't block page load
  • CPR stripping: removed ANSI escape from terminal

v3.1.0 (2026-04-12)

  • Skills Hub + Honcho panel + Gateway connections
  • HTTPS support
  • Maintenance UI: Backup & Import, HCI Restart buttons

License

MIT

Credits

Built for the Hermes Agent ecosystem.

@bayendor β€” GitHub: xaspx