shipped · hotkey-only surface

Grid

Python + PyQt overlay + WinAPI hotkey + OAuth refresh

Built for:
People who launch the same 25 things every day and want a faster path than the Start menu, the dock, or muscle-memorising 25 distinct shortcuts.
Not built for:
People who want a maximalist launcher with categories, search, and AI summon. Grid is 25 tiles and a hotkey, and that is the entire surface.

Press the hotkey, the grid appears, a number or a letter launches the thing. Plus a row of live tiles showing Claude Max session usage — pulled directly from Anthropic’s OAuth endpoint, not screen-scraped, not guessed.

§ I

The problem

The Start menu is a keyboard input field that wants you to type. The taskbar is a row of pictograms that requires the mouse. Both are slow when the thing I’m launching is one of the 25 I launch every single day. Grid is for those 25.

The second piece — the live Claude Max usage row — is an answer to a different daily question: how much of this session window have I burned, and how much is left. Anthropic publishes this through the same OAuth endpoint Claude Code uses. Grid pulls it directly, refreshes the tile, and that’s the truth.

§ II

Decisions

  1. kept

    5×5, not configurable. The grid is exactly the size of a number row plus four letter rows; you can hit any tile with one keystroke. Adding a sixth row is the kind of feature that erases the entire reason the tool is fast.

  2. kept

    OAuth direct over screen-scraping. Polling Anthropic’s OAuth usage endpoint with a refresh-token-only client returns canonical numbers; scraping the dashboard returns whatever the dashboard happened to render that minute. Direct beats indirect.

  3. added

    A local TTS widget, launched from one of the tiles. Zonos transformer running entirely on-device, voice-cloning from short audio samples, with break and emotion tags in the prompt. Everything stays on the laptop.

§ III

System

Stack — current pins.
LayerImplementationPurpose
HotkeyWinAPI global hookShow / hide the grid overlay
OverlayPyQt frameless window5×5 grid, key-driven, no mouse
Usage daemonOAuth refresh loopapi.anthropic.com/api/oauth/usage direct
TTS widgetZonos transformerLocal voice cloning · emotion + break tags
StateSQLiteTile config · usage history · launches
Grid 5×5 launcher invoked over a desktop, with 25 letter-labelled tiles and a top row of four live Max usage tiles showing session windows, percentages, and request counts.
FIGURE 1. The launcher mid-session. Twenty-five tiles, one keystroke each. The top row is the truth about how much of the Max session window is left, pulled directly from the OAuth endpoint.
Grid Max usage tile close-up — big mono session readout of 3h 17m of 5h 00m used, a steel-blue progress bar, input/output token counts and cost in USD, three smaller secondary tiles for weekly cap, monthly cap, plan tier.
FIGURE 2. One usage tile, blown up. Session window, weekly cap, monthly cap, plan tier — every number Anthropic exposes via the OAuth endpoint, all four refreshed live. The progress bar is the only thing the rest of the day is going to be measured against.
Grid single-tile configuration modal — slot field showing A4, label input set to Anthropic, URL input, icon source radios, live tile preview rendering with the favicon and key hint.
FIGURE 3. Configuring one tile. Slot, label, URL, icon — everything goes into a single SQLite row. The preview on the right is what the launcher will render the next time the hotkey fires; the saved indicator is the only confirmation needed.

Acknowledgments

Dependencies, sorted by what would break first if removed: WinAPI for the global hotkey, PyQt for the frameless overlay, the Anthropic OAuth usage endpoint for the live-tile data (the one piece nobody else is serving), Zyphra’s Zonos transformer plus eSpeak NG for the local TTS widget. Five tools, twenty-five tiles, one hotkey. None of them mine.

← Index