# 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 --- ## Table of Contents 1. [Frontend Screens & Features](#1-frontend-screens--features) 2. [Backend API Endpoints](#2-backend-api-endpoints) 3. [UI Components Library](#3-ui-components-library) 4. [Configuration & Settings](#4-configuration--settings) 5. [Server-Side Architecture](#5-server-side-architecture) 6. [Integrations & Provider Support](#6-integrations--provider-support) 7. [UX Features & Interactions](#7-ux-features--interactions) 8. [Security Features](#8-security-features) 9. [Mobile & PWA Features](#9-mobile--pwa-features) 10. [Deployment Options](#10-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 ### 1.7 Jobs Screen (`/jobs`) - **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 --- ## 2. Backend API Endpoints ### 2.1 Chat & Messaging | 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 | ### 2.2 Sessions | 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 | ### 2.3 Files | 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 | ### 2.4 Memory | 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 | ### 2.5 Skills | Endpoint | Method | Description | | ------------- | ------ | ----------------------------------------- | | `/api/skills` | GET | List skills (paginated, filtered, sorted) | | `/api/skills` | POST | Skill installation (currently disabled) | ### 2.6 Models & Config | 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 | ### 2.7 Jobs | 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) | ### 2.8 Terminal | 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 | ### 2.10 OAuth | Endpoint | Method | Description | | ------------------------ | ------ | ------------------------------- | | `/api/oauth/device-code` | POST | Device code flow (Nous Portal) | | `/api/oauth/poll-token` | POST | Poll for OAuth token completion | --- ## 3. UI Components Library ### 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 ### 3.3 Feature Components - **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 ### 3.4 Navigation & Layout - **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 ### 4.4 Modes System - **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 ### 5.2 Chat Event Bus - 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 ### 5.4 Terminal Sessions - 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 ### 6.3 Well-Known Models - **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) ### 6.4 OAuth Integration - **Device code flow** for Nous Portal - Token polling mechanism - Auth profile storage in `~/.hermes/auth-profiles.json` ### 6.5 Workspace Agents - 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 ### 7.2 Keyboard Shortcuts - **⌘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 ### 7.3 Voice Input - Web Speech API integration - Languages: configurable (default: en-US) - States: idle, listening, processing, error - Interim (partial) results support - Toggle on/off ### 7.4 Haptic Feedback - `navigator.vibrate(8)` for mobile tap feedback ### 7.5 Search - **Global search modal** with quick actions - **Search input** with keyboard navigation - **Search results** with highlighted matches - **Session search** across all chat history ### 7.6 Onboarding - **Onboarding wizard** — first-run setup flow - **Onboarding tour** — interactive guided tour (react-joyride) - **Setup steps** — provider selection, connection verification - **Tour steps** — feature highlights ### 7.7 Export - 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 --- ## 8. Security Features ### 8.1 Authentication - 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) ### 8.2 Authorization - 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) ### 8.3 Input Validation - 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 ### 8.4 Rate Limiting - 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 ### 8.5 Error Handling - Safe error messages in production (hides internals) - Error boundaries in React - Graceful degradation on gateway unavailability --- ## 9. Mobile & PWA Features ### 9.1 Progressive Web App - 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 --- ## 10. Deployment Options ### 10.1 Local Development ```bash pnpm dev # Vite dev server with HMR on port 3002 ``` ### 10.2 Production Build ```bash pnpm build && pnpm start # Node.js server on port 3000 ``` ### 10.3 Stable Mode ```bash pnpm start:stable # Background process via scripts/start-stable.sh pnpm stop:stable # Stop via scripts/stop-stable.sh ``` ### 10.4 Docker Compose - **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 ### 10.5 Auto-Start Features - 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 | --- ## Technology Stack | 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/`_