The unified, local-first desktop monitor for Claude, Codex, and Gemini.
One window for every usage gauge, cost trend, and recent prompt β without handing your keys to a SaaS dashboard.
Download Β· Features Β· Screens Β· Architecture Β· Contributing
You're juggling three coding agents at once β Claude, Codex, and Gemini β each with its own dashboard, its own quota window, and its own pricing page. OpenToken Monitor stitches them into a single tray-resident desktop app that:
- π reads your local CLI artifacts first (
~/.claude,~/.codex,~/.gemini/tmp) - π augments them with live OAuth fetches when credentials are present β never proxied through a third party
- πΈ computes accurate per-model cost using current Q1 2026 published rates
- π keeps providers visible even when offline, surfacing health status instead of silently dropping them
Everything stays on your machine. Snapshots persist in a local SQLite store; nothing leaves the device.
- Unified overview β Claude Β· Codex Β· Gemini in one glance, with live usage rings, trend sparklines, and provider health badges
- Per-provider detail pages with cost history, model breakdowns, alert thresholds (75 % / 90 % / 95 %), and recent-prompt activity
- Projects view β recent activity rolled up by workspace with cross-model spend attribution and command summaries
- Compact widget mode β fixed-size always-on-top panel for at-a-glance gauges and reset countdowns
| Provider | Sources | Windows tracked |
|---|---|---|
| Claude | Anthropic OAuth usage API + ~/.claude/projects local logs |
5-hour rolling, 7-day, Opus weekly, extra-credits |
| Codex (OpenAI) | Bearer / cookie / RPC fetchers + ~/.codex/sessions |
Daily, model breakdown |
| Gemini | Google OAuth quota API + ~/.gemini/tmp session files + gemini --stats CLI |
60 req/min, 1000 req/day (free tier, midnight Pacific reset) |
- Smart OAuth backoff β separate cooldowns for success (120 s) and failure (25 s), so one transient 429 doesn't pin Claude to local-mode for two minutes
- Stale-cache fallback β last good snapshot stays on screen marked
staleif a fetch fails - Reactive file watching β
notifywatchers refresh the affected provider the moment a CLI session file changes - Single-instance enforcement β autostart launch + manual click no longer fight over the SQLite store
- Bundled WebView2 bootstrapper β Windows MSI installs cleanly on machines without WebView2 pre-installed
All model rates live in a single source-of-truth: src-tauri/src/pricing.rs.
| Family | Tier | Rate (input / output per 1M tokens) |
|---|---|---|
| Claude | Opus 4.x | $15.00 / $75.00 |
| Claude | Sonnet 4.x | $3.00 / $15.00 |
| Claude | Haiku 4.5 | $1.00 / $5.00 |
| OpenAI | GPT-5 | $1.25 / $10.00 |
| OpenAI | GPT-5 mini / nano | $0.25 / $2.00 Β· $0.05 / $0.40 |
| OpenAI | o3 / o4-mini | $2.00 / $8.00 Β· $1.10 / $4.40 |
| Gemini | 2.5 Pro / Flash / Flash-Lite | $1.25 / $10.00 Β· $0.30 / $2.50 Β· $0.10 / $0.40 |
Caching discounts and cache-write surcharges are applied where each provider exposes them.
| Shortcut | Action |
|---|---|
| 1 / 2 / 3 | Jump to Claude / Codex / Gemini |
| 4 | Open Projects |
| Esc | Return to overview |
| Ctrl+R / β+R | Refresh all providers |
| Ctrl+, / β+, | Open settings |
| Overview | Projects |
|---|---|
![]() |
![]() |
| Provider Detail | Widget Mode |
|---|---|
![]() |
![]() |
| Settings |
|---|
![]() |
Grab the latest installer for your OS from GitHub Releases:
Prerequisites: Node.js 18+, Rust stable, and your OS-specific Tauri 2 dependencies.
# Clone & install
git clone https://github.com/Hitheshkaranth/OpenTokenMonitor.git
cd OpenTokenMonitor
npm install
# Run in dev mode (hot-reload)
npm run tauri dev
# Production build
npm run tauri build # all platforms
npm run tauri:build:win # Windows NSIS installer
npm run tauri:build:mac # macOS app bundle + installer
|
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β React 19 Β· Zustand stores Β· hooks (resize / kbd) β
ββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββ
β Tauri invoke() / usage-updated event
ββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββ
β commands.rs β aggregator β provider registry β
β β ββ Claude (OAuth + logs)
β β ββ Codex (bearer/cookie/RPC + logs)
β β ββ Gemini (OAuth + CLI + logs)
β β β
β UsageStore (SQLite) Β· pricing.rs Β· alerts.rs β
β tray.rs Β· watchers (poll + filesystem) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Full module map and data-flow walkthrough β ARCHITECTURE.md
Key entry points:
- πͺ Frontend root β
src/App.tsx - π Backend entry β
src-tauri/src/lib.rs - π Tauri commands β
src-tauri/src/commands.rs - π± Cost rate tables β
src-tauri/src/pricing.rs - ποΈ SQLite layer β
src-tauri/src/usage/store.rs
- π 100 % local. All snapshots, costs, and recent activity are stored in a local SQLite file under your OS app-data directory.
- π Credentials never leave the device. OAuth tokens are read from the official CLI keychain entries; API requests go directly from your machine to Anthropic / OpenAI / Google.
- π« No telemetry. No analytics, no crash reporting, no phone-home.
- π§Ή Reset by deleting the app-data SQLite file (
%APPDATA%\com.opentokenmonitor.desktop\usage.dbon Windows; equivalents on macOS / Linux).
- Per-project budget alerts with native notifications
- Export usage reports to CSV / JSON / PDF
- Custom refresh cadences per provider
- Cursor / Aider / Continue.dev provider adapters
- Multi-month spend forecasting
Have a request? Open an issue.
Contributions are welcome β start with the architecture map and pricing module:
- Read
ARCHITECTURE.mdfor the module layout. - For new providers: implement the
UsageProvidertrait insrc-tauri/src/providers/<name>/and register it inregistry.rs. - For pricing updates: edit
src-tauri/src/pricing.rsand bump the review-date stamp at the top of the file. - Run the test suite before opening a PR:
cd src-tauri && cargo test --lib
npx tsc --noEmitReleased under the MIT License β free for personal and commercial use.
Built with β€οΈ for developers who use more than one AI agent.
OpenTokenMonitor is not affiliated with Anthropic, OpenAI, or Google.




