A headless multi-subscription quota collector for coding-agent routing workflows: a CLI (python usage_float.py once), a local JSON telemetry cache (~/.usage-float/usage-cache.json) and a check-quota Agent Skill that let Claude Code, Codex, Antigravity, Paseo and routers read live 5-hour and 7-day rate-limit windows and reset timers across Claude Code (Claude Max / Pro), OpenAI Codex CLI / ChatGPT Pro, Grok, Google Antigravity (agy / Gemini CLI), Magpie, and LiteLLM / OpenAI-compatible API proxies. It also ships a borderless Windows desktop quota HUD (no title bar, no taskbar entry), an auxiliary-screen dashboard, and an optional live-wallpaper player toggled with a double-tap of Ctrl.
- Multi-Account Local Quota Discovery: Reads multiple local credentials (
~/.claude,~/.claude-2,~/.claude-*,~/.codex,~/.codex-2,~/.codex-*,~/.grok,agy, Paseo provider directories, and remote Magpie/v1/magpie/quotas) directly on your machine without rotating OAuth tokens. - One-Click Rate-Limit Reset Redemption: Inspects and redeems Claude weekly rate-limit resets (
cedar_ember), Claude 5-hour session wall resets (juniper_tide), and ChatGPT / Codex rate-limit reset credits (/backend-api/wham/rate-limit-reset-credits) directly from the HUD. - Headless CLI & JSON Cache for Agents: Run
python usage_float.py once(or read~/.usage-float/usage-cache.json) from scripts, routers, or coding agents to query remaining subscription percentages and reset timestamps programmatically.
Skill: skills/check-quota/SKILL.md teaches an agent to check subscription headroom before dispatching a sub-agent or starting long work. Copy or link the skills/check-quota folder into your host's skills directory (for example ~/.claude/skills/check-quota, ~/.codex/skills/check-quota).
Headless CLI: python usage_float.py once (release binary: UsageFloat.exe once) queries each signed-in provider once and prints one line per window with usage and time to reset. No UI is opened.
JSON cache: the same readings are persisted to ~/.usage-float/usage-cache.json (atomic writes under a file lock), so an agent can read quota without any network call. Abbreviated example (illustrative values):
{
"providers": {
"claude": {
"provider_id": "claude",
"display_name": "claude",
"plan_label": "max",
"windows": [
{"id": "seven_day", "label": "7d", "used_pct": 42.0, "resets_at": "2026-11-05T21:00:00+00:00"},
{"id": "five_hour", "label": "5h", "used_pct": 8.0, "resets_at": "2026-10-30T08:00:00+00:00"}
],
"error": null,
"available": true,
"stale": false,
"fetched_at": "2026-10-30T03:21:28+00:00",
"summary": null
},
"codex": {"provider_id": "codex", "plan_label": "pro", "windows": [{"id": "usage", "label": "7d", "used_pct": 93.0, "resets_at": "2026-11-04T06:35:27+00:00"}], "stale": false}
}
}| Field | Meaning |
|---|---|
providers.<id> |
One entry per account (claude, claude-2, codex, codex-2, grok, antigravity, llmproxy, ...) |
windows[].id / label |
Window identifier and display label, for example seven_day / 7d, five_hour / 5h, weekly_fable / fable 7d, gemini-weekly / gemini 7d |
windows[].used_pct |
Percent of the window already used (0-100); remaining headroom is 100 - used_pct |
windows[].resets_at |
ISO-8601 time the window resets |
plan_label |
Subscription tier when known (for example max, pro) |
fetched_at, stale, error |
Freshness of the reading; stale: true or a non-null error means the last refresh failed and the numbers are older |
summary |
Free-text figure for budget-style rows such as the LiteLLM proxy |
The cache also holds bookkeeping keys (display_snapshots, attempts, poll, per-provider *_backoff_until) that consumers can ignore.
With AgentCompass: AgentCompass (agent-compass) reads ~/.usage-float/usage-cache.json to score task difficulty against live quota windows and pick the best-fit account, model and effort. Usage Float also runs on its own with no AgentCompass installed.
AgentCompass uses Usage Float as its subscription quota collector and optional floating HUD. Usage Float also runs independently; AgentCompass adds task routing, quota scheduling, and a Windows management panel.
Dedicated auxiliary-screen usage dashboard:
Usage settings (two-column drag-and-drop layout; unchecked items are dimmed in place):
Auxiliary display and shortcut settings:
Live wallpaper folders and recursion depth (instant add, background indexing, middle-segment path truncation):
Live wallpaper folder random weights:
Release package (recommended): Download usage-float-*-windows-x64.zip from the repository's Releases page, extract it, and run UsageFloat.exe. No Python installation is required (mpv is bundled). If Windows SmartScreen prompts on an unsigned binary, choose More info → Run anyway. Toggle Start at login from the right-click context menu.
Run from source: Requires Windows + Python 3.10+ (with tkinter). For video wallpapers, run .\install-mpv.ps1 first or place mpv.exe under vendor/mpv/.
python usage_float.py once # Print a one-shot CLI usage summary (release binary: UsageFloat.exe once)
pythonw usage_float.py # Launch floating HUD / auxiliary-screen panel
.\start.vbs # Launch detached from the current shell session
python usage_float.py autostart on # Enable startup at Windows logonAll credentials stay on your local machine and are read directly without third-party servers:
| Provider | Default Local Credential Source |
|---|---|
| Claude | ~/.claude/.credentials.json |
| Additional Claude Accounts | ~/.claude-2/.credentials.json (CLAUDE_HOME_2), ~/.claude-*, or Paseo provider CLAUDE_CONFIG_DIR bindings |
| Codex | ~/.codex/auth.json |
| Additional Codex Accounts | ~/.codex-2/auth.json (CODEX_HOME_2), ~/.codex-*, or Paseo provider CODEX_HOME bindings |
| Grok | ~/.grok login state |
| Antigravity | Official agy CLI (1.1.11+) login state via PATH, %LOCALAPPDATA%\agy\bin\agy.exe, or ANTIGRAVITY_CLI_PATH |
| LiteLLM / API Proxy | Environment variables LLM_PROXY_API_KEY + LLM_PROXY_ENDPOINT, or llm_proxy_api_key / llm_proxy_endpoint in ~/.usage-float/config.json |
$env:CODEX_HOME="$env:USERPROFILE\.codex-2"; codex loginOn 2026-10-29 the user confirmed both official apps show the same subscription usage (56%). The Grok row includes Grok Bot consumption. Only the Grok billing observation is collected; there is no separate Bot row or native Bot cache reader. An enabled legacy Bot display selection maps to the ordinary Grok entry, even if the old Grok selection was disabled. Duplicate fetches collapse to one Grok read; the retired Bot display entry disappears. No special shared-pool label is added.
When a Claude subscription is hosted behind a remote Magpie gateway instead of local OAuth credentials, create usage-float.json inside the corresponding Claude config directory (for example ~/.claude-2/usage-float.json):
{"source": "magpie", "provider": "claude", "account": "you@example.com"}usage-float reuses ANTHROPIC_BASE_URL (HTTPS) and ANTHROPIC_AUTH_TOKEN / ANTHROPIC_API_KEY from settings.json in the same directory (or Paseo provider environment variables) to query /v1/magpie/quotas for that account's 5-hour and 7-day subscription windows and reset timestamps. No local OAuth token is required. If a query fails, usage-float never falls back to a different local subscription and marks the cached reading as stale. Magpie-backed accounts display usage only and do not expose local Claude rate-limit reset buttons.
| Action | Effect |
|---|---|
Click bottom-left refresh bar / F5 |
Refresh active providers now |
| Click a Codex usage percentage | Open the banked rate-limit reset credit dialog for that Codex account |
Click a claude 7d / claude 5h percentage |
Open the Claude weekly or 5-hour rate-limit reset dialog for that Claude account |
| Drag window | Move the floating HUD |
| Right-click | Refresh / Settings / Toggle auxiliary-screen panel / Always on top / Start at login / Exit |
Shortcut (default: double-tap Ctrl) |
Toggle between Usage Dashboard and Live Wallpaper |
Esc |
Exit |
Home |
Reset floating HUD position to the primary display corner |
Right-click -> Settings...
Use the Language selector at the top of Settings to switch between Simplified Chinese (zh, default) and English (en). The selection is saved immediately in ~/.usage-float/config.json (independent of the AgentCompass tray language) and live-refreshes Settings, the floating HUD, the auxiliary-screen dashboard, context menus, and rate-limit reset dialogs without restarting.
- Two-Column Drag-and-Drop Layout: Drag any provider row freely between the left and right columns to arrange the auxiliary-screen dashboard; unchecked rows remain visible and dimmed in place.
- Scan Available Accounts: Automatically discovers local Claude/Codex homes, Paseo provider directories, Magpie gateways, Grok, and Antigravity, reporting
Ready,Disabled, orNot Detected. - Quick Toggle & Auto-Balance: Click the checkbox or double-click any row to toggle it on/off, or click Auto-Balance Columns to split enabled rows evenly across both columns.
- Granular Provider Windows:
- Each Claude account splits into independent
fable 7d,claude 7d, andclaude 5hrows (e.g.,Claude 2 fable 7d,Claude 2 7d,Claude 2 5h). - Antigravity splits into four independent rows sharing a single CLI probe:
agy gemini 7d,agy gemini 5h,agy claude 7d, andagy claude 5h(abbreviated togemin compact floating mode).
- Each Claude account splits into independent
- Clean Failure Handling: Providers without local credentials take no space. When a refresh fails, an error label is shown only if no prior valid snapshot exists for that credential.
- API Proxy Reset Timezone: Configurable timezone for weekly LiteLLM proxy budget resets (defaults to
UTC+8).
- Select a target monitor and enable Dedicated Auxiliary-Screen Mode.
usage-floatbinds to the monitor's hardware identifier, automatically restoring full-screen panel layout when the display is hot-plugged and falling back to the floating HUD while disconnected. - Customize the wallpaper toggle shortcut (repeated key press
2–8times, or key combination such asCtrl+Alt).
- Folder Management & Recursion Depth: Add media directories with configurable subdirectory recursion depth (
0–8levels) and per-folder random selection weights. - Background Indexing: Newly added folders take effect immediately while a background scanner builds and persists
~/.usage-float/wallpaper-index.json, so opening the weight dialog never re-scans the disk. Long paths automatically truncate middle segments while preserving the root and leaf folder names. - Supported Media:
JPG,PNG,WebP,GIF,MP4,WebM,MKV, andMOV. - Playback Behavior:
- Starts on a weighted random item. Videos under 30 minutes play from the beginning; longer videos jump to a random chapter (or a random timestamp if unchaptered).
- Images display for 10 seconds by default (
2–300seconds configurable); portrait images center-crop to a square while landscape images and videos fill the panel. - When the panel is focused:
Left/Rightarrows seek±5sin video mode or step to the previous/next image; the mouse wheel adjusts volume.
- Instant Drag-and-Drop & Web Video Playback:
- Drop a local video file onto the window to loop that file immediately.
- Drag and drop an entire browser window, a torn-off browser tab, a web link, a video thumbnail card, a
.url/.htmlfile, or pressCtrl+V(or right-click → Paste Web/Video URL to Play) to launch an embedded borderless browser that full-screens and loops the web video (automatically closing the dragged source browser window after reading its URL), withLeft/Right±5sseeking, mouse-wheel volume, and mute controls. - Switching back to the Usage Dashboard terminates
mpvor the embedded browser process immediately so zero background decoding remains.
Eligible ChatGPT Plus / Pro subscriptions receive banked rate-limit reset credits valid for 30 days. Clicking a Codex row's usage percentage opens the credit list strictly scoped to that account (CODEX_HOME):
- List credits:
GET https://chatgpt.com/backend-api/wham/rate-limit-reset-credits - Redeem credit:
POST https://chatgpt.com/backend-api/wham/rate-limit-reset-credits/consumewith a uniqueredeem_request_idfor idempotent deduplication.
Anthropic grants eligible accounts /limit-reset entitlements (internal program cedar_ember). Clicking the claude 7d percentage opens a dialog showing grant expiration times and resettable windows.
Entitlement status piggybacks on the regular usage request with zero extra API calls:
GET https://api.anthropic.com/api/oauth/usage?cedar_ember=1&skip_spend=1Because Anthropic only returns this block to the CLI surface (plain requests receive ineligible_reason: "surface"), usage-float sends anthropic-client-platform: cli and dynamically reads the installed @anthropic-ai/claude-code/package.json version for User-Agent: claude-cli/<version>.
Redeeming a reset sends the exact CLI payload:
POST https://api.anthropic.com/api/organizations/<organizationUuid>/reset_rate_limits
{"program": "cedar_ember", "grant_id": "<next_grant_id>", "request_id": "<uuid>"}- Only
next_grant_idcan be redeemed immediately; additional grants appear as queued. organizationUuidis read fromoauthAccount.organizationUuidin~/.claude.json(falling back to/api/oauth/profile).- Network errors,
5xx, or429responses reuse the samerequest_idon retry so a grant is never double-spent.
Clicking claude 5h checks for the experimental weekly 5-hour session reset (juniper_tide), which becomes available only when an eligible account hits the 5-hour wall. Opening the dialog performs a read-only probe against GET https://api.anthropic.com/api/oauth/usage?at_wall=1&skip_spend=1 and redeems via:
POST https://api.anthropic.com/api/organizations/<organizationUuid>/reset_rate_limits
{"program": "juniper_tide"}Queries the official agy CLI's structured output:
agy -p /usage --output-format jsonRuns inside an empty temporary directory using the CLI's own login state without reading or copying tokens, enforces a 60-second timeout and 1 MiB output cap, and cleans up child processes on exit. Requires agy 1.1.11+ so older CLI versions never mistake /usage for a model prompt.
Since LiteLLM virtual keys rarely have permission to call /key/info, usage-float sends a lightweight embeddings probe (falling back to a minimal chat completion) and reads x-litellm-key-spend and x-litellm-key-max-budget from the response headers.
Settings are stored in ~/.usage-float/config.json:
Set "language": "en" for English or "language": "zh" for Simplified Chinese. Chinese remains the default for existing configurations that omit the field. Values are case-insensitive; zh-cn and en-us normalize to zh and en. Unsupported values fall back to zh.
{
"language": "zh",
"always_on_top": true,
"providers": ["codex", "codex-2", "grok", "claude:fable", "claude:7d", "claude:5h", "antigravity:gemini-weekly", "antigravity:gemini-5h", "antigravity:3p-weekly", "antigravity:3p-5h"],
"provider_order": ["codex", "codex-2", "grok", "claude:fable", "claude:7d", "claude:5h", "antigravity:gemini-weekly", "antigravity:gemini-5h", "antigravity:3p-weekly", "antigravity:3p-5h"],
"disabled_providers": [],
"refresh_seconds": 300,
"display_mode": "panel",
"shortcut_enabled": true,
"shortcut_mode": "repeat",
"shortcut_key": "ctrl",
"shortcut_repeat_count": 2,
"shortcut_combo": ["ctrl", "alt"],
"wallpaper_folders": ["D:\\Wallpapers"],
"wallpaper_image_seconds": 10,
"wallpaper_audio": true,
"llm_proxy_api_key": "",
"llm_proxy_endpoint": "",
"llm_proxy_budget_duration": "7d",
"llm_proxy_timezone": "UTC+8"
}- Minimum Refresh Interval:
refresh_secondshas a 300-second floor. - Activity-Aware Cadence & 429 Backoff: Active accounts poll roughly every 5 minutes, idle accounts every 30 minutes, and accounts with unknown activity every 15 minutes. Failed probes respect the same cadence and per-credential
429backoff; reopening the window never forces an upstream call. - Read-Only Credential Safety & Fingerprint Binding: Snapshots in
~/.usage-float/usage-cache.jsonare bound to a one-way SHA-256 fingerprint of their local credential and directory and written under a cross-process file lock (usage_lock.py) via atomic replacement.usage-floatnever rotates or writes CLI OAuth tokens; if a request fails with401, it re-reads the disk credential at most once in case the CLI refreshed it, and never replays a rate-limit resetPOST.
python -m unittest discover -p "test_*.py"
.\build-release.ps1 # Builds dist\usage-float-<version>-windows-x64.zipMIT License. mpv is distributed under the GPL: the source repository does not include the binary (install-mpv.ps1 downloads it on demand); release archives bundle mpv alongside THIRD_PARTY_NOTICES.md.
- AgentCompass — task routing and quota scheduling across your AI subscriptions.
- lark-mbti-jev — a local Feishu/Lark MBTI and anime persona overlay powered by Jev.




