Hermes Workspace — Comprehensive Features Inventory
Version: 2.0.0 | Stack: React 19 + TanStack Start/Router + Vite 7 + Tailwind CSS 4 + Zustand + xterm.js + Monaco Editor
Description: Desktop workspace for Hermes Agent — chat, orchestration, and multi-agent coding pipelines
Frontend Screens & Features
Backend API Endpoints
UI Components Library
Configuration & Settings
Server-Side Architecture
Integrations & Provider Support
UX Features & Interactions
Security Features
Mobile & PWA Features
Deployment Options
1. Frontend Screens & Features
1.1 Chat Screen (/chat, /chat/$sessionKey)
Real-time SSE streaming with tool call rendering
Multi-session management — create, rename, delete, fork sessions
Dual chat backend modes:
Enhanced Claude — full session API with persistent history via Hermes Agent gateway
Portable — OpenAI-compatible /v1/chat/completions (works with Ollama, LM Studio, vLLM, etc.)
Chat sidebar — session list with search, pin, rename, delete dialogs
Message rendering:
Markdown with GFM support (react-markdown + remark-gfm + remark-breaks)
Syntax highlighting via Shiki
Tool call pill rendering with expandable details
Thinking/reasoning content display
Message timestamps
Message actions bar (copy, etc.)
Chat composer — multi-line input with:
Slash command menu (/new, /clear, /model, /save, /skills, /skin, /help)
File attachment support (images via base64, multimodal content)
Voice input (Web Speech API)
Context meter showing token usage percentage
Session management features:
Auto-generated session titles
Session forking
Session search across history
Pinned sessions
Session tombstones for deleted session cleanup
Inspector panel — sidebar showing session activity, memory, and skills
Research card — embedded research display
Connection status messaging — real-time gateway connectivity indicators
Scroll-to-bottom button for long conversations
Chat empty state — onboarding content when no messages exist
Provider selection dialog — model/provider chooser inline in chat
Smooth streaming text — progressive text reveal for streaming responses
Context alert system — warnings when approaching token limits
1.2 Dashboard Screen (/dashboard)
Overview dashboard for workspace metrics
Dashboard overflow panel for expanded views
1.3 Files Screen (/files)
Full workspace file browser with directory tree navigation
File preview dialog — inline file viewing
Monaco Editor integration — full code editing
File operations: create, read, write, rename, delete, mkdir
File upload — multipart form upload support
Image preview — base64 rendering for image files
Glob pattern support — filter files by pattern
Path traversal prevention — sandboxed to workspace root
Ignored directories: node_modules, .git, .next, .turbo, .cache, __pycache__, .venv, dist
Max depth/entries limits — configurable tree depth (default 3), max 20K entries
1.4 Terminal Screen (/terminal)
Full PTY terminal via Python pty-helper
xterm.js with addons: fit, search, web-links
256-color support (TERM=xterm-256color, COLORTERM=truecolor)
Persistent shell sessions — create, input, resize, close
SSE-based terminal streaming — real-time output
Keepalive pings every 8 seconds
Terminal workspace component with debug panel
Mobile terminal input — adapted for touch devices
Platform-aware default shell: zsh (macOS), bash (Linux), PowerShell (Windows)
1.5 Memory Browser Screen (/memory)
Browse agent memory files in ~/.hermes/ (MEMORY.md, memory/, memories/)
Search across memory entries — text search with line-level results (max 200 matches)
Markdown preview with live editing via MemoryEditor
Memory file list — sorted with MEMORY.md first, daily files by date
Memory components: MemoryFileList, MemorySearch, MemoryEditor, MemoryPreview
1.6 Skills Browser Screen (/skills)
Browse 2,000+ skills from the Claude skill registry
Tabbed view: Installed, Marketplace, Featured
Skill categories: All, Web & Frontend, Coding Agents, Git & GitHub, DevOps & Cloud, Browser & Automation, Image & Video, Search & Research, AI & LLMs, Productivity, Marketing & Sales, Communication, Data & Analytics, Finance & Crypto
Search and filter — by name, description, author, tags, triggers
Sort options: by name, by category
Featured skills curation with groups (Most Popular, New This Week, Developer Tools, Productivity)
Security risk display — safe/low/medium/high levels with flags and scores
Workspace skills screen — per-session skill management
Scheduled job management — cron-style agent automation
Create job dialog — schedule, prompt, name, delivery, skills, repeat config
Edit job dialog — modify existing jobs
Job operations: create, update, delete, pause, resume, trigger
Job output viewer — view execution results
Job state tracking — enabled/disabled, next/last run, success status
1.8 Settings Screens (/settings, /settings/providers)
Settings dialog — centralized configuration panel
Providers screen — manage AI provider connections
Provider wizard — guided setup for new providers
Endpoint
Method
Description
/api/send-stream
POST
Main streaming chat endpoint — routes to enhanced Claude or portable OpenAI mode
/api/send
POST
Non-streaming chat send
/api/sessions/send
POST
Session-specific send
/api/chat-events
GET
SSE chat event stream
/api/events
GET
Global SSE event bus (keepalive, real-time updates)
/api/history
GET
Chat history retrieval
Endpoint
Method
Description
/api/sessions
GET
List all sessions (paginated, max 50)
/api/sessions
POST
Create new session
/api/sessions
PATCH
Update session (rename)
/api/sessions
DELETE
Delete session
/api/sessions/$sessionKey/status
GET
Session status
/api/sessions/$sessionKey/active-run
GET
Active run for session
/api/session-status
GET
Session connection status
Endpoint
Method
Description
/api/files?action=list
GET
List directory tree with depth/entry limits
/api/files?action=read
GET
Read file content (text or base64 image)
/api/files?action=download
GET
Download file with Content-Disposition
/api/files
POST
Write/upload/mkdir/rename/delete files
/api/paths
GET
Path resolution and workspace info
Endpoint
Method
Description
/api/memory
GET
Get memory from Hermes Agent gateway
/api/memory/list
GET
List local memory markdown files
/api/memory/read
GET
Read specific memory file
/api/memory/search
GET
Search across memory files
/api/memory/write
POST
Write/update memory file
Endpoint
Method
Description
/api/skills
GET
List skills (paginated, filtered, sorted)
/api/skills
POST
Skill installation (currently disabled)
Endpoint
Method
Description
/api/models
GET
List available models (gateway + auth store)
/api/claude-config
GET
Read Hermes config.yaml and .env
/api/claude-config
PATCH
Update config.yaml and .env
/api/context-usage
GET
Token/context usage for a session
Endpoint
Method
Description
/api/claude-jobs
GET
List all jobs
/api/claude-jobs
POST
Create new job
/api/claude-jobs/$jobId
GET/POST/PATCH/DELETE
Job CRUD and actions (pause/resume/run/output)
Endpoint
Method
Description
/api/terminal-stream
POST
Create PTY session and stream SSE output
/api/terminal-input
POST
Send input to terminal session
/api/terminal-resize
POST
Resize terminal dimensions
/api/terminal-close
POST
Close terminal session
2.9 Auth & Infrastructure
Endpoint
Method
Description
/api/auth
POST
Password authentication (rate-limited: 5/min)
/api/auth-check
GET
Check authentication status
/api/ping
GET
Server ping/health
/api/connection-status
GET
Gateway connection status with capabilities
/api/gateway-status
GET
Detailed gateway capabilities
/api/start-agent
POST
Auto-start Claude agent process
/api/start-claude
POST
Start Hermes Agent gateway
/api/workspace
GET
Workspace auto-detection
Endpoint
Method
Description
/api/oauth/device-code
POST
Device code flow (Nous Portal)
/api/oauth/poll-token
POST
Poll for OAuth token completion
3.1 Core UI Primitives (src/components/ui/)
alert-dialog — confirmation dialogs
autocomplete — filterable autocomplete input
braille-spinner — loading indicator with braille animation
button — button variants (class-variance-authority)
collapsible — expandable/collapsible sections
command — command palette UI (cmdk-style)
dialog — modal dialogs
input — text input fields
menu — dropdown menus
preview-card — content preview cards
scroll-area — custom scrollable areas
switch — toggle switches
tabs — tabbed interfaces
three-dots-spinner — loading animation
toast — notification toasts
tooltip — hover tooltips
3.2 Prompt Kit (src/components/prompt-kit/)
chat-container — main chat layout wrapper
message — individual message rendering
markdown — rich markdown rendering
code-block — syntax-highlighted code with copy
prompt-input — chat input component
tool — tool call display
tool-indicator — tool execution status
thinking — thinking/reasoning block
thinking-indicator — animated thinking state
typing-indicator — typing animation
text-shimmer — text loading shimmer effect
scroll-button — scroll-to-bottom control
workspace-shell — main app layout shell
chat-panel — persistent side chat panel
chat-panel-toggle — show/hide chat panel
command-palette — global ⌘K command palette
slash-command-menu — / command autocomplete in chat
attachment-button — file attachment trigger
attachment-preview — attached file preview
export-menu — export chat as Markdown/JSON/Text
context-meter — token usage visualization
mode-selector — preset mode selection
save-mode-dialog / apply-mode-dialog / rename-mode-dialog / manage-modes-modal — full mode management UI
model-suggestion-toast — smart model recommendations
keyboard-shortcuts-modal — keyboard shortcut reference
global-shortcut-listener — system-wide keyboard shortcuts
terminal-shortcut-listener — terminal-specific shortcuts
connection-overlay — full-screen connection status
connection-startup-screen — initial loading/connection screen
backend-unavailable-state — offline fallback UI
claude-health-banner — gateway health indicator
claude-reconnect-banner — reconnection prompt
error-boundary — React error boundary
error-toast — error notification
loading-indicator — generic loading state
logo-loader — branded loading animation
status-indicator — colored status dots
empty-state — empty content placeholder
theme-toggle — light/dark theme switcher
mobile-tab-bar — bottom navigation for mobile
mobile-hamburger-menu — hamburger menu for mobile
mobile-sessions-panel — mobile session browser
mobile-page-header — mobile header bar
mobile-prompt — MobileSetupModal, MobilePromptTrigger
3.5 Specialized Components
memory-viewer/ — MemoryFileList, MemorySearch, MemoryEditor, MemoryPreview
file-explorer/ — file-explorer-sidebar, file-preview-dialog
terminal/ — terminal-panel, terminal-workspace, debug-panel, mobile-terminal-input
inspector/ — inspector-panel, activity-store
usage-meter/ — usage-meter, usage-meter-compact, usage-details-modal, context-alert-modal
search/ — search-modal, search-input, search-results, search-result-item, quick-actions
settings-dialog/ — settings-dialog
onboarding/ — claude-onboarding, onboarding-wizard, onboarding-tour, tour-steps, setup-step-content, provider-select-step
agent-chat/ — AgentChatModal, AgentChatHeader, AgentChatInput, AgentChatMessages
avatars/ — user-avatar, assistant-avatar
auth/ — login-screen
3.6 Provider & Model Components
provider-logo — provider brand logos
provider-model-icon — model-specific icons
agent-avatar — AI agent avatar
agent-card — agent info card
4. Configuration & Settings
4.1 User Settings (persisted via Zustand + localStorage)
Setting
Type
Default
Description
claudeUrl
string
''
Hermes Agent API URL
claudeToken
string
''
Bearer token
theme
system|light|dark
system
Color mode
accentColor
orange|purple|blue|green
blue
Accent color
editorFontSize
number
13
Monaco editor font size
editorWordWrap
boolean
true
Editor word wrap
editorMinimap
boolean
false
Editor minimap
notificationsEnabled
boolean
true
Sound/notifications
usageThreshold
number
80
Context usage warning %
smartSuggestionsEnabled
boolean
false
Smart model suggestions
preferredBudgetModel
string
''
Preferred cheap model
preferredPremiumModel
string
''
Preferred premium model
onlySuggestCheaper
boolean
false
Only suggest cheaper models
showSystemMetricsFooter
boolean
false
System metrics display
mobileChatNavMode
dock|integrated|scroll-hide
dock
Mobile nav behavior
4.2 Theme System — 8 Themes
Theme
Description
Mode
Claude Official
Navy and indigo flagship
Dark
Claude Official Light
Soft indigo light palette
Light
Claude Classic
Bronze accents on dark charcoal
Dark
Classic Light
Warm parchment with bronze
Light
Slate
Cool blue developer theme
Dark
Slate Light
GitHub-light with blue accents
Light
Mono
Clean monochrome grayscale
Dark
Mono Light
Bright monochrome grayscale
Light
4.3 Workspace State (Zustand, persisted)
Sidebar collapsed/expanded
File explorer collapsed/expanded
Chat focus mode
Active sub-page route
Chat panel open/closed + session key
Mobile keyboard state
Custom presets — save/load named configurations
Each mode stores: name, preferred model, smart suggestions toggle, budget/premium model prefs
Drift detection — alerts when settings diverge from applied mode
4.5 Environment Variables
Variable
Description
HERMES_API_URL
Backend API URL (default: http://127.0.0.1:8642)
CLAUDE_PASSWORD
Optional password protection for web UI
CLAUDE_WORKSPACE_DIR
Workspace root directory (default: ~/.hermes)
HERMES_AGENT_PATH
Path to hermes-agent directory
CLAUDE_DEFAULT_MODEL
Default model override
CLAUDE_ALLOWED_HOSTS
Allowed hosts (default: .ts.net)
ANTHROPIC_API_KEY
Anthropic API key passthrough (optional)
OPENAI_API_KEY
OpenAI API key passthrough (optional)
OPENROUTER_API_KEY
OpenRouter API key passthrough (optional)
GOOGLE_API_KEY
Google Gemini API key passthrough (optional)
HERMES_API_TOKEN
Auth token for gateway API_SERVER_KEY
BEARER_TOKEN
Bearer token for backend auth
PORT
Server port (default: 3002 dev, 3000 prod)
4.6 Claude Config Management
Read/write ~/.hermes/config.yaml — YAML config via web UI
Read/write ~/.hermes/.env — environment variables
Provider status with masked API keys
Auth store integration — reads from ~/.hermes/auth-profiles.json and ~/.openclaw/agents/main/agent/auth-profiles.json
5. Server-Side Architecture
5.1 Gateway Capability Probing
Two-tier capability model:
Core: health, chatCompletions, models, streaming
Enhanced: sessions, skills, memory, config, jobs
Three chat modes:
enhanced-claude — full Claude session API
portable — OpenAI-compatible /v1/chat/completions
disconnected — no usable backend
Auto-detection with port fallback (8642 → 8643)
Probe TTL — 30 second cache, periodic refresh
Feature gates — graceful degradation per capability
Server-side event bus for real-time updates
SSE broadcasting to all connected clients
Chat events: chunk, done, error, thinking, tool calls
5.3 Run Store (Persistence)
Persisted run state at ~/.hermes/webui-mvp/runs/
Run lifecycle: accepted → active → handoff → stalled → complete → error
Tool call tracking with phase management
Lifecycle event logging (max 40 per run)
Run timeout: 15 minutes
Python PTY helper (pty-helper.py) — real PTY without native node-pty addon
Session management: create, input, resize (SIGWINCH), close (SIGTERM → SIGKILL)
Event emitter pattern with early buffer for pre-listener output
5.5 Memory Browser (Server)
Filesystem-based memory browsing in ~/.hermes/
File filters: MEMORY.md, memory/, memories/
Markdown-only restriction
Path traversal prevention
Sort: MEMORY.md first, daily files by date descending, then by modification time
5.6 OpenAI-Compatible API Client
Streaming parser for /v1/chat/completions SSE
Support for reasoning/thinking content (DeepSeek, QwQ, etc.)
Automatic default model detection from /v1/models
Multimodal support (image_url content parts)
5.7 Hermes Agent Auto-Start
Auto-detects sibling hermes-agent/ directory
Resolves Python virtualenv (.venv, venv, system python3)
Spawns uvicorn with health polling (15 attempts, 1s interval)
Reads ~/.hermes/.env for agent configuration
5.8 Workspace Daemon (Optional)
Separate workspace daemon process on port 3099
Auto-restart with exponential backoff (max 20 retries)
Provides workspace-level APIs (checkpoints, agents, etc.)
6. Integrations & Provider Support
6.1 AI Providers (Provider Catalog)
Provider
Auth Types
Description
Anthropic
API Key, CLI Token
Claude models — Haiku, Sonnet, Opus
OpenAI
API Key
GPT and reasoning models
Google
API Key, OAuth
Gemini models
OpenRouter
API Key
Unified multi-provider access
MiniMax
API Key
Foundation models
Ollama
Local (no auth)
Local models
Custom
API Key
Any OpenAI-compatible server
6.2 Known Gateway Providers (Claude Config)
Nous Portal (OAuth device code flow)
OpenAI Codex (OAuth)
Anthropic (API key)
OpenRouter (API key)
Z.AI / GLM (API key)
Kimi / Moonshot (API key)
MiniMax / MiniMax CN (API key)
Ollama (local, no auth)
Custom OpenAI-compatible
Anthropic: Claude Sonnet 4, Claude Opus 4
OpenAI: GPT-4o
xAI: Grok 3
Context window database: Claude 4 (1M), Claude 3.x (200K), GPT-4o (128K), Gemini 2.x (1M), Qwen (32K–131K), Llama 3 (8K–128K), Mistral (32K–128K), DeepSeek (64K–128K)
Device code flow for Nous Portal
Token polling mechanism
Auth profile storage in ~/.hermes/auth-profiles.json
Multi-agent directory with capabilities tracking
Agent properties: model, provider, status (online/away/offline), avatar, system prompt
Agent capabilities: repo write, shell commands, git operations, browser, network
Agent stats: runs/tokens/cost today, success rate, avg response time
6.6 Workspace Checkpoints
Code review checkpoint system
Review actions: approve, approve-and-commit, approve-and-pr, approve-and-merge, reject, revise
Diff viewing with file-level additions/deletions
Verification checks: TypeScript (tsc), tests, lint, e2e
Run event timeline
7. UX Features & Interactions
7.1 Sound Notification System
Web Audio API synthesized sounds (no audio files):
Agent Spawned — ascending C5→E5 chime
Agent Complete — satisfying G5 ding
Agent Failed — low C3→A2 error tone
Chat Notification — soft E5 ping
Chat Complete — gentle E5→C5 descend
Alert — attention-grab A4→E5→A4
Thinking — subtle C6 tick
Configurable volume (0–1) and enable/disable
⌘K — Command palette
Global shortcuts via global-shortcut-listener
Terminal shortcuts via terminal-shortcut-listener
Session shortcuts — navigate between sessions
Keyboard shortcuts modal — discoverable reference
Web Speech API integration
Languages: configurable (default: en-US)
States: idle, listening, processing, error
Interim (partial) results support
Toggle on/off
navigator.vibrate(8) for mobile tap feedback
Global search modal with quick actions
Search input with keyboard navigation
Search results with highlighted matches
Session search across all chat history
Onboarding wizard — first-run setup flow
Onboarding tour — interactive guided tour (react-joyride)
Setup steps — provider selection, connection verification
Tour steps — feature highlights
Export conversations as Markdown, JSON, or Plain Text
7.8 Auto-Generated Session Titles
Automatic title generation from conversation content
7.9 Pinned Sessions & Models
Pin frequently used sessions for quick access
Pin preferred models
7.10 Smart Model Suggestions
Automatic model recommendations based on task
Budget vs premium model preferences
Model suggestion toast notifications
Optional password protection via CLAUDE_PASSWORD env var
Timing-safe password comparison
Cryptographic session tokens (32 bytes hex)
HTTP-only, SameSite=Strict cookies (30-day expiry)
Rate-limited login: 5 attempts/minute per IP
1-second delay on failed auth (brute force prevention)
Auth middleware on all API routes
Local request detection (127.0.0.1, ::1, Tailscale 100.x, LAN 192.168.x, 10.x)
requireLocalOrAuth for sensitive operations (file delete, terminal)
CSRF protection via Content-Type: application/json requirement
Path traversal prevention on file and memory routes
Zod schema validation on auth endpoints
Input sanitization on all user inputs
Sliding window rate limiter (in-memory, no external deps)
Per-endpoint limits: auth (5/min), files (30/min), terminal (10/min)
Auto-cleanup every 5 minutes
429 Too Many Requests responses
Safe error messages in production (hides internals)
Error boundaries in React
Graceful degradation on gateway unavailability
Full PWA with install prompts
iOS Safari "Add to Home Screen" support
Android Chrome install support
Desktop Chrome/Edge install support
9.2 Mobile-Specific Components
Mobile tab bar (bottom navigation)
Mobile hamburger menu
Mobile sessions panel
Mobile page header
Mobile terminal input
Mobile setup modal & prompt trigger
Mobile keyboard handling & inset tracking
Swipe navigation
9.3 Mobile Chat Nav Modes
Dock — iMessage-style (no nav in chat)
Integrated — chat input in nav pill
Scroll-hide — nav shows on scroll up
9.4 Tailscale Integration
First-class support for Tailscale remote access
Default allowed hosts include .ts.net
End-to-end encrypted mobile access
pnpm dev # Vite dev server with HMR on port 3002
pnpm build && pnpm start # Node.js server on port 3000
pnpm start:stable # Background process via scripts/start-stable.sh
pnpm stop:stable # Stop via scripts/stop-stable.sh
hermes-agent container — Python FastAPI gateway on port 8642
hermes-workspace container — Node.js web UI on port 3000
Health checks with retries
Environment file passthrough
Claude agent auto-start from sibling directory
Workspace daemon auto-start with crash recovery
Port fallback detection (8642 → 8643)
File/Directory Statistics
Category
Count
Total source files
~287
API route files
~35
React components
~100+
Custom hooks
~25
Server modules
~12
Library utilities
~20
Store files
3
Screen files
8
Layer
Technology
Framework
TanStack Start (React 19 + SSR)
Routing
TanStack Router (file-based)
Build
Vite 7
Styling
Tailwind CSS 4
State
Zustand 5 (persisted)
Data Fetching
TanStack React Query 5
Terminal
xterm.js 5 + Python PTY
Editor
Monaco Editor
Markdown
react-markdown + Shiki
Charts
Recharts 3
Animation
Motion (Framer Motion)
Validation
Zod
Icons
Hugeicons + Lobehub Icons
Tour
react-joyride
WebSocket
ws library
Config
YAML parser
Testing
Vitest + Testing Library
Generated from codebase analysis of /Users/aurora/hermes-workspace/