Files
webui/ROADMAP.md
Nathan Esquenazi 28ac04da7d docs: comprehensive markdown update for v0.24
README.md:
- Features section rewritten: added voice input, profiles, auth/security,
  slash commands, mobile responsive, thinking display, session projects,
  workspace tree, code copy, safe HTML rendering sections
- Architecture tree updated with all current files and line counts
- Env var table: added HERMES_WEBUI_PASSWORD
- Test section: updated count (415 tests), corrected pytest command
- Docs section: added SPRINTS.md reference

ARCHITECTURE.md:
- File inventory: added profiles.py, Dockerfile, docker-compose.yml,
  .dockerignore; updated all line counts to current values
- Env vars: added HERMES_HOME to both server-level and per-request sections
- Test files: 21 files, 415 functions (was 17 files, 327)

ROADMAP.md:
- Header: v0.21 -> v0.24, 328 -> 415 tests
- Sprint history table: added Sprints 20-22
- Architecture table: updated line counts and added Docker row
- Feature checklist: marked voice, mobile, profiles as done; reorganized

TESTING.md:
- Header: Sprint 19/v0.21 -> Sprint 22/v0.24, updated test counts
- Footer: same updates
- Added manual test sections for Sprints 20 (voice + send button),
  21 (mobile + Docker), 22 (multi-profile)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 11:20:43 -07:00

18 KiB

Hermes Web UI: Full Parity Roadmap

Goal: Full 1:1 parity with the Hermes CLI experience via a clean dark web UI. Everything you can do from the CLI terminal, you can do from this UI.

Last updated: Sprint 22 / v0.24 (April 3, 2026) Tests: 415 total (392 passing, 23 pre-existing failures) Source: /


Sprint History (Completed)

Sprint Theme Highlights Tests
Sprint 1 Bug fixes + foundations B1-B11 fixed, LOCK on SESSIONS, section headers, request logging 19
Sprint 2 Rich file preview Image preview, rendered markdown, table support, smart icons 27
Sprint 3 Panel nav + viewers Sidebar tabs, cron/skills/memory panels, B6/B10/B14, Phase D start 48
Sprint 4 Relocation + power features Source to /, CSS extracted, session rename/search, file ops 68
Sprint 5 Phase A complete + workspace JS extracted (server.py 1778->1042 lines), workspace management, copy message, file editor, session index 86
Test hardening Isolated test environment Port 8788 test server, conftest autouse, cleanup_zero_message, 5 test files rewritten 90
Sprint 6 Polish + Phase E complete HTML to static/, resizable panels, cron create, session JSON export, Escape from editor 106
Sprint 7 Wave 2 Core: CRUD + Search Cron edit/delete, skill create/edit/delete, memory write, session content search, health improvements, git init 125
Sprint 8 Daily Driver Finish Line Edit+regenerate user messages, regenerate last response, clear conversation, Prism.js syntax highlighting, reconnect banner fix, session list scroll fix 139
Sprint 8 hotfix Message queue + INFLIGHT fix Queue messages while busy (toast + badge + auto-drain), INFLIGHT-first loadSession (message stays on switch-away/back) 139
Sprint 9 Codebase health + daily driver gaps app.js deleted and replaced by 6 modules, tool call cards inline, attachment persistence on reload, todo list panel 149
Sprint 10 Server health + operational polish server.py split into api/ modules, background task cancel, cron run history viewer, tool card UX polish 167
Sprint 10 fixes Import regressions + regression tests uuid, AIAgent, has_pending, SSE cancel loop, Session.init tool_calls; test_regressions.py 177
Concurrency sweeps Multi-session correctness Approval cross-session (R10), activity bar per-session (R11), live cards on switch-back (R12), tool cards after done (R13), session model authoritative (R14), newSession cards (R15) 190
Sprint 11 Multi-provider models + streaming Dynamic model dropdown (any Hermes provider), smooth scroll pinning, routes extracted to api/routes.py (server.py 704→76 lines) 201
Sprint 12 Settings + reliability + session QoL Settings panel (gear icon, settings.json), SSE auto-reconnect, pin sessions, import session from JSON 211
Sprint 13 Alerts + polish Cron completion alerts (polling + badge), background error banner, session duplicate, browser tab title 221
Sprint 14 Visual polish + workspace ops Mermaid diagrams, message timestamps, file rename, folder create, session tags, session archive 233
Sprint 15 Session projects + code copy Session projects/folders, code block copy button, tool card expand/collapse toggle 237
Sprint 16 Session sidebar visual polish SVG action icons, overlay hover actions, pin indicator, project border, safe HTML rendering 289
Sprint 17 Workspace polish + slash commands + settings Breadcrumb navigation, slash command autocomplete, send key setting (#26) 318
Sprint 18 Thinking display + workspace tree File preview auto-close, thinking/reasoning cards, expandable directory tree (#22) 318
Sprint 19 Auth + security hardening Password auth (off by default), login page, security headers, 20MB body limit (#23) 328
Sprint 20 Voice input + send button Voice input (Web Speech API), send button icon-circle with pop-in animation 415
Sprint 21 Mobile responsive + Docker Hamburger sidebar, bottom nav, files slide-over, Docker support (#21, #7) 415
Sprint 22 Multi-profile support Profile picker, management panel, seamless switching, per-session tracking (#28) 415

Current Architecture Status

Layer Location Status
Python server /server.py (~81 lines) + api/ modules (~2876 lines) Thin shell + auth middleware + business logic in api/
HTML template /static/index.html (~364 lines) Served from disk
CSS /static/style.css (~670 lines) Served from disk, incl. mobile responsive
JavaScript /static/{ui,workspace,sessions,messages,panels,boot,commands}.js 7 modules, ~3460 lines total
Docker Dockerfile, docker-compose.yml, .dockerignore python:3.12-slim, named volume
Runtime state ~/.hermes/webui-mvp/sessions/ Session JSON files
Test server Port 8788, state dir ~/.hermes/webui-mvp-test/ Isolated, wiped per run
Production server Port 8787 SSH tunnel from Mac

Feature Parity Checklist

Chat and Agent

  • Send messages, get SSE-streaming responses
  • Switch models per session (10 models, grouped by provider)
  • Multi-provider API support: use any Hermes agent API provider (OpenAI, Anthropic, Google, etc.) directly, not just OpenRouter (Sprint 11)
  • Custom endpoint model discovery: auto-detect models from Ollama, LM Studio, and other local LLM servers via base_url (PR #18)
  • Upload files to workspace (drag-drop, click, clipboard paste)
  • File tray with remove button
  • Tool progress shown in activity bar above composer
  • Approval card for dangerous commands (Allow once/session/always, Deny)
  • Approval polling + SSE-pushed approval events
  • INFLIGHT guard: switch sessions mid-request without losing response
  • Session restores from localStorage on page load
  • Reconnect banner if page reloaded mid-stream
  • Copy message to clipboard (hover icon on each bubble)
  • Edit last user message and regenerate
  • Branch/fork conversation (Wave 3)
  • Token/cost estimate per message (Wave 3)

Tool Visibility

  • Tool progress in activity bar (moved out of composer footer)
  • Approval card with all 4 choices
  • Tool call cards inline (collapsed, show name/args/result)

Workspace / Files

  • Browse workspace directory tree with type icons
  • Preview text/code files (read-only)
  • Preview markdown files (rendered, tables supported)
  • Preview image files (PNG, JPG, GIF, SVG, WEBP inline)
  • Edit files inline (Edit button, Enter to save, Escape to cancel)
  • Create new file (+ button in panel header)
  • Delete file (hover trash, confirm dialog)
  • File name truncation with tooltip for long names
  • Right panel resizable (drag inner edge)
  • Syntax highlighted code preview (Prism.js)
  • Rename file (Sprint 14)
  • Create folder (Sprint 14)

Sessions

  • Create session (+ button or Cmd/Ctrl+K)
  • Load session (click in sidebar)
  • Delete session (hover trash, toast, correct fallback)
  • Auto-title from first user message
  • Rename session title (double-click in sidebar, Enter saves, Escape cancels)
  • Filter/search sessions by title (live filter box)
  • Date group headers (Today / Yesterday / Earlier)
  • Download session as Markdown transcript
  • Export session as JSON (full messages + metadata)
  • Session inherits last-used workspace on creation
  • Session content search (search message text across sessions)
  • Session tags / labels (Sprint 14)
  • Archive sessions (Sprint 14)
  • Clear conversation (wipe messages, keep session) (Wave 3)
  • Import session from JSON (Sprint 12)
  • Pin/star sessions to top of list (Sprint 12)
  • Duplicate session (Sprint 13)
  • Session projects / folders (Sprint 15)

Workspace Management

  • Add workspace with path validation (must be existing directory)
  • Remove workspace
  • Rename workspace display name
  • Quick-switch workspace from topbar dropdown
  • Sidebar live workspace display (name + path, updates in real time)
  • New sessions inherit last used workspace
  • Workspace list persists to workspaces.json
  • Workspace reorder (drag) (Wave 2)

Scheduled Tasks (Cron)

  • View all cron jobs (Tasks sidebar tab)
  • View last run output per job (auto-loaded on expand)
  • Expand job to see prompt, schedule, last output
  • Run job manually (Run now button)
  • Pause / Resume job
  • Create cron job from UI (+ New job form with name, schedule, prompt, delivery)
  • Edit existing cron job
  • Delete cron job
  • View full cron run history (expandable per job)
  • Skill picker in cron create form (Wave 3)

Skills

  • List all skills grouped by category (Skills sidebar tab)
  • Search/filter skills by name, description, category
  • View full SKILL.md content in right preview panel
  • Create skill
  • Edit skill
  • Delete skill
  • View skill linked files (Wave 3)

Memory

  • View personal notes (MEMORY.md) rendered as markdown (Memory tab)
  • View user profile (USER.md) rendered as markdown (Memory tab)
  • Last-modified timestamp on each section
  • Add/edit memory entry inline

Configuration

  • Settings panel (default model, default workspace) (Sprint 12)
  • Send key preference (Enter or Ctrl+Enter) (Sprint 17)
  • Password authentication (Sprint 19)
  • Enable/disable toolsets per session (deferred)

Notifications

  • Cron job completion alerts (Sprint 13)
  • Background agent error alerts (Sprint 13)

Workspace

  • Breadcrumb navigation in subdirectories (Sprint 17)
  • Workspace tree view with expand/collapse (Sprint 18, Issue #22)
  • File preview auto-close on directory navigation (Sprint 18)

Slash Commands

  • Command registry + autocomplete dropdown (Sprint 17)
  • Built-in: /help, /clear, /model, /workspace, /new (Sprint 17)

Security

  • Password auth with signed cookies (Sprint 19, Issue #23)
  • Security headers (X-Content-Type-Options, X-Frame-Options) (Sprint 19)
  • POST body size limit (20MB) (Sprint 19)

Thinking / Reasoning

  • Collapsible thinking cards for extended-thinking models (Sprint 18)

Voice

  • Voice input via Web Speech API (Sprint 20)

Mobile

  • Mobile responsive layout — hamburger sidebar, bottom nav, files slide-over (Sprint 21)

Profiles

  • Multi-profile support — create, switch, delete profiles (Sprint 22, Issue #28)

Advanced / Future

  • TTS playback of responses (deferred)
  • Subagent delegation cards (deferred)
  • Background task cancel (activity bar Cancel button)
  • Code execution cell (deferred)
  • Desktop application (deferred)
  • Extended slash command / skill integration (deferred)
  • Virtual scroll for large lists (deferred)

Sprint 7: Wave 2 Core -- Cron/Skill/Memory CRUD + Session Content Search (COMPLETED)

Theme: "Wave 2 Core -- Cron/Skill/Memory CRUD + Session Content Search"

Track A: Bug Fixes

Item Description
Activity bar sizing Activity bar sometimes overlaps first message on short viewports
Model dropdown sync Model chip in topbar sometimes shows stale model after session switch
Cron output truncation Long cron output in the tasks panel overflows its container

Track B: Features

Feature What Value
Session content search Search message text across all sessions, not just titles. GET /api/sessions/search already does title search; extend to message content with a configurable depth limit High: the single most-requested nav feature after rename
Cron edit + delete Edit an existing cron job (name, schedule, prompt, delivery) inline in the tasks panel. Delete with confirm. POST /api/crons/update and /api/crons/delete High: closes the cron CRUD gap (create was Sprint 6)
Skill create + edit A "New skill" form in the Skills panel. Name, category, SKILL.md content in a textarea editor. Save calls POST /api/skills/save (writes to ~/.hermes/skills/). Edit opens existing skill in the same editor High: biggest remaining CLI gap after cron

Track C: Architecture

Item What
Phase E: app.js module split (start) Split app.js (1332 lines) into logical modules: sessions.js, chat.js, workspace.js, panels.js, ui.js. Serve via ES module imports in index.html. This is Phase E completion.
Health endpoint improvement Add active_streams, uptime_seconds to /health response (Phase G)
Git init git init , first commit, push to private GitHub repo

Tests

  • ~20 new pytest tests (cron update/delete, skill save, session content search)
  • TESTING.md: Sections 29-31 (cron edit, skill edit, session search)
  • Estimated total after Sprint 7: ~126

Wave 2: Full CRUD and Interaction Parity

Status: In progress. Sprint 6 completed cron create and workspace management. Remaining Wave 2 items targeted for Sprints 7-8.

Sprint 2.0: Workspace Management (COMPLETE Sprint 5+6)

All workspace features delivered: add/validate/remove/rename workspaces, topbar quick-switch, sidebar live display, new sessions inherit last workspace. See Sprint 5 completed section.

Sprint 2.1: Cron Job Management (Partial -- Sprint 7 for remaining)

  • View all jobs (Sprint 3)
  • Run / pause / resume (Sprint 3)
  • Create job from UI (Sprint 6)
  • Edit job
  • Delete job
  • Full cron run history

Sprint 2.2: Skill Management (Partial -- Sprint 7 for remaining)

  • List all skills with categories (Sprint 3)
  • View SKILL.md content (Sprint 3)
  • Create skill
  • Edit skill
  • Delete skill

Sprint 2.3: Memory Write (Sprint 7)

  • View notes + profile (Sprint 3)
  • Edit notes inline

Sprint 2.4: Todo Management (Wave 2)

  • View current todo list (sidebar Todo panel, parsed from session history)

Sprint 2.5: Session Content Search (Sprint 7)

  • Session title search (Sprint 4)
  • Message content search across sessions

Sprint 2.6: Session Rename (COMPLETE Sprint 4)

Double-click any session title in the left sidebar to edit inline. Enter saves, Escape cancels. Topbar updates immediately.


Wave 3: Power Features and Developer Experience

Sprint 3.1: Tool Call Visibility Inline

Show tool calls as collapsible cards in the conversation. Collapsed: tool name badge + one-line preview. Expanded: full args + result.

Sprint 3.2: Multi-Model Expansion

Add more models. Group by provider. Model info tooltip on hover. (Partially done: 10 models in dropdown from Sprint 1.)

Sprint 3.2b: Resizable Panel Widths (COMPLETE Sprint 6)

Both sidebar and workspace panel are drag-resizable with localStorage persistence.

Sprint 3.3: Workspace File Actions

  • Rename file (inline, double-click) (Sprint 14)
  • Create folder (Sprint 14)
  • Syntax highlighted code preview (Prism.js)

Sprint 3.4: Conversation Controls

  • Copy message (Sprint 5)
  • Edit last user message + regenerate
  • Regenerate last assistant response
  • Clear conversation (wipe messages, keep session)

Wave 4: Settings, Configuration, Notifications

Sprint 4.1: Settings Panel

Full settings overlay: default model, default workspace, enabled toolsets, config viewer.

Sprint 4.2: Notification Panel

Bell icon with unread count. SSE endpoint for cron completions and errors. Toast pop-ups.

Sprint 4.3: Delivery Target Config

Configure and test-ping delivery targets (Discord, Telegram, Slack, email) for cron jobs.


Wave 5: Honcho Integration and Long-term Memory

Sprint 5.1: Honcho Memory Panel

User representation panel, cross-session context, Honcho search, memory write.

Sprint 5.2: Session Continuity Features

"What were we working on?" button, session tags, session archive.


Wave 6: Realtime and Agentic Features

Sprint 6.1: Background Task Monitor

Live list of running agent threads. Cancel button. Queue visibility.

Sprint 6.2: Subagent Delegation Cards

When delegate_task fires, show subagent progress inline in chat.

Sprint 6.3: Code Execution Panel

Jupyter-style inline code cell. Stateful kernel per session.

Sprint 6.4: Voice Mode

Push-to-talk mic button. Whisper transcription. Optional TTS playback.


Wave 7: Production Hardening and Mobile

Sprint 7.1: Authentication

HERMES_WEBUI_PASSWORD env var gate. Signed cookie. Login page.

Sprint 7.2: HTTPS and Reverse Proxy

Nginx + Let's Encrypt. CORS headers for external domain.

Sprint 7.3: Mobile Responsive Layout

Collapsible sidebar hamburger. Touch-friendly controls. Swipe gestures.

Sprint 7.4: Performance and Scale

Virtual scroll for session/message lists. Incremental message loading.


User Requested Features

Community-requested enhancements tracked from GitHub issues.

Feature Issue Description Complexity
Workspace tree view #22 Accordion/tree view for workspace file browser instead of flat list. Lazy-load subdirectories on expand, no backend changes needed. Medium
Docker container #7 Docker Compose setup with separate hermes-agent and hermes-webui containers, multi-arch (amd64 + arm64), volume mounts for config. Medium-High
Authentication #23 Password gate via HERMES_WEBUI_PASSWORD env var, login page, signed cookie. Already planned in Sprint 7.1. Low-Medium
Send key / personalization #26 Toggle send key (Enter vs Ctrl/Cmd+Enter) and queue vs interrupt mode as global settings. Low
Multi-profile support #28 Profile management UI: create, delete, switch, configure agent profiles. Medium
Mobile responsive UI #21 Hamburger menu, slide-out sidebar drawer, touch-friendly controls. Already planned in Sprint 7.3. Medium-High