- name
- rts-dashboard
- description
- RTS (Real-Time Strategy) style monitoring dashboard for OpenClaw. Provides a browser-based tactical command center with real-time visualization of agents, skills, sessions, cron jobs, and system vitals. Features include a tactical map with active agents, radar scan animation, agent/skill detail panels, and chat messaging via Gateway WebSocket (chat.send). Use when the user wants to monitor OpenClaw status visually, launch a dashboard, or view agents/sessions/skills in a game-style UI.
RTS Dashboard
A StarCraft/C&C-inspired tactical command center for OpenClaw monitoring.
Agent Actions
Start Dashboard
When the user wants to open/view/launch the dashboard, or when visiting 127.0.0.1:4320 fails:
- Check if already running:
Get-NetTCPConnection -LocalPort 4320 -ErrorAction SilentlyContinue- If not running, start it in background:
cd "<skill_dir>"; node server.jsUse exec with background: true and yieldMs: 3000, then check logs to confirm ⚡ Online message.
- If
node_modules/is missing, runnpm installfirst. - Tell the user:
http://127.0.0.1:4320is ready.
Stop Dashboard
Get-NetTCPConnection -LocalPort 4320 | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force }Quick Start (Manual)
cd rts-dashboard
npm install
node server.jsOpen http://127.0.0.1:4320 in browser.
Requirements
- Node.js 18+
- OpenClaw Gateway running (default port 18789)
wsnpm package (auto-installed vianpm install)
Features
- Tactical map: Active agents as diamond nodes with orbiting skill dots and trail animation
- Left panel: Full agent list + skill library with search
- Right panel: System vitals (CPU/RAM), gateway status, event logs, selected target details
- Agent detail: Model, current task, deployed skills, recent conversation
- Skill detail: Description, use cases, related agents
- Chat bar: Send messages to agents via Gateway WebSocket
chat.sendRPC - Cron jobs: Display scheduled tasks with status on the map
- 5-min cooldown: Agents remain visible for 5 minutes after going offline (amber blink + countdown)
- CRT scan line + radar sweep + grid: Full military-UI aesthetic
Configuration
Environment variables (all optional):
| Variable | Default | Description |
|---|---|---|
RTS_PORT | 4320 | Dashboard HTTP port |
OPENCLAW_GATEWAY_PORT | 18789 | Gateway port |
OPENCLAW_HOME | ~/.openclaw | OpenClaw home directory |
OPENCLAW_GATEWAY_TOKEN | (from config) | Gateway auth token |
Authentication
The dashboard implements Ed25519 device signing for Gateway WebSocket authentication:
- On first launch, generates a keypair and saves to
.device-keys.json - Signs each
connect.challengenonce using v3 protocol - Gateway token is auto-discovered from
OPENCLAW_GATEWAY_TOKENenv var orgateway.auth.tokeninopenclaw.json - Localhost connections are auto-approved by Gateway (no manual pairing needed)
- No
dangerouslyDisableDeviceAuthorallowInsecureAuthrequired
Cross-Platform
- OpenClaw installation path auto-detected via
require.resolve→which/where→npm root -g→ fallback paths - Skill directories:
~/.agents/skills/(user) +{openclaw}/skills/(built-in) +{openclaw}/extensions/*/skills/(extensions) - Agent/skill config parsed via
JSON.parse(robust, no regex) - Works on Windows, macOS, and Linux
Gateway Requirements
The dashboard needs the Gateway to allow its WebSocket origin:
{
gateway: {
controlUi: {
allowedOrigins: ["http://127.0.0.1:4320"]
}
}
}This is the only Gateway config change needed. Apply with openclaw config set gateway.controlUi.allowedOrigins '["http://127.0.0.1:4320"]' or via the Control UI config panel.
Data Sources (refreshed every 3 seconds)
- Agents:
~/.openclaw/openclaw.json→agents.list - Skills: Filesystem scan of skill directories
- Active sessions:
.jsonl.lockfiles in~/.openclaw/agents/*/sessions/ - System vitals: Node.js
osmodule (CPU delta sampling every 2s) - Gateway status: HTTP GET to gateway root
- Cron jobs:
~/.openclaw/cron/jobs.json
File Structure
rts-dashboard/
├── SKILL.md # This file
├── server.js # Node.js server (HTTP + WebSocket)
├── package.json # Dependencies (ws only)
└── public/
└── index.html # Single-file dashboard (HTML + CSS + Canvas JS)