Dashboard

The Learning dashboard is a self-contained HTML page served on-the-fly by the gateway. No files are written to disk.

Opening the Dashboard

openclaw learning dashboard

This prints the dashboard URL:

Dashboard: http://localhost:18789/__openclaw__/api/learning/dashboard

Open the URL in your browser.

Custom Host and Port

openclaw learning dashboard --host 10.0.0.5 --port 9999

Or set the environment variable:

export OPENCLAW_GATEWAY_HOST=10.0.0.5
openclaw learning dashboard

Dashboard Sections

Summary Cards

Five stat cards at the top:

Card Description
Traces Total number of run traces recorded
Arms Total number of arm posteriors
Total Tokens Sum of all token usage across runs
Token Savings Percentage reduction vs. baseline runs (green = positive, red = negative)
Date Range Time span of recorded traces

Convergence Chart

Line chart showing per-arm posterior means over time. Each arm gets a colored line. Arms that converge to high means are valuable; arms that converge to low means are candidates for exclusion.

Data source: GET /timeseries?metric=convergence&window=1h

Baseline vs Selected

Bar chart comparing baseline runs and selected runs on two metrics:

  • Avg Tokens — Average token usage per run
  • Avg Duration (s) — Average response time

Lower values for selected runs indicate the learning layer is saving tokens and reducing latency.

Data source: GET /summary (baseline object)

Token Usage Over Time

Area chart showing average tokens per run over time buckets. A downward trend after switching to active mode indicates successful optimization.

Data source: GET /timeseries?metric=tokens&window=1h

Run Distribution

Doughnut chart showing the proportion of baseline vs. selected runs. Should roughly match the configured baselineRate (default 10% baseline, 90% selected).

Data source: GET /summary (baseline object)

Reference Heatmap

Canvas-rendered grid showing arm outcomes across recent traces:

Color Meaning
Green (#2FBF71) Arm was included and referenced (success)
Dark green (#2a4a3e) Arm was included but not referenced (failure)
Dark red (#4a2a3e) Arm was explicitly excluded
Background (#1a1a2e) Arm not present in this trace

Rows are arms, columns are recent traces (up to 50). This gives a visual summary of which arms are consistently referenced.

Data source: GET /posteriors + GET /traces?limit=50

Posteriors Table

Table showing all arm posteriors with:

Column Description
Arm Arm ID with badges (SEED for seed arms, EXPLORE for underexplored)
Mean Posterior mean (3 decimal places)
Credible Interval (95%) Visual bar + numeric range
Pulls Total observations
Confidence Low (red), Medium (yellow), or High (green)

Sorted by mean descending. Shows up to 20 arms.

Data source: GET /posteriors

Auto-Refresh

The dashboard automatically refreshes every 30 seconds. All six API endpoints are fetched in parallel on each refresh cycle.

Theme

The dashboard uses a dark theme with these primary colors:

Color Hex Usage
Background #1a1a2e Page background
Card background #16213e Stat cards, chart boxes, tables
Accent #FF5A2D Primary data color, stat values
Success #2FBF71 Positive savings, referenced arms, seed badges
Warning #FFB020 Underexplored badges, medium confidence
Error #E23D2D Negative savings, low confidence
Muted #8B7F77 Labels, axis ticks, secondary text

Troubleshooting

No Data Displayed

  • Ensure the gateway is running: openclaw gateway run
  • Check that learning is enabled: openclaw learning status
  • Generate some traces by sending agent messages

Charts Not Rendering

  • Ensure the browser can reach cdn.jsdelivr.net (Chart.js is loaded from CDN)
  • Check the browser console for JavaScript errors
  • Try a hard refresh (Cmd/Ctrl + Shift + R)

API Errors

  • If the dashboard shows empty data, open the browser dev tools Network tab
  • Check if API requests to /__openclaw__/api/learning/* return 200
  • A 503 response means the learning database is not initialized yet

API Endpoints Reference

Dashboard Section API Endpoint
Config / Mode badge GET /config
Summary cards GET /summary
Convergence chart GET /timeseries?metric=convergence&window=1h
Token usage chart GET /timeseries?metric=tokens&window=1h
Baseline comparison GET /summary (baseline field)
Run distribution GET /summary (baseline field)
Reference heatmap GET /posteriors + GET /traces?limit=50
Posteriors table GET /posteriors

Next Steps