Contributing

September 4, 2026 · View on GitHub

Thanks for considering a contribution!

What we want

  • Fixes for parsers (as long as token fields are explicit and not inferred)
  • New client parsers with real fixtures (redacted) + documented file locations
  • UI/UX improvements that keep the dashboard fast
  • Docs improvements (especially platform-specific notes)

What we don’t want (by default)

  • Anything that requires copying session cookies/tokens from a browser (security risk)
  • Uploading usage or prompts to external services (“phone home”) without an explicit, opt-in design
  • Heavy dependencies unless clearly justified

Development setup

python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -e .
pip install pytest

Run from source:

python3 main.py

For UI work, start the real dashboard against a dense synthetic dataset:

python3 main.py --dev-fixture dense --dev-seed 17

Omit --dev-seed for a new dataset on each server start, then copy the printed seed to reproduce it. Fixture mode skips the usage and quota background workers, does not read local history, credentials, pricing overrides, or quota snapshots, and rejects mutating HTTP requests. Overview, /api/tools and /api/openclaw -- header and day grid alike -- scale with the window they were asked for and agree about it, and /api/active-time answers the review-sessions toggle. The session lists are the exception: they serve a fixed set of rows whatever window you ask for.

Both flags are only accepted by servetokdash export --dev-fixture dense is a usage error rather than a silent export of your real usage. /api/insights answers from a seeded fixture while one is active, inventing the rows and folding them with the production fold functions, so the Report tab can be developed and screenshotted without ever reading your history.

Run tests:

pytest -q

Releases

For the manual release checklist, see RELEASING.md. Important: pushing a tag is not enough to populate GitHub's Releases page. After tagging and pushing, also create the GitHub Release object for that tag.

Changelog and credit

Merged PRs are credited in the changelog by number and handle, e.g. (#48, thanks @yourhandle). You do not need to write your own entry — entries are written at release time — but a PR description that says plainly what changed and why makes the entry accurate. The convention is in RELEASING.md.

Security / secrets

  • Do not commit API keys, cookies, or tokens.
  • Use environment variables or local key files under .api_keys/ (gitignored).
  • If you suspect a security issue, see docs/SECURITY.md.