| name | hermes-workspace-ai-agent-ui |
| description | Native web workspace for Hermes Agent with chat, terminal, memory, skills, inspector, and multi-agent orchestration |
| triggers | ["set up hermes workspace","configure hermes agent ui","connect workspace to hermes gateway","enable swarm mode for multiple agents","customize hermes workspace theme","troubleshoot hermes workspace connection","deploy hermes workspace with docker","configure conductor missions"] |
Hermes Workspace AI Agent UI
Skill by ara.so — Hermes Skills collection.
Hermes Workspace is a native web interface for Hermes Agent that provides chat, terminal, memory browser, skills catalog, MCP integration, multi-agent orchestration, and a complete control plane for autonomous AI workflows. Unlike chat wrappers, it's a full workspace with file browsing, persistent sessions, role-based agent dispatch, and swarm mode for managing multiple Hermes Agent workers.
What It Does
- Chat Interface: Real-time SSE streaming, tool call rendering, multi-session support, markdown + syntax highlighting
- Memory Browser: Search, edit, and manage agent memory with live markdown editor
- Skills Catalog: Browse 2,000+ skills with origin badges, filters, source paths
- MCP Integration: Full Model Context Protocol catalog, marketplace, and source management
- Terminal & Files: Monaco-powered file browser and cross-platform PTY terminal
- Multi-Agent Dashboard: Manage multiple Hermes Agent instances with profile presets (Sage/Trader/Builder/Scribe/Ops)
- Swarm Mode: Persistent tmux-backed agent workers with role-based dispatch and Kanban task board
- Conductor: Mission decomposition and dispatch with fallback to native swarm orchestration
- PWA Support: Install as native app, access over Tailscale
Installation
Docker Compose (Recommended for Self-Hosting)
git clone https://github.com/outsourc-e/hermes-workspace.git
cd hermes-workspace
docker-compose up -d
One-Line Install (macOS/Linux)
curl -fsSL https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/install.sh | bash
hermes gateway run
cd ~/hermes-workspace && pnpm dev
Manual Installation
git clone https://github.com/outsourc-e/hermes-workspace.git
cd hermes-workspace
pnpm install
cp .env.example .env
echo 'HERMES_API_URL=http://127.0.0.1:8642' >> .env
echo 'HERMES_DASHBOARD_URL=http://127.0.0.1:9119' >> .env
pnpm dev
Attach to Existing Hermes Agent
If you already have a Hermes Agent gateway running:
git clone https://github.com/outsourc-e/hermes-workspace.git
cd hermes-workspace
pnpm install
cp .env.example .env
echo 'HERMES_API_URL=http://127.0.0.1:8642' >> .env
echo 'HERMES_DASHBOARD_URL=http://127.0.0.1:9119' >> .env
echo 'HERMES_API_TOKEN=your_api_server_key' >> .env
pnpm dev
Configuration
Environment Variables
HERMES_API_URL=http://127.0.0.1:8642
HERMES_DASHBOARD_URL=http://127.0.0.1:9119
HERMES_API_TOKEN=your_api_server_key
HERMES_PASSWORD=your_password
OPENAI_API_KEY=sk-...
OPENROUTER_API_KEY=sk-or-v1-...
GOOGLE_API_KEY=AIza...
ANTHROPIC_API_KEY=sk-ant-...
PORT=3000
Gateway Requirements
For full functionality, the Hermes Agent gateway needs:
API_SERVER_ENABLED=true
API_SERVER_HOST=0.0.0.0
API_SERVER_PORT=8642
API_SERVER_KEY=your_secret_key
Start gateway and dashboard:
hermes gateway run
hermes dashboard
Remote Access (Tailscale/VPN)
For access from remote devices:
echo 'HERMES_API_URL=http://100.x.y.z:8642' >> .env
echo 'HERMES_DASHBOARD_URL=http://100.x.y.z:9119' >> .env
echo 'API_SERVER_HOST=0.0.0.0' >> ~/.hermes/.env
Usage Patterns
Connecting to Local Models
Ollama
OLLAMA_ORIGINS=* ollama serve
HERMES_API_URL=http://127.0.0.1:11434 pnpm dev
LM Studio
HERMES_API_URL=http://127.0.0.1:1234/v1 pnpm dev
Atomic Chat
HERMES_API_URL=http://127.0.0.1:1337/v1 pnpm dev
Swarm Mode Setup
Enable multi-agent orchestration:
cd ~/hermes-workspace
pnpm swarm:start
cat docs/swarm/README.md
API Integration
For programmatic access:
import { NextRequest, NextResponse } from 'next/server';
export async function POST(req: NextRequest) {
const { message, sessionId } = await req.json();
const response = await fetch(`${process.env.HERMES_API_URL}/v1/chat/completions`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.HERMES_API_TOKEN || ''}`
},
body: JSON.stringify({
model: 'hermes-3',
messages: [{ role: 'user', content: message }],
stream: true
})
});
return new NextResponse(response.body);
}
Custom Theme Configuration
Create or modify themes in src/styles/themes:
export const customTheme = {
name: 'custom',
colors: {
background: '#0a0a0a',
foreground: '#ffffff',
primary: '#6366f1',
secondary: '#8b5cf6',
accent: '#ec4899',
muted: '#374151',
border: '#1f2937'
},
fonts: {
sans: 'Inter, system-ui, sans-serif',
mono: 'JetBrains Mono, monospace'
}
};
Docker Deployment
version: '3.8'
services:
hermes-workspace:
build: .
ports:
- "3000:3000"
environment:
- HERMES_API_URL=http://hermes-gateway:8642
- HERMES_DASHBOARD_URL=http://hermes-gateway:9119
- HERMES_API_TOKEN=${HERMES_API_TOKEN}
depends_on:
- hermes-gateway
volumes:
- ./data:/app/data
hermes-gateway:
image: nousresearch/hermes-agent:latest
ports:
- "8642:8642"
- "9119:9119"
environment:
- API_SERVER_ENABLED=true
- API_SERVER_HOST=0.0.0.0
- API_SERVER_KEY=${HERMES_API_TOKEN}
- OPENAI_API_KEY=${OPENAI_API_KEY}
volumes:
- ./hermes-data:/root/.hermes
Conductor Mission Dispatch
const dispatchMission = async (mission: string) => {
const response = await fetch('/api/conductor/dispatch', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
mission,
mode: 'auto',
decompose: true
})
});
const result = await response.json();
return result;
};
await dispatchMission('Review and merge PR #42, update docs');
Key Commands
Development
pnpm dev
pnpm build
pnpm start
pnpm test
pnpm lint
pnpm type-check
Swarm Management
pnpm swarm:start
pnpm swarm:stop
pnpm swarm:status
pnpm swarm:attach <worker-name>
Docker
docker build -t hermes-workspace .
docker run -p 3000:3000 \
-e HERMES_API_URL=http://gateway:8642 \
-e HERMES_DASHBOARD_URL=http://gateway:9119 \
hermes-workspace
docker-compose up -d
docker-compose logs -f
docker-compose down
Troubleshooting
Connection Issues
curl http://127.0.0.1:8642/health
curl http://127.0.0.1:9119/api/status
hermes gateway run --verbose
pnpm dev
Authentication Failures
API_SERVER_KEY=your_secret
HERMES_API_TOKEN=your_secret
Features Not Appearing
ps aux | grep "hermes dashboard"
echo $HERMES_DASHBOARD_URL
pkill -f "hermes gateway"
pkill -f "hermes dashboard"
hermes gateway run &
hermes dashboard &
Swarm Workers Not Starting
tmux ls
ps aux | grep hermes
tail -f ~/.hermes/logs/worker-*.log
pnpm swarm:stop
rm -rf ~/.hermes/swarm-state
pnpm swarm:start
Memory/Performance Issues
NODE_OPTIONS="--max-old-space-size=4096" pnpm dev
rm -rf .next
pnpm build
docker stats
Remote Access Not Working
grep API_SERVER_HOST ~/.hermes/.env
curl http://<tailscale-ip>:8642/health
sudo ufw status
sudo ufw allow 8642/tcp
sudo ufw allow 9119/tcp
tailscale status
ping <tailscale-ip>
Build Errors
rm -rf node_modules .next pnpm-lock.yaml
pnpm install
pnpm build
node --version
pnpm type-check
Advanced Configuration
Custom Skills Integration
export HERMES_SKILLS_PATH=/path/to/custom/skills
Persistent Sessions
tar -czf sessions-backup.tar.gz ~/.hermes/sessions/
tar -xzf sessions-backup.tar.gz -C ~/
Custom API Routes
import { NextRequest } from 'next/server';
export async function POST(req: NextRequest) {
const data = await req.json();
const response = await fetch(`${process.env.HERMES_API_URL}/custom`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Custom-Header': 'value'
},
body: JSON.stringify(data)
});
return response;
}
Resources