metric-dashboard
v1.3.1
Published
Credit and billing dashboard plugin for OpenCode and Claude Code, with Firebase sync.
Downloads
709
Maintainers
Readme
metric-dashboard
Credit and billing dashboard for OpenCode and Claude Code from a single codebase. It aggregates session costs, token usage, model breakdowns, and account quotas across both apps, serves a local web UI, and optionally syncs a snapshot across your devices via Firebase.
Under-the-Hood Architecture
flowchart TD
subgraph Entry [dist/index.js — single bundle]
DETECT{argv contains<br/>"claude"?}
end
subgraph Sources [Local data sources]
OCDB[(opencode.db<br/>node:sqlite / bun:sqlite)]
CCJSONL[~/.claude/projects/*.jsonl]
ACCTS[*-accounts.json quotas]
end
subgraph Core [Dashboard core]
AGG[Snapshot builder<br/>sessions + models + costByDay]
SRV[node:http server :3456]
FB[Firebase REST sync]
AGG --> SRV
AGG <--> FB
end
DETECT -->|yes: Claude daemon| Core
DETECT -->|no: OpenCode plugin| Core
OCDB --> AGG
CCJSONL --> AGG
ACCTS --> AGG
SRV -->|HTML + /api/data| BROWSER[Browser UI]
FB <-->|/devices snapshot| FBDB[(Firebase RTDB)]Structure
src/- JavaScript source (
dashboard-core.jscore +config.jsconfig/logging +commands.js) core/— git submodule (intisy-ai/core): shared config, logging, and the cross-app command framework — bundled intodist/index.jsby esbuild
- JavaScript source (
dist/dist/index.js— single dual-app entry, generated by esbuild; not committed
Installation
Via plugin-updater (recommended)
npx plugin-updater@latest init https://github.com/intisy-ai/metric-dashboardVia npm
npm install metric-dashboardSQLite & Runtime Notes
Open the dashboard at http://127.0.0.1:3456 (Claude Code: run /credits).
SQLite-backed OpenCode session history uses Node's built-in
node:sqlite(Node 22.5+). On older Node the dashboard still runs and shows file-based and Claude Code history; on OpenCode's Bun runtime it usesbun:sqliteautomatically.
Firebase cross-device sync is optional: drop a service-account JSON at <configDir>/config/firebase-service-account.json to enable it.
Configuration
Config file: <configDir>/config/metric-dashboard.json (edit via the loader or /metric-dashboard-config set).
{
"logging": true,
"port": 3456,
"sync_interval_ms": 60000,
"snapshot_ttl_ms": 5000,
"remote_cache_ttl_ms": 15000,
"db_path": "",
"enabled": true,
"host": "127.0.0.1",
"sync_enabled": true
}| Key | Default |
| --- | --- |
| logging | true |
| port | 3456 |
| sync_interval_ms | 60000 |
| snapshot_ttl_ms | 5000 |
| remote_cache_ttl_ms | 15000 |
| db_path | "" |
| enabled | true |
| host | "127.0.0.1" |
| sync_enabled | true |
Commands
| Command | Description | Arguments |
| --- | --- | --- |
| /metric-dashboard-config | View and change metric-dashboard configuration | list | get <key> | set <key> <value> |
| /credits | View credit usage dashboard | |
Dependencies
corenode:sqliteFirebase service account
Logging
Logs are written to <configDir>/logs/YYYY-MM-DD/metric-dashboard-HH-MM-SS.log and are toggled by
this plugin's logging config (default on). Console mirroring is global, off by default,
and controlled by the shared config/settings.json logConsole flag.
License
MIT.
