AiOverviewControl

August 26, 2026 · View on GitHub

AiOverviewControl banner

AiOverviewControl

All your AI quotas. One dashboard. Zero guesswork.

A self-contained DankMaterialShell widget for AI quota, billing, authentication, and local usage telemetry — right in your DankBar.

CI Release License Providers Languages

Install · Screenshots · Providers · Configuration · Changelog · Português do Brasil


See it in action

AiOverviewControl demo

🎬 Prefer higher quality? Watch the MP4 demo.

The pill lives in your DankBar and shows live usage at a glance. Providers with multiple quota windows (Claude's 5 hour and 7 day, for example) can show any window in the bar — pick it per provider, or let highest follow the most-constrained one. Hover the pill to see which window the number came from and when it resets:

DankBar pill

Why AiOverviewControl?

You pay for Claude, Codex, Copilot, OpenRouter — and each one hides its quota in a different dashboard, CLI, or API. AiOverviewControl collects every provider independently and locally, normalizes the result, and renders one honest overview without any external aggregation service.

Honest is the key word: it reports measured data when a supported source exists, and clearly labels authentication-only or informational providers when it does not. No dashboard scraping. No fabricated percentages. Ever.

Highlights

📊 Unified dashboard37 AI providers and developer tools in one place.
🛰️ Fleet overviewCross-provider rollup in the hero — quota-only average load, hottest provider, how many are near their cap, and the soonest reset.
⏱️ Official Codex windowsRate-limit windows straight from codex app-server.
🤖 Deep Claude analyticsQuota plus local token, session, model, project, and cost analytics.
🐙 Copilot quotasPremium request, Chat, and Completions snapshots.
🗂️ Rich provider cardsUsage windows, reset times, identity, credits, sparklines, trends, and console links.
🛡️ Failure isolationOne timeout or invalid credential never hides healthy providers.
🎛️ Flexible layoutCompact/comfortable density, status filters, pinned providers, auto/custom/top pill modes, and a per-provider DankBar usage-window choice.
🔔 Quota notificationsBranded DMS desktop alerts with global/per-provider thresholds; one toast per quota window, upgraded in place when quota is exhausted. Alerts can follow the window the DankBar shows, every window, or the primary one.
📄 History exportDump the local usage history to CSV or JSONL from Settings, or from providers/export-usage-history.
🌍 5 UI languagesEnglish, Português (BR), 简体中文, Español, and Deutsch.
🔒 Privacy firstLocal adapters, no paid endpoints just to test keys, secrets never displayed.

Screenshots

Dashboard overviewExpanded provider card
DashboardExpanded card
📈 Local telemetry deep-dive (9Router example)

Per-provider telemetry sections include daily cost charts, today/week/month totals, token in/out counters, top models, and routed-provider breakdowns — all read from local, provider-owned data.

9Router telemetry

Coverage Model

Provider cards use one of these honest coverage levels:

CoverageMeaning
QuotaReturns real rate-limit/spend windows and used percentage (Codex, Copilot, Antigravity, OpenRouter, Z.ai, GLM, Command Code, OpenCode Go).
BalanceReturns remaining prepaid balance or credits in real currency (Kimi, DeepSeek).
AnalyticsReads consumption counters or provider-owned local data (Cloudflare GraphQL, 9Router, Claude, pi, Hermes).
AuthenticationVerifies credentials via a read-only endpoint without stable quota data (Gemini, Mistral, MiniMax, Qwen, xAI, and more). Some configured-status cards, such as NVIDIA, cannot validate the key because the provider's catalog is public.
Local runtimeReports local state rather than account quota (Ollama models, Vertex AI authentication).
InformationalLinks official usage when no read-only API exists (Kiro, Cursor, Warp, and more).

Notable integrations:

ProviderData source
CodexOfficial codex app-server account and rate-limit methods.
Claude CodeOAuth quota plus local ~/.claude/projects analytics (or $CLAUDE_CONFIG_DIR/projects when that env var is set).
GitHub CopilotAuthenticated GitHub/Copilot quota snapshot.
AntigravityGemini and Claude/OpenAI quota families with reset times from Cloud Code Assist; optional per-model diagnostics and automatic multi-account separation.
9RouterLocal SQLite or JSON usage data, including routed-model telemetry.
piLocal session JSONL telemetry (~/.pi/agent/sessions) — cost, tokens, top models, top projects; no quota API (pi has no rate limits).
HermesDual-nature entry: agent-harness telemetry from ~/.hermes/state.db (sessions, tokens per model/project, sources, API calls) plus provider identity (active billing provider, default model) from ~/.hermes/config.yaml / auth.json. Provider-side billing stays on the Nous Portal.
OpenRouterKey limits, spend, balance, and 30-day model activity.
Kimi (Moonshot)Open Platform balance (GET /v1/users/me/balance, USD/CNY) — or Kimi Code subscription quota (GET /coding/v1/usages, weekly + 5h windows) when a sk-kimi- / KIMI_CODING_API_KEY is set.
DeepSeekOfficial account balance API.
TogetherRead-only API-key validation; usage and billing remain in the Together console.
CloudflareToken verification and optional Workers AI GraphQL analytics.
Z.ai, GLMGET /api/monitor/usage/quota/limit — real per-window usage %, reset timestamps, and plan tier. Falls back to /models auth-only check.
Command CodeLive 5h/weekly/monthly usage via /alpha/billing/credits; uses COMMAND_CODE_API_KEY or the protected apiKey saved by cmd login in ~/.commandcode/auth.json.
OpenCode GoLive 5h/weekly/monthly usage from /zen/go/v1/usage; uses OPENCODE_API_KEY or the CLI credential in ${XDG_DATA_HOME:-$HOME/.local/share}/opencode/auth.json. When the Go plan's balance fallback is enabled, the card says so without claiming a balance amount.
xAI, MiniMax, Qwen, MistralRead-only /models (or /api-key) validation — zero token consumption.
NVIDIAConfigured-key status only; its public model catalog cannot validate the key.
OllamaInstalled and running models from /api/tags and /api/ps.

The full matrix, credentials, and upstream references are documented in Providers and Provider verification.

Requirements

  • DankMaterialShell running on Quickshell.
  • bash, jq, and curl.
  • Provider-specific CLIs or credentials only for providers you enable. Antigravity needs secret-tool for keyring sessions or sqlite3 for IDE state databases; Hermes and 9Router need sqlite3 for their local usage databases.
  • Quota notifications additionally need notify-send and flock.

Recommended baseline for the default provider set:

command -v bash jq curl codex claude gh
codex login
claude auth status
gh auth status

Installation

Release Archive

Download the .tar.gz or .zip from the latest release, extract it as AiOverviewControl, and place it in the DMS plugin directory:

~/.config/DankMaterialShell/plugins/AiOverviewControl

Then restore executable bits and restart DMS:

chmod +x ~/.config/DankMaterialShell/plugins/AiOverviewControl/providers/get-*
dms restart

Git Checkout

git clone https://github.com/bernardopg/AiOverviewControl.git \
  ~/.config/DankMaterialShell/plugins/AiOverviewControl
chmod +x ~/.config/DankMaterialShell/plugins/AiOverviewControl/providers/get-*
dms restart

Enable AiOverviewControl in DMS settings and add it to a DankBar section. Detailed installation and upgrade guidance is available in docs/installation.md.

Configuration

Settings are stored by DMS and survive plugin upgrades.

SettingValuesDefault
Languageauto, en_US, pt_BR, zh_CN, es_ES, de_DEauto
Tracked providerscomma-separated provider IDscodex,claude,copilot
Dashboard densitycomfortable, compactcomfortable
Pill modeauto, custom, topauto
Custom pill providerscomma-separated tracked-provider IDstracked providers
DankBar usage windowprovider:slot pairs, slot primary, secondary, tertiary, or highest (e.g. claude:secondary)primary window
DankBar pill tooltipenabled or disabledenabled
Pinned providerscomma-separated provider IDsempty
Provider logo colorany QML color stringcurrent DMS primary color
Refresh interval1, 2, 5, 15, or 30 minutes2 minutes
Show provider errorsenabled or disabledenabled
Claude project breakdownenabled or disabledenabled
Individual Antigravity modelsenabled or disableddisabled
Quota notificationsenabled or disabledenabled
Global notification threshold75%, 85%, or 95%85%
Per-provider thresholdscomma-separated provider:percent pairs (e.g. claude:90,codex:75), validated inlineempty
Windows that raise alertsdisplayed (follows the DankBar window), all, or primarydisplayed
Re-alert intervalonce per window, 1h, 6h, or 24h (updates the existing alert)once per window
History retention500, 2,000, or 10,000 snapshots2,000

Settings also offers Export usage history (CSV or JSONL) and a two-step Reset plugin settings, which restores every option above without touching the recorded history.

The default provider selection is:

codex,claude,copilot

API-backed providers read credentials from the DMS process environment. An export available only in an interactive shell may not reach a graphical DMS session. See Configuration for the environment variable matrix and health-check behavior.

Dashboard Behavior

  • The hero shows a fleet overview when two or more providers resolve: the average load across measurable quota windows, the hottest provider, how many sit at or above 80%, and the soonest reset across the fleet. Balance, analytics, local-runtime, and informational cards are intentionally excluded from the average denominator so their truthful 0% placeholders do not dilute real quota pressure. Peak, at-risk count, and reset still scan all live cards.
  • The overview is navigable: click the fleet rollup's peak provider, or the hero usage bars, to expand and scroll straight to that provider's card.
  • Cards are sorted with pinned providers first, then by highest measurable usage, with failed providers last.
  • Cards support keyboard focus plus Enter/Space (expand), Delete (remove), P (pin), and R (retry) actions.
  • Data becomes stale after twice the configured refresh interval.
  • Failed cards expose a provider-specific retry action.
  • Expanded cards show available windows, credits, source, identity, and update time without inventing unavailable fields.
  • Usage snapshots are stored locally in ~/.cache/AiOverviewControl/usage-history.jsonl and trimmed according to the configured retention. The history writer records only real non-zero quota/spend pressure; informational, local-runtime, balance-only, and analytics-only 0% placeholders are skipped so sparklines remain meaningful. Because the store is trimmed, providers/export-usage-history csv|jsonl (also a button in Settings) is the way to keep long-term data.
  • Claude analytics run separately so local history or OAuth failures cannot block the main provider collection.

Privacy and Resilience

  • Credentials are read from provider CLIs, local provider-owned data, or environment variables; the UI never displays secret values.
  • The plugin does not scrape authenticated web dashboards.
  • It does not call paid inference endpoints merely to test a key.
  • Temporary files are isolated per run and removed when collection finishes.
  • Provider errors are returned as structured data instead of terminating the complete refresh.
  • Informational cards use explicit text and official links rather than synthetic percentages.

Validation

Run the same core checks used by CI

QML lint is a hard gate in CI (Qt5 qmllint, syntax verification — no qs.* import-resolution noise to filter). A malformed QML file fails the build.

jq -e . plugin.json >/dev/null
for file in i18n/*.json; do jq -e . "$file" >/dev/null; done
find providers -maxdepth 1 -type f -print0 | xargs -0 bash -n
for test in tests/*.sh; do bash -n "$test"; done
bash -n scripts/package-release
for test in tests/*.sh; do bash "$test"; done
shellcheck -S warning providers/* tests/*.sh scripts/package-release
qmllint \
  AiOverviewControlWidget.qml \
  AiOverviewControlSettings.qml \
  AiOverviewControlI18n.qml \
  ProviderLogo.qml
./providers/get-provider-health "codex,claude,copilot,pi" | jq .
./providers/get-provider-usage \
  "codex,claude,copilot,pi" \
  ./providers/get-copilot-usage | jq .
./providers/get-usage-history | jq .
./providers/export-usage-history csv /tmp

GitHub Actions additionally validates workflow syntax, locale key parity, provider script permissions, integration contracts, Crowdin configuration, and release packaging.

Architecture

AiOverviewControlWidget.qml       Runtime orchestration and dashboard
AiOverviewControlSettings.qml     Settings, provider selection, and health UI
AiOverviewControlI18n.qml         Locale loading and interpolation
ProviderLogo.qml                  Local provider-logo resolution and fallback icons
providers/get-provider-usage      Multi-provider dispatcher and history writer
providers/get-provider-health     Local prerequisite checks
providers/export-usage-history    Usage-history export to CSV or JSONL
providers/get-codex-usage         Codex app-server protocol bridge
providers/get-claude-usage        Claude quota and local analytics bridge
providers/get-copilot-usage       GitHub Copilot quota bridge
providers/get-antigravity-usage   Antigravity Cloud Code Assist quota bridge
providers/get-9router-analytics   9Router local telemetry blob
providers/get-pi-analytics        pi local session telemetry blob
providers/get-hermes-analytics    Hermes local state telemetry blob
providers/get-*-usage             Canonical single-provider entrypoints
scripts/package-release           Release archive build and validation

See Architecture for the runtime flow and normalized provider contract.

Documentation

TopicLink
Installation and upgradesdocs/installation.md
Configuration and credentialsdocs/configuration.md
Provider coverage matrixdocs/providers.md
Provider verification policydocs/provider-verification.md
Architecture and adapter contractdocs/architecture.md
Troubleshootingdocs/troubleshooting.md
Português do Brasildocs/README.pt-BR.md
Internationalization and Crowdindocs/i18n-crowdin.md
Release checklistdocs/release-checklist.md
ChangelogCHANGELOG.md

Contributors

Thanks to everyone who has improved the plugin:

  • @emmsixx — fixed the Settings diagnostic commands hardcoding the display-name casing (AiOverviewControl) instead of the DMS plugin-store manifest id (aiOverviewControl), so copied commands resolve correctly on case-sensitive filesystems (#13).

Contributions welcome — see CONTRIBUTING.md.


Released under the MIT License.

Made with ❤️ for the DankMaterialShell community.