A beautiful, zero-dependency command center for OpenClaw AI agents.
When you run OpenClaw seriously β multiple agents, dozens of cron jobs, sub-agents spawning sub-agents, several Telegram groups and Whatsapp, Slack, and Discord channels, 10+ models, multiple agents and sub-agents β information gets scattered fast.
The problem: there was no single place to answer the obvious questions:
- Is my gateway actually running right now?
- How much have I spent today, and which model is burning the most?
- Which cron jobs ran, which failed, and when does the next one fire?
- What sessions are active and how much context are they consuming?
- Are my sub-agents doing useful work or spinning in circles?
- What's the cost trend over the last 7 days β am I accelerating?
The only way to answer these was digging through log files, running CLI commands, and mentally stitching together a picture from 5 different sources. That friction adds up.
The solution: a single local page that collects everything in one place β gateway health, costs, cron status, active sessions, sub-agent runs, model usage, git log β refreshed automatically, no login, no cloud, no external dependencies. Open a browser tab, get the full picture in seconds.
It's not trying to replace the OpenClaw CLI or Telegram interface. It's the at-a-glance overview layer that tells you whether everything is healthy and where your money and compute are going β so you can make decisions without hunting for data.
- π Header Bar β Bot name, online/offline status, auto-refresh countdown, theme picker
β οΈ Alerts Banner β Smart alerts for high costs, failed crons, high context usage, gateway offline- π System Health β Gateway status, PID, uptime, memory, compaction mode, active session count
- π° Cost Cards β Today's cost, all-time cost, projected monthly, cost breakdown donut chart
- β° Cron Jobs β All scheduled jobs with status, schedule, last/next run, duration, model
- π‘ Active Sessions β Recent sessions with model, type badges (DM/group/cron/subagent), context %, tokens
- π Token Usage & Cost β Per-model breakdown with 7d/30d/all-time tabs, usage bars, totals
- π€ Sub-Agent Activity β Sub-agent runs with cost, duration, status + token breakdown (7d/30d tabs)
- π Charts & Trends β Cost trend line, model cost breakdown bars, sub-agent activity β all pure SVG, 7d/30d toggle
- π§© Bottom Row β Available models grid, skills list, git log
- π On-Demand Refresh β
server.pyrefreshes data when you open the dashboard (no stale data) - β±οΈ Auto-Refresh β Page auto-refreshes every 60 seconds with countdown timer
- π¨ 6 Built-in Themes β 3 dark (Midnight, Nord, Catppuccin Mocha) + 3 light (GitHub, Solarized, Catppuccin Latte), switchable from the UI
- ποΈ Glass Morphism UI β Subtle transparency and hover effects
- π± Responsive β Adapts to desktop, tablet, and mobile
- π Local Only β Runs on localhost, no external dependencies
- π§ Cross-Platform β macOS and Linux
- β‘ Zero Dependencies β Pure HTML/CSS/JS frontend, Python stdlib backend
curl -fsSL https://raw.githubusercontent.com/mudrii/openclaw-dashboard/main/install.sh | bashThis will:
- Install to
~/.openclaw/dashboard - Create a default config
- Run initial data refresh
- Start
server.pyas a system service - Open http://127.0.0.1:8080
# Clone the repo
git clone https://github.com/mudrii/openclaw-dashboard.git ~/.openclaw/dashboard
cd ~/.openclaw/dashboard
# Create your config
cp examples/config.minimal.json config.json
nano config.json # Set your bot name
# Start the server (refreshes data on-demand)
python3 server.py &
# Or bind to LAN for access from other devices
python3 server.py --bind 0.0.0.0 &
# Open in browser
open http://127.0.0.1:8080 # macOS
xdg-open http://127.0.0.1:8080 # LinuxClick the π¨ button in the header to switch themes instantly β no reload or server restart needed. Choice persists via localStorage.
| Theme | Type | Vibe |
|---|---|---|
| π Midnight | Dark | Original glass morphism (default) |
| ποΈ Nord | Dark | Arctic blue, calm, great for long sessions |
| πΈ Catppuccin Mocha | Dark | Warm pastels, easy on eyes |
| βοΈ GitHub Light | Light | Clean, professional, high readability |
| π Solarized Light | Light | Scientifically optimized contrast |
| π» Catppuccin Latte | Light | Soft pastels |
Add your own themes by editing themes.json. Each theme defines 19 CSS color variables:
{
"my-theme": {
"name": "My Theme",
"type": "dark",
"icon": "π―",
"colors": {
"bg": "#1a1a2e",
"surface": "rgba(255,255,255,0.03)",
"surfaceHover": "rgba(255,255,255,0.045)",
"border": "rgba(255,255,255,0.06)",
"accent": "#e94560",
"accent2": "#0f3460",
"green": "#4ade80",
"yellow": "#facc15",
"red": "#f87171",
"orange": "#fb923c",
"purple": "#a78bfa",
"text": "#e5e5e5",
"textStrong": "#ffffff",
"muted": "#737373",
"dim": "#525252",
"darker": "#404040",
"tableBg": "rgba(255,255,255,0.025)",
"tableHover": "rgba(255,255,255,0.05)",
"scrollThumb": "rgba(255,255,255,0.1)"
}
}
}server.py β HTTP server + /api/refresh endpoint
βββ index.html β Single-page dashboard (fetches /api/refresh)
βββ themes.json β Theme definitions (user-editable)
βββ refresh.sh β Data collection script (called by server.py)
βββ data.json β Generated data (auto-refreshed)
When you open the dashboard, index.html calls /api/refresh. The server runs refresh.sh (with 30s debounce) to collect fresh data from your OpenClaw installation, then returns the JSON. No cron jobs needed.
Edit config.json:
{
"bot": {
"name": "My Bot",
"emoji": "π€"
},
"theme": {
"preset": "nord"
},
"panels": {
"kanban": false
},
"server": {
"port": 8080,
"host": "127.0.0.1"
},
"openclawPath": "~/.openclaw"
}| Key | Default | Description |
|---|---|---|
bot.name |
"OpenClaw Dashboard" |
Dashboard title |
bot.emoji |
"π¦" |
Avatar emoji |
theme.preset |
"midnight" |
Default theme (midnight, nord, catppuccin-mocha, github-light, solarized-light, catppuccin-latte) |
panels.* |
true |
Show/hide individual panels |
refresh.intervalSeconds |
30 |
Debounce interval for refresh |
alerts.dailyCostHigh |
50 |
Daily cost threshold for high alert ($) |
alerts.dailyCostWarn |
20 |
Daily cost threshold for warning alert ($) |
alerts.contextPct |
80 |
Context usage % threshold for alerts |
alerts.memoryMb |
640 |
Gateway memory threshold (MB) for alerts |
server.port |
8080 |
Server port (also --port / -p flag or DASHBOARD_PORT env) |
server.host |
"127.0.0.1" |
Server bind address (also --bind / -b flag or DASHBOARD_BIND env) |
openclawPath |
"~/.openclaw" |
Path to OpenClaw installation |
See docs/CONFIGURATION.md for full details.
Full dashboard view β all sections at a glance:
Real-time bot status, gateway uptime, memory usage, active session count, today's cost, all-time spend, projected monthly cost, and a per-model cost breakdown donut chart. Smart alert banners surface high costs, failed crons, and context overflows automatically.
Three always-visible SVG charts with 7d/30d toggle: cost trend over time, per-model cost breakdown bars, and sub-agent activity volume. No external chart libraries β pure inline SVG.
All scheduled jobs with status badges (active/idle/error), schedule expression, last run time, next run, duration, and the model used. At-a-glance view of your automation health.
Live sessions with model, type badges (DM / group / subagent), context usage %, and token count. Above the session list: a visual agent hierarchy tree showing parent β sub-agent β sub-sub-agent relationships with live/idle status and trigger labels β updated every refresh.
Per-model token and cost breakdown with 7d / 30d / all-time tabs. Includes input tokens, output tokens, cache reads, and total cost per model β sortable at a glance.
All sub-agent runs with cost, duration, status, and token breakdown. Separate 7d/30d tabs. Useful for tracking which tasks spawn the most agents and where spend is concentrated.
Quick reference panel showing all configured models, active skills, and the last 5 git commits from your OpenClaw workspace β so you always know what's deployed.
Full agent setup at a glance: model routing chain (primary β fallbacks), sub-agent routing by purpose (General / Dev+Coding / Work), agent details table with per-agent fallbacks, agent bindings with resolved group names, runtime config (compaction, memory flush), and subagent limits (max depth, max children/agent).
./uninstall.shOr manually:
# macOS
launchctl unload ~/Library/LaunchAgents/com.openclaw.dashboard.plist
rm -rf ~/.openclaw/dashboard
# Linux
systemctl --user stop openclaw-dashboard
rm -rf ~/.openclaw/dashboard- Python 3.6+ β Backend server and data collection
- OpenClaw β Installed at
~/.openclaw(docs) - macOS 10.15+ or Linux (Ubuntu 18.04+, Debian 10+)
- Modern web browser
- New: Dynamic channels panel renders all configured/runtime channels (Slack, Discord, Telegram, WhatsApp, and unknown future channels)
- Improved: Connected/Health now show explicit
Unknownfallback when runtime signal is absent - New: Runtime channel-status backfill from recent session activity (marks active channels as connected/health=active when explicit status is missing)
- New: Agent Bindings includes inferred IMPLICIT routes for channels without explicit binding entries
- Quality: Generic single-agent and multi-agent compatibility validated
- Security: XSS-safe escaping preserved for all dynamic channel/binding values
- Tests: 46/46 passing, independently validated with Opus
- New: Section dirty-checking β
prevDsnapshot +sectionChanged()skips unchanged DOM sections on every refresh - New:
requestAnimationFramebatching for render calls - New: Scroll position preservation for cron and session tables
- Fixed: Tab switching (7d/30d/today) correctly triggers re-render after dirty-check introduction
- Fixed: Cross-tab dirty-check contamination between token usage and sub-token sections
- Fixed: Invalid
chartDayskey insectionChanged(),t.colorsnull guard in theme menu - New: Full ATDD test suite β 44 acceptance criteria across 4 test files
- New:
ARCHITECTURE.mdβ clean module design for future refactor - New:
TODO.mdβ backlog with version plan - New: GitHub link + version badge in header
- New: "Why This Exists" section in README
- New: π³ Agent Hierarchy Tree in Active Sessions β 3-level CSS indented cards showing parentβchild agent relationships
- New: Sub-agent Routing section in Model Routing panel
- Improved: Agent Bindings redesign β resolved group names + main agent catch-all display
- New: Fallbacks column in Agent Details table
- New: Subagent Limits panel
- Improved: Font size consistency fixes across Agent Config section
- Improved: Runtime Config channel rows compact layout
- New: π Charts & Trends section β 3 always-visible pure SVG charts (cost trend, model breakdown, sub-agent activity)
- New: 7d/30d time filter tabs on Token Usage, Sub-Agent Activity, and Sub-Agent Token Breakdown panels
- New: Charts have their own 7d/30d toggle, default to 7 days
- New: Daily aggregation in
refresh.shβ 30 days ofdailyChartdata with per-model cost breakdown - New:
models_7d,models_30d,subagent_7d,subagent_30ddata buckets - Improved:
refresh.shnow collects 35 data keys for richer time-series analysis
- New: π¨ Multi-theme support β 6 built-in themes (3 dark + 3 light)
- New: Theme switcher in header bar β instant CSS variable swap, no reload needed
- New:
themes.jsonβ external theme definitions, user-editable for custom themes - New: Themes persist via
localStorageacross page refreshes - New:
TECHNICAL.mdβ comprehensive developer documentation (architecture, data pipeline, schema, security) - Improved: Replaced ~20 hardcoded color values with CSS custom properties for full theme support
- New:
--bind/-bflag for LAN access (--bind 0.0.0.0) - New:
--port/-pflag for custom port - New:
--version/-Vflag - New:
DASHBOARD_BINDandDASHBOARD_PORTenvironment variables - New:
config.jsonsupport forserver.hostandserver.portsettings - New:
refresh.intervalSecondsconfig option for debounce tuning - New: Auto-detect and display LAN IP when binding to
0.0.0.0 - Improved: Config priority chain: CLI flags > env vars > config.json > defaults
- Improved:
--helpwith usage examples
- New: Complete UI redesign with glass morphism dark theme
- New:
server.pywith on-demand/api/refreshendpoint (replacespython3 -m http.server) - New: 10 dashboard panels (up from 4)
- New: Sub-agent activity tracking with cost and token breakdown
- New: Smart alerts system (cost warnings, failed crons, high context, gateway offline)
- New: System health row (gateway, PID, uptime, memory, compaction, sessions)
- New: Cost donut chart with per-model breakdown
- New: Kanban board for task tracking
- New: Active sessions panel with context % bars and type badges
- New: Git log panel
- New: Auto-refresh with 60s countdown
- Improved: Token usage tables with today/all-time toggle
- Improved:
refresh.shauto-discovers all sessions, crons, models, skills - Improved: Responsive layout for mobile/tablet
- Initial release with basic token usage and cron panels
See CONTRIBUTING.md for guidelines.
MIT License β see LICENSE
Made with π¦ for the OpenClaw community









