ClawStats is a local-first analytics toolkit for OpenClaw usage and cost tracking.
It parses OpenClaw runtime data, computes usage/cost metrics, and can be embedded into OpenClaw Web UI with auto-start.
- Usage analytics: calls, input/output tokens, cache read, total tokens
- Cost analytics: aggregate, by model, by date, trend
- Export: JSON / CSV / Markdown reports
- Interfaces:
- CLI (
stats,cost,trend,export,doctor) - TUI prototype
- Web PoC
- CLI (
- OpenClaw embed mode:
- No extra ClawStats web port required
- Auto-start with OpenClaw on Windows (
gateway.cmdhook) - One-command deploy for new machines
Current production path is local OpenClaw data files:
sessions.json(session summary)*.jsonl(message-level logs)
This is the default and most stable ingestion mode.
There is also an exploratory script for OpenClaw Gateway tools/invoke probing:
- Node.js
>=20 - OpenClaw installed (for embed/autostart flow)
- Windows (for
embed autostartanddeploy:openclawcurrently)
npm install
npm run buildCLI examples:
node packages/cli/dist/index.js stats --data-dir sample-data/small
node packages/cli/dist/index.js cost --data-dir sample-data/small
node packages/cli/dist/index.js trend --data-dir sample-data/small --days 14
node packages/cli/dist/index.js export --data-dir sample-data/small --format md --output reports/sample-report.mdIf OpenClaw is already installed on the machine:
npm run deploy:openclawWhat it does:
- Detects
~/.openclaw - Detects OpenClaw
control-uidirectory - Creates embed assets (
/clawstats/*) - Injects
Analyticsentry into OpenClaw page - Installs auto-start hook into
~/.openclaw/gateway.cmd - Generates initial
snapshot.json
After deploy:
- Open
http://127.0.0.1:18789/clawstats/index.html(port auto-detected from gateway script) - If OpenClaw is already running, run once:
openclaw gateway restart
Advanced deploy options:
node scripts/deploy-openclaw-embed.mjs \
--openclaw-dir C:\Users\you\.openclaw \
--target-dir C:\Users\you\AppData\Roaming\npm\node_modules\openclaw\dist\control-ui \
--data-dir C:\Users\you\.openclaw \
--interval-min 10 \
--days 30Project version is taken from root package.json.
Check current project version vs deployed OpenClaw embed version:
npm run version:checkUpdate OpenClaw embed to the current project version automatically:
npm run version:updateBehavior notes:
- If OpenClaw embed is already installed,
version:updatere-runs deployment using saved install state. - You do not need to manually run embed init/inject again.
- If OpenClaw is not installed yet, run
npm run deploy:openclawfirst.
clawstats stats [--data-dir <path>] [--from <date>] [--to <date>] [--by none|model|date]
clawstats cost [--data-dir <path>] [--group model|date] [--top 5]
clawstats trend [--data-dir <path>] [--days 30]
clawstats export --output <path> [--format json|csv|md]
clawstats doctor [--data-dir <path>]
clawstats embed init --target-dir <openclaw-web-public-dir> [--mount clawstats]
clawstats embed snapshot --data-dir <openclaw-data-dir> --output <snapshot.json> [--days 30]
clawstats embed daemon --data-dir <openclaw-data-dir> --output <snapshot.json> --interval-min 10
clawstats embed inject-link --index-file <openclaw-index.html>
clawstats embed autostart install --openclaw-dir <~/.openclaw> --output <snapshot.json> [--interval-min 10]
clawstats embed autostart status [--openclaw-dir <~/.openclaw>]
clawstats embed autostart uninstall [--openclaw-dir <~/.openclaw>]ClawStats/
docs/
DELIVERY_REPORT.md
OPENCLAW_EMBED.md
PROJECT_PLAN.md
packages/
core/
src/
test/
dist/
cli/
bin/
src/
dist/
tui/
src/
dist/
web/
src/
public/
dist/
reports/
openclaw-public/
sample-report.md
sample-data/
small/
medium/
large/
scripts/
deploy-openclaw-embed.mjs
openclaw-version.mjs
generate-sample-data.mjs
kill-port.mjs
smoke-web.mjs
test-openclaw-tools-invoke.mjs
package.json
tsconfig.base.json
Build all:
npm run buildLint:
npm run lintCore tests:
npm testembed autostartis currently Windows-only.- For Linux/macOS auto-start integration, use manual
embed daemonor implement service-level hooks.