MCPcopy Index your code
hub / github.com/outsourc-e/hermes-workspace

github.com/outsourc-e/hermes-workspace @v2.3.0 sqlite

repository ↗ · DeepWiki ↗ · release v2.3.0 ↗
15,075 symbols 49,198 edges 773 files 233 documented · 2%
README

MseeP.ai Security Assessment Badge

Hermes Workspace

Hermes Workspace

Your AI agent's command center — chat, files, memory, skills, and terminal in one place.

Version License Node PRs Welcome

Not a chat wrapper. A complete workspace — orchestrate agents, browse memory, manage skills, and control everything from one interface.

v2 — zero-fork. Clone, don't fork. Runs on vanilla NousResearch/hermes-agent installed via Nous's own installer. Chat, sessions, memory, skills, jobs, MCP, terminal, dashboard, Agent View, and Operations are all in vanilla parity. Conductor currently requires an additional dashboard plugin not in upstream yet — the UI shows a clear placeholder when that endpoint isn't available (#262). Everything else works with zero patches.

Hermes Workspace


Swarm Mode

Hermes Agent Swarm turns the workspace into a live control plane: unlimited Hermes Agents, 1 orchestrator, 0 humans manually dispatching. Persistent tmux workers keep context across tasks, rotate safely, and report proof-bearing checkpoints. Role-based dispatch routes builders, reviewers, docs, research, ops, triage, QA, and lab lanes without turning Eric into the task router. A byte-verified review gate protects release branches before PRs ship. Autonomous PR/issue lanes, lab experiments, and the repair playbook keep the machine moving while humans handle judgment.

Start here: docs/swarm/

  • Orchestrator Chat — ask the control plane for one task, a decomposed mission, or a full broadcast.
  • Multi-Agent Control Plane — see persistent Hermes Agents, roles, state, runtime, and routing wires in one surface.
  • Kanban TaskBoard — plan backlog, ready, running, review, blocked, and done lanes without leaving the workspace.
  • Reports + Inbox — review checkpoints, blockers, handoffs, and ready-for-human decisions.
  • TUI View built in — attach to tmux-backed workers or fall back to a live shell/log stream.

✨ What's inside

  • 💬 Chat — Real-time SSE streaming, tool call rendering, multi-session, markdown + syntax highlighting
  • 🧠 Memory — Browse, search, and edit agent memory; markdown live editor
  • 🧩 Skills — Browse 2,000+ skills with origin badges, filters, source paths, marketplace
  • 🔌 MCP — Full /mcp page (catalog + marketplace + sources), or fallback to local config CRUD
  • 📁 Files + Terminal — Full workspace file browser with Monaco; cross-platform PTY terminal
  • 🎮 Operations — Multi-agent dashboard with profile presets (Sage/Trader/Builder/Scribe/Ops) and 'Needs setup' detection
  • 📡 Conductor — Mission dispatch + decomposition (requires upstream dashboard plugin, see #262)
  • 👥 Agent View — Live agent panel in chat with avatar, queue, history, usage meter
  • 🐝 Swarm Mode — Persistent tmux-backed Hermes Agent workers with role-based dispatch
  • 🗄️ Dashboard — Aggregated overview: sessions, model mix, cost ledger, attention card, ops strip
  • 🎨 Themes — Hermes, Nous, Bronze, Slate, Mono (light + dark)
  • 🔒 Security — Auth middleware on every route, CSP, path-traversal guard, fail-closed remote bind
  • 📱 PWA + Tailscale — Install as a native-feeling app; access from any device on your tailnet
  • ⚙️ Capability gates — Features that need upstream endpoints (Conductor) show a clean placeholder instead of failing mid-action

📸 Screenshots

Chat Conductor
Chat Conductor
Dashboard Memory
Dashboard Memory
Terminal Settings
Terminal Settings
Tasks Jobs
Tasks Jobs

🚀 Quick Start

Three paths — pick the one that matches you:

Path Best for Time
🐳 Docker Compose Self-hosters, home labs, "give me a compose gig" ~2 min
🌐 One-line install Local dev on macOS/Linux ~3 min
🔌 Attach to existing hermes-agent You already run Hermes Agent ~1 min

One-line install

curl -fsSL https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/install.sh | bash

This installs hermes-agent via Nous's official installer, clones this repo, sets up .env, and installs dependencies. Then:

hermes gateway run                  # terminal 1
cd ~/hermes-workspace && pnpm dev   # terminal 2

Open http://localhost:3000. That's it.


Already running hermes-agent? Attach the workspace to it

If you already have hermes-agent installed (via Nous's official installer, a source checkout, systemd, Docker, or another existing setup) and it's serving the gateway at http://<host>:8642, you don't need to reinstall anything — just point the workspace at it.

git clone https://github.com/outsourc-e/hermes-workspace.git
cd hermes-workspace
pnpm install
cp .env.example .env

# Point at your existing Hermes Agent services.
echo 'HERMES_API_URL=http://127.0.0.1:8642' >> .env
# Zero-fork installs also need the separate dashboard API for config/sessions/skills/jobs.
echo 'HERMES_DASHBOARD_URL=http://127.0.0.1:9119' >> .env

# If your gateway was started with API_SERVER_KEY (auth enabled), set the same value:
# echo 'HERMES_API_TOKEN=***' >> .env

pnpm dev                            # http://localhost:3000 (override with PORT=4000 pnpm dev)

Requirements on the agent side:

  • Gateway bound to an address the workspace can reach (typically API_SERVER_HOST=0.0.0.0 + the port exposed).
  • API_SERVER_ENABLED=true in ~/.hermes/.env (or the agent's env) so the gateway serves core APIs on :8642.
  • hermes dashboard running (default http://127.0.0.1:9119) for zero-fork installs. The dashboard provides config, sessions, skills, and jobs APIs.
  • If API_SERVER_KEY is set, the workspace must pass the same value via HERMES_API_TOKEN — otherwise leave both unset.

Verify both services before opening the workspace:

  • curl http://127.0.0.1:8642/health should return ok.
  • curl http://127.0.0.1:9119/api/status should return dashboard metadata.

Then start the workspace and complete onboarding — it should detect the gateway + dashboard pair and unlock the enhanced panes automatically.

Running on a remote host (Tailscale / VPN / LAN)

If the workspace and its browser live on different machines — e.g. the workspace runs on a Pi/Mac/home server and you access it from your phone over Tailscale — point HERMES_API_URL at the reachable backend address, not 127.0.0.1:

# On the server running the workspace + gateway:
echo 'HERMES_API_URL=http://100.x.y.z:8642' >> .env
echo 'HERMES_DASHBOARD_URL=http://100.x.y.z:9119' >> .env

# Also tell the gateway to listen on all interfaces so Tailscale peers can reach it.
# In ~/.hermes/.env (or wherever the gateway reads config):
echo 'API_SERVER_HOST=0.0.0.0' >> ~/.hermes/.env

Then restart the gateway, dashboard, and workspace. Hit the workspace from the remote device and the connection probe will use the Tailscale IP instead of localhost. Both HERMES_API_URL and HERMES_DASHBOARD_URL must be set to Tailscale/LAN-reachable URLs — setting only one will leave the other probing 127.0.0.1 and failing.

If you've already started the workspace, you can update both URLs from Settings → Connection without restarting. The values are persisted to ~/.hermes/workspace-overrides.json and take effect immediately (gateway capabilities are reprobed on save). Editing .env still works for pre-start config and for CI/containers.


Manual install

Hermes Workspace works with any OpenAI-compatible backend. If your backend also exposes Hermes Agent gateway APIs, enhanced features like sessions, memory, skills, and jobs unlock automatically.

Prerequisites

  • Node.js 22+nodejs.org
  • An OpenAI-compatible backend — local, self-hosted, or remote
  • Optional: Python 3.11+ if you want to run a Hermes Agent gateway locally

Step 1: Start your backend

Point Hermes Workspace at any backend that supports:

  • POST /v1/chat/completions
  • GET /v1/models recommended

Example Hermes Agent gateway setup (from scratch):

# Install hermes-agent via Nous's official installer
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

# Configure a provider + start the gateway
hermes setup
hermes gateway run

Our one-liner installer (below) does both steps automatically. If you're using another OpenAI-compatible server, just note its base URL.

Step 2: Install & Run Hermes Workspace

# In a new terminal
git clone https://github.com/outsourc-e/hermes-workspace.git
cd hermes-workspace
pnpm install
cp .env.example .env
printf '\nHERMES_API_URL=http://127.0.0.1:8642\n' >> .env
pnpm dev                   # Starts on http://localhost:3000

Verify: Open http://localhost:3000 and complete the onboarding flow. First connect the backend, then verify chat works. If your gateway exposes Hermes Agent APIs, advanced features appear automatically.

Environment Variables

# OpenAI-compatible backend URL
HERMES_API_URL=http://127.0.0.1:8642

# Optional: provider keys the Hermes Agent gateway can read at runtime.
# You only need the key(s) for whichever provider(s) you actually use.
# ANTHROPIC_API_KEY=***         # Anthropic
# OPENAI_API_KEY=sk-...                # GPT / o-series
# OPENROUTER_API_KEY=sk-or-v1-...      # OpenRouter (incl. free models)
# GOOGLE_API_KEY=AIza...               # Gemini
# (Ollama / LM Studio / local servers don't need a key)

# Optional: password-protect the web UI
# HERMES_PASSWORD=your_password

🧠 Local Models (Ollama, Atomic Chat, LM Studio, vLLM)

Hermes Workspace supports two modes with local models:

Portable Mode (Easiest)

Point the workspace directly at your local server — no Hermes Agent gateway needed.

Atomic Chat

# Start workspace pointed at Atomic Chat
HERMES_API_URL=http://127.0.0.1:1337/v1 pnpm dev

Download Atomic Chat, launch the desktop app, and make sure a model is loaded before starting Hermes Workspace.

Ollama

# Start Ollama
OLLAMA_ORIGINS=* ollama serve

# Start workspace pointed at Ollama
HERMES_API_URL=http://127.0.0.1:11434 pnpm dev

Chat works immediately. Sessions, memory, and skills show "Not Available" — that's expected in portable mode.

Enhanced Mode (Full Features)

Route through the Hermes Agent gateway for sessions, memory, skills, jobs, and tools.

Here are two explicit ~/.hermes/config.yaml examples for the local providers we support directly in the workspace:

Atomic Chat

provider: atomic-chat
model: your-model-name
custom_providers:
  - name: atomic-chat
    base_url: http://127.0.0.1:1337/v1
    api_key: atomic-chat
    api_mode: chat_completions

Ollama

provider: ollama
model: qwen3:32b
custom_providers:
  - name: ollama
    base_url: http://127.0.0.1:11434/v1
    api_key: ollama
    api_mode: chat_completions

You can adapt the same shape for other OpenAI-compatible local runners, but Atomic Chat and Ollama are the two built-in local paths documented in the workspace UI.

2. Enable the API server in ~/.hermes/.env:

API_SERVER_ENABLED=true

3. Start the gateway, dashboard, and workspace:

hermes gateway run          # Starts core APIs on :8642
hermes dashboard            # Starts dashboard APIs on :9119
HERMES_API_URL=http://127.0.0.1:8642 \
HERMES_DASHBOARD_URL=http://127.0.0.1:9119 \
pnpm dev

For authenticated gateways, also set HERMES_API_TOKEN in the workspace environment to the same value as API_SERVER_KEY.

All workspace features unlock automatically once both services are reachable — sessions persist, memory saves across chats, skills are available, and the dashboard shows real usage data.

Works with any OpenAI-compatible server — Atomic Chat, Ollama, LM Studio, vLLM, llama.cpp, LocalAI, etc. Just change the base_url and model in the config above.


🐳 Docker Quickstart

[Open in GitHub Codespaces](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=outsourc-e/hermes-work

Extension points exported contracts — how you extend this code

SessionStore (Interface)
* Persistent session token store. * * Tokens are held in memory for fast lookup and persisted to a JSON file * so the
src/server/auth-middleware.ts
Env (Interface)
(no doc)
playground-ws-worker/src/worker.ts
FileRoutesByFullPath (Interface)
(no doc)
src/routeTree.gen.ts
WebSocketServerOptions (Interface)
(no doc)
src/types/ws.d.ts
Window (Interface)
(no doc)
src/components/connection-startup-screen.tsx
PresetsRouteModule (Interface)
(no doc)
src/routes/api/mcp/-presets.test.ts
SoundPrefs (Interface)
(no doc)
src/lib/sounds.ts
AgoraWorldProps (Interface)
(no doc)
src/screens/agora/components/agora-world.tsx

Core symbols most depended-on inside this repo

push
called by 2525
electron/server-bundle.cjs
map
called by 2098
electron/server-bundle.cjs
trim
called by 1933
electron/server-bundle.cjs
includes
called by 1135
electron/server-bundle.cjs
slice
called by 1105
electron/server-bundle.cjs
get
called by 980
electron/server-bundle.cjs
json
called by 819
electron/server-bundle.cjs
set
called by 721
electron/server-bundle.cjs

Shape

Function 12,926
Method 1,875
Class 164
Interface 110

Languages

TypeScript100%
Python1%

Modules by API surface

electron/server-bundle.cjs10,910 symbols
src/screens/playground/components/playground-world-3d.tsx67 symbols
src/screens/chat/components/message-item.tsx54 symbols
src/screens/gateway/hooks/use-conductor-gateway.ts52 symbols
src/screens/chat/components/chat-composer.tsx52 symbols
src/screens/gateway/agents-screen.tsx46 symbols
src/screens/playground/playground-screen.tsx45 symbols
src/server/gateway.ts44 symbols
src/screens/gateway/conductor.tsx44 symbols
src/server/gateway-capabilities.ts42 symbols
src/routes/api/swarm-dispatch.ts38 symbols
src/components/settings-dialog/settings-dialog.tsx38 symbols

Dependencies from manifests, versioned

@base-ui/react1.1.0 · 1×
@cloudflare/workers-types4.20250403.0 · 1×
@hugeicons/core-free-icons3.1.1 · 1×
@hugeicons/react1.1.4 · 1×
@lobehub/icons5.0.1 · 1×
@lobehub/icons-static-png1.83.0 · 1×
@monaco-editor/react4.7.0 · 1×
@react-three/drei10.7.7 · 1×
@react-three/fiber9.6.1 · 1×
@react-three/postprocessing3.0.4 · 1×
@react-three/rapier2.2.0 · 1×
@tailwindcss/vite4.1.18 · 1×

Datastores touched

dbDatabase · 1 repos

For agents

$ claude mcp add hermes-workspace \
  -- python -m otcore.mcp_server <graph>