Token Burn Monitor
Zero-dependency Node.js dashboard. Core API + swappable frontend themes.
Architecture
server.js → Core API (stable, don't modify)
themes/default/ → Default dark dashboard theme
themes/<custom>/ → User/agent-generated themes
API.md → API contract for theme developers
config.json → Port, theme, agents, pricing overrides
Quick Start
bash start.sh # Start (default port 3847)
bash start.sh status # Check status
bash start.sh restart # Restart after config change
bash start.sh stop # Stop
Configuration
Copy config.default.json to config.json:
{
"port": 3847,
"theme": "default",
"agents": {
"main": { "name": "Karl", "icon": "/assets/karl.png" }
},
"modelPricing": {}
}
- theme: Directory name under
themes/. Default:"default" - agents: Display names/icons. Auto-discovered; config only overrides display.
- port: Also settable via
PORTenv var. - modelPricing: Override/add model pricing ($/1M tokens).
Set OPENCLAW_AGENTS_DIR to override agent directory (default: /home/node/.openclaw/agents).
Themes
Themes live in themes/<name>/. Minimum: one index.html that fetches data from the API.
To create a custom theme:
- Read
API.mdfor all available endpoints - Create
themes/my-theme/index.html - Set
"theme": "my-theme"in config.json - Restart
The default theme (themes/default/) is a full reference implementation.
API Overview
All endpoints return JSON. GET-only. Server binds to localhost. Full docs in API.md.
| Endpoint | Description |
|---|---|
GET /api/config | Agent names and icons |
GET /api/stats?date= | All agents aggregated |
GET /api/agent/:id?date= | Single agent with per-call breakdown |
GET /api/history?days= | 30-day cost history |
GET /api/pricing | Model pricing table |
GET /api/crons | Scheduled jobs (read from filesystem) |
GET /api/cron/:id/runs | Job run history |
Security
- Server binds to
127.0.0.1by default (localhost only) - No shell execution — all data read from filesystem
- No outbound network requests — default theme uses system fonts
- User prompts redacted by default (
[redacted]), opt-in viashowPrompts: truein config - HTML responses include CSP:
connect-src 'self'; font-src 'self' - GET-only — all other HTTP methods rejected
Troubleshooting
- No data: Verify
OPENCLAW_AGENTS_DIRpoints to correct agents directory. - Port conflict:
PORT=4000 bash start.sh - Theme not loading: Check
themes/<name>/index.htmlexists.