Know what you can ship before the limit hits.
A local-first dashboard for every Claude, Codex, and Z.ai quota window.
Documentation · Download · Report an issue
QuotaDeck models provider → accounts → windows[], so new provider-defined windows flow through storage, API, and UI without a session/weekly hard-code. The daemon binds to loopback, embeds its Preact frontend in one Go binary, stores history in SQLite WAL, streams updates with Server-Sent Events, and sends no telemetry.
The Plans screen also controls which plan new Claude Code sessions use. Claude subscriptions managed by cswap and Z.ai GLM Coding Plan appear in one selector; Z.ai can be configured without editing JSON by hand.
Download the latest assets from GitHub Releases.
sudo apt install ./quotadeck_0.1.0_amd64.debThe package contains the CLI/server, native Wails desktop application, systemd user unit, launcher, and Cinnamon panel applet. Open QuotaDeck from the application menu after installation.
chmod +x QuotaDeck-0.1.0-x86_64.AppImage
./QuotaDeck-0.1.0-x86_64.AppImageSee the installation guide for the standalone CLI, source builds, and first diagnostics.
- Claude:
cswap list --jsonis the canonical multi-account source. Explicit plan selection callscswap switch <slot> --json; QuotaDeck never callscswap export, opens its credential store, or refreshes Claude OAuth itself. - Codex: one
codex app-server --stdioprocess per configuredCODEX_HOMEreads account and rate-limit metadata. QuotaDeck does not read or modifyauth.json. - Z.ai: explicit environment references,
ZAI_API_KEY,GLM_API_KEY, and recognized Z.ai entries in Claude settings. Tokens never enter the domain model, database, diagnostics, logs, or API responses; in-memory sources are deduplicated with a truncated SHA-256 fingerprint.
Full setup instructions live in the provider guide.
Requirements: Go 1.25+, Node.js 22+, and npm. Linux desktop packaging additionally needs Wails v2, GTK 3, WebKitGTK 4.1, ImageMagick, and dpkg-deb.
npm ci --prefix web
make test
make lint
make build
./dist/quotadeck serveOpen http://127.0.0.1:9211. For frontend/backend development, use make dev. For UI work with synthetic accounts and no provider discovery, use make demo and open http://127.0.0.1:9212.
The default configuration is ${XDG_CONFIG_HOME:-~/.config}/quotadeck/config.yaml; a missing file uses safe defaults. Data is stored at ${XDG_DATA_HOME:-~/.local/share}/quotadeck/quotadeck.db with 30-day retention and a 60-second polling interval.
quotadeck doctor
quotadeck refresh
quotadeck status --json
quotadeck service install --user
quotadeck service statusdoctor reports paths, versions, source decisions, and secret-presence booleans only. It never returns token values. See configuration and troubleshooting.
GET /api/v1/state
GET /api/v1/providers
GET /api/v1/accounts
GET /api/v1/accounts/{id}/history?from=&to=
GET /api/v1/health
GET /api/v1/doctor
GET /api/v1/events
GET /api/v1/control
POST /api/v1/refresh
POST /api/v1/control/claude/switch
PUT /api/v1/control/zai
Manual refresh and plan changes are loopback-only and require QuotaDeck's explicit request header. Errors are redacted before persistence; temporary failures keep the last valid windows visible as stale. Control responses expose only secret-presence booleans, never key values.
make desktop-build
make package-cinnamon
make package-deb
make package-appimageThe AppImage toolchain is pinned by version and SHA-256. Release checksums are published alongside every GitHub release.
QuotaDeck enforces loopback binding and keeps provider secrets outside domain objects, logs, SQLite, API responses, fixtures, and diagnostics. Read SECURITY.md before reporting a vulnerability.
Contributions are welcome; start with CONTRIBUTING.md. Architecture decisions are recorded in ADR 0001 and ADR 0002.
MIT licensed.
