Skip to content

How much Claude do I have left?

Your dev stack,
always on the glass.

Dev HUD pins one acrylic board to your desktop with your Claude and Codex rate limits, your repositories’ CI, and your machine’s health on it — live, read-only, and always under your windows. No account, no telemetry, nothing to configure.

Windows 10 & 11 onlyno macOS or Linux build yet

  • ~10 MB
  • MIT licensed
  • No telemetry
  • No account
The top row of the Dev HUD board: Claude and Codex usage rings with burn and reset countdowns, OpenClaw gateway health, repository CI status, and system meters.

Swipe the board →

Dev HUD running pinned to the Windows desktop layer.

The four questions

The answers were always somewhere. Now they are in one place.

Dev HUD turns the checks that break your focus into one quiet, live surface.

01

How much Claude do I have left?

Live 5hand weekly rate-limit rings use real percentages from the OAuth usage API, not log estimates. See today’s token and cost burn, the active block countdown, a 24h sparkline, per-model usage, and the sessions working now with their project and freshness.

02

How much Codex do I have left?

5hand weekly rings, reset countdowns, and plan information come from Codex’s own session logs. An on-pace or over-pace read tells you whether the current allowance will make it to reset.

03

What's happening in my repos?

Repositories are discovered from your ghCLI account, with no watch list to maintain. GitHub’s open_issues_count includes pull requests; Dev HUD subtracts them. Each row also carries CI, stars, and the latest release with a NEW badge when something ships.

04

Is the machine okay?

CPU, RAM, commit charge, and network throughput stay visible on the System card. Disks, thermals, GPU, and network quality are one card away when those collectors are available.

A canvas, not a grid

Every card owns its rectangle.

Drag by the grip. Resize independently from the right edge, bottom edge, or corner. Another card’s edge is the only boundary: occupied drops slide as far as they fit and park without swapping or reflowing. A red outline marks taken space, a dashed ghost previews the landing, and locking makes the whole board read-only.

Information density

Each card responds to its own measured box.

Showing cards at standard density.

Claude

Drag by the grip.

Repositories

Cards park. Nothing swaps.

System

Resize from any edge.

Docker

The nearest free space wins.

Network

A dashed ghost previews the landing.

Processes

Each card measures its own box.

Ports

Taken space turns the outline red.

Hover or focus a card to inspect the board behavior it illustrates.

Detected, not configured

Every card has three honest states.

Auto appears only when the capability is detected. On keeps it visible. Off hides it and never polls it. The first run lists exactly what Dev HUD found, so a machine without an NVIDIA GPU never gets a broken-looking GPU card. Zero configuration out of the box.

Detection controls the starting board. You remain in control of what stays visible and what is allowed to poll.

AutoOnOff

Claude

Five-hour and weekly OAuth rings, burn, countdown, model split, and sessions.

Codex

Five-hour and weekly rings from session logs, resets, plan, pace, and sessions.

OpenClaw gateway

Health, latency, uptime, memory, CPU, and a jump to the Control UI.

Repositories

gh-discovered CI, pull requests, corrected issue counts, stars, and releases.

System

CPU, RAM, commit charge, network throughput, and LAN/WAN addresses.

Tailscale

Connection state, tailnet address, MagicDNS name, and peers online.

Docker

Containers, status, ports, and an honest daemon-not-running state.

GPU (NVIDIA)

nvidia-smi utilization, VRAM, temperature, power, clocks, fan, and processes.

Thermals

Package, core, and fan readings, ACPI fallback, and honest setup states.

Disks

Per-volume capacity plus live read and write throughput.

Network quality

Ping, jitter, loss with TCP fallback, plus Wi-Fi signal, SSID, and link rate.

Ports map

Listening TCP ports mapped to owners, local endpoints, and process badges.

WSL

Distro state, vmmem cost, per-distro terminate, and shut down all.

Battery & power

Charge, AC state, runtime, and power plan; auto-hidden on desktops.

Uptime & reboot

Uptime, boot time, and pending-reboot registry markers.

Software updates

Available winget upgrades refreshed on a six-hour cadence.

Speedtest

On-demand Cloudflare download, upload, and latency test.

Ollama

Loaded models, VRAM, unload countdown, and installed model count.

MCP inspector

Claude Desktop, Claude Code, and Codex servers matched to live processes.

Processes

node, bun, and deno with identity-safe kills, orphan detection, and idle timers.

Your collector

Custom cards use the same shell.

The versioned, sandboxed contract accepts an argv array, never a shell; a local file; or a loopback HTTP endpoint returning schema-validated JSON. Timeouts, output-size limits, sanitised text-only rendering with no HTML, and an honest error state keep custom data inside the same rules as every built-in card.

Read the custom card contract

Living with it

An always-on widget that never gets in the way.

Acrylic glass over your wallpaper, pinned beneath every window you open. It's there when you glance down and invisible when you're working.

Lives on the desktop layer

Always visible under your windows, never in the way. Three layering modes from the tray — pinned to desktop, normal window, or always on top. A focus-lost handler re-sinks the widget so Windows can't float it mid-stack after you interact with it.

Drag it anywhere, then lock it

Window position and every card rectangle persist across restarts. The lock — in the header or from the tray — disables dragging, so a stray mouse can't move it. Locking also makes the board read-only.

About 10 MB, no Electron

Tauri 2, Rust and React 19 on the system WebView2. Polling is per-card configurable, slows down while the HUD is hidden, and backs off expensive collectors on battery. Cards you switch off are never polled at all.

Collapses to a single line

Every card folds to a one-line summary — spend today, percent used, gateway latency — and remembers its state. Named profiles capture visible cards, layout, sizes, poll intervals, opacity, layering, privacy and alert rules.

Built-in profiles

  • AI development
  • Network diagnostics
  • Performance & thermals
  • Repository maintenance
  • Presentation
  • Minimal ambient

The operator console

Six questions. One continuous walk.

The board is not a wall of disconnected gauges. Each answer leads directly to the next, from the first abnormal signal to a verified recovery.

  1. 01What’s happening now?The board
  2. 02What’s abnormal?The Needs attention strip under the header
  3. 03What’s affected?Click the item; land on the card
  4. 04What correlates?The timeline
  5. 05What can I do?The inspector’s actions
  6. 06Did it work?The alert recovers itself and says so

Status semantics

Four dimensions. Never one overloaded dot.

Every card reports health, activity, attention, and freshness independently, because collapsing them into one dot is how stale gets mistaken for broken.

healthy: The source answered successfully.active: The entity is doing work.warning: A human should look.cached: The value came from a cache.
Health
healthy · degraded · unavailable · unknown
Can the source answer at all?
Activity
active · idle · stopped · starting
Is the thing doing work?
Attention
normal · warning · critical
Does a human need to look?
Freshness
live · stale · estimated · cached · not measured
How much do we trust the timeliness?

Nothing is signalled by colour alone. Every badge carries a glyph, a label, and an accessible description.

“Empty” distinguishes a valid zero, not configured, not installed, unsupported on this host, permission denied, and collector failure. Each state explains itself and offers the action that fixes it.

One row pattern, everywhere

The row is the button.

A labelled action costs roughly 90px of permanent width. A Ports row used to carry three. Cards had to be half the screen wide before anything fit.

Actions moved into the inspector. At most one icon survives inline, and only when it is the row’s obvious verb.

[dot]primary · secondarybadge badgemetric metric[↗]fixedflex 2 · flex 1drop firstfixed, tabular

Responsive row, shown at this container width.

Healthy status.localhost:5434node.exe · pid 18789healthy: The listening port answered.live: The collector measured this in the latest poll.42 ms18 MB

The row sheds badges first, then the secondary qualifier, then the second metric. The primary identifier never disappears; it truncates with an ellipsis, while the full value remains in the tooltip and inspector. Numbers never truncate. They stay fixed-width, right-aligned, and tabular.

Keyboard

Navigate without leaving the board.

CtrlK//
Open the command palette for pid:18789, port:5434, repo:name, mcp:name, or any command by name.
Move between cards.
Enter
Inspect the focused card.
Escape
Close the inspector, palette, or panel.
CtrlR
Refresh every collector.

Destructive commands are labelled and require Enter twice.

Inspector

any card · Enter on focus

healthy: The inspected entity is healthy.

Full context

  • Current state and history
  • Related entities and recent events
  • Safe actions available now

Data provenance

  • Collector and dependencies
  • Last attempt and last success
  • Poll duration and last error

Linked in both directions

port → owning process → working directory → repository → agent session → the MCP server it spawned

Nothing is a database. The graph is rebuilt from every poll, so a dead PID can never linger as a phantom edge.

Alerts that behave like alerts

Signal the change. Preserve the incident.

A threshold crossing is not a disposable toast. Dev HUD models escalation, recovery, suppression, and the evidence needed after the machine looks normal again.

Rule anatomy

Thresholds with memory

WarningFirst tier
CriticalEscalation tier
SustainedDuration
HysteresisRecovery threshold
RecoveryDwell time
CooldownRe-notification
Quiet hoursSchedule
CompositeTwo conditions

Warning and critical tiers each account for time. Recovery uses a separate threshold and dwell period. Cooldowns and quiet hours suppress repetition. Composite rules can require two conditions at once.

A real rule

Warn when packet loss > 5% for 90 s. Critical when > 12% for 30 s. Recover when it stays under 2% for 60 s. Don’t re-notify for 15 minutes unless it gets worse.

sustained threshold · recovery dwell · cooldown override

Persistent alert records

The toast is only the notification.

The underlying alert survives dismissal and restart. Escalation breaks through a cooldown, an acknowledgement, or a snooze. Getting worse is always news.

  • Severity alert record field
  • First / last seen alert record field
  • Duration alert record field
  • Current value alert record field
  • Trigger alert record field
  • Related entities alert record field
  • Acknowledge / snooze alert record field
  • Suggested action alert record field
  • Recovery time alert record field

Timeline

Changes, not polls.

The event stream reads as a story. Repeated samples disappear; state changes remain in the order an operator needs to reconstruct what happened.

  1. Network packet loss crossed 10%

    newest: most recent event
  2. Tailscale switched from direct to relay

  3. Process 18789 became orphaned

  4. Docker container restarted

Critical incident snapshot

Recovery does not erase the evidence.

When a critical alert opens, Dev HUD can freeze a redacted snapshot locally. The post-mortem remains possible after every live metric has recovered.

  • CPU
  • memory
  • disks
  • thermals
  • network
  • process tree
  • listening ports
  • containers
  • WSL
  • gateway
  • MCP servers
  • AI sessions
  • repositories
  • recent events

Local and redacted. Retention is capped by both count and bytes.

Where the data comes from

Every number has an address.

Dev HUD names the command, file, endpoint, or operating-system API behind every card. The implementation details are part of the trust model.

Claude
~/.claude/projects/**/*.jsonl + api.anthropic.com/api/oauth/usage

Local scans dedupe by message.id + requestId because resumed sessions copy history. Costs are API-equivalent estimates. The OAuth token is read-only, never refreshed or stored; active sessions come from transcripts written in the last 10 min.

Codex
~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl

Each session’s last token_count carries cumulative tokens and the freshest rate_limits. Tail reads are 256 KB with mtime-keyed caching; active sessions use rollout mtimes and session_meta cwd.

OpenClaw
GET http://127.0.0.1:{port}/health + process scan

Port order is OPENCLAW_GATEWAY_PORTgateway.port in ~/.openclaw/openclaw.json18789. The documented /health endpoint creates no session per poll.

Repos
GitHub REST API via gh CLI auth

Uses gh auth token, with environment fallback. Owner repositories are auto-discovered by recent pushes. Issue counts subtract pull requests because GitHub’s open_issues_count includes them.

System
sysinfo + K32GetPerformanceInfo

CPU, RAM, network rates, LAN and cached WAN IP. Commit charge is the number task managers call swap/pagefile on Windows; the LAN lookup uses a UDP connect without sending a packet.

Tailscale
tailscale status --json

Backend state, tailnet IPv4, MagicDNS name, and peers online versus total.

Docker
docker ps --format "{{json .}}"

Distinguishes not installed, daemon down, and running containers.

GPU
nvidia-smi --query-gpu=… --format=csv + pmon -c 1 -s m

Every field is optional; [N/A] is normal. An 8 s kill timeout guards broken drivers.

Thermals
LHM :8085/data.json → WMI MSAcpi_ThermalZoneTemperature

WMI runs on one dedicated bridge thread because COM is not Send. The widget never elevates.

Disks
sysinfo + Win32_PerfFormattedData_PerfDisk

Formatted counters are already rates.

Net quality
ping.exe / TCP:443 fallback + netsh wlan

Locale-proof ping parsing with a TCP fallback when ICMP is blocked. A 20-sample window tracks average, jitter, and loss.

Ports
GetExtendedTcpTable (via listeners)

Feeds clickable listening-port badges into the Processes card.

WSL
wsl -l -v (UTF-16LE decoded!)

vmmem RAM comes from the shared process table.

Battery / Uptime
Win32_Battery + powercfg / registry reboot markers

The battery card auto-hides when no battery exists.

Updates
winget upgrade

Columns are located by header offsets because headers localize.

Speedtest
speed.cloudflare.com/__down / __up

On-demand only.

Ollama / MCP
:11434/api/ps + tags / Claude+Codex config files

MCP running state is matched against live command lines.

Processes
sysinfo snapshot

A long-lived scanner derives meaningful CPU deltas. Kills verify (pid, start_time), so a recycled PID is never terminated.

Standing promise

Everything is read-only. There is no maintainer analytics, tracking, account, or telemetry.

Privacy

Your HUD is not somebody else’s dataset.

Dev HUD is read-only by default. There is no maintainer analytics, tracking, account, crash reporting, or telemetry of any kind.

Every outbound service

This is the complete list. Turn a collector’s card off and it is never polled.

  • Anthropic usage API

    Claude rate limits, only while the Claude card is enabled.

  • GitHub API

    Repository state, using the existing gh CLI session.

  • api.ipify.org

    A cached public-IP lookup for the System card.

  • Configured ping target

    Network quality; the default target is 1.1.1.1.

  • Cloudflare speedtest

    Runs only when you explicitly request a speed test.

  • winget

    Update checks and the confirmed LibreHardwareMonitor setup.

Read the complete network policy →

Dev HUD does not own auth.

The Claude Code OAuth token is used read-only and is never refreshed or stored. GitHub authentication comes from your existing gh CLI session. Credentials go only to their own services and are never logged.

Privacy mode redacts the value.

One toggle replaces IP addresses, hostnames, device and peer names, repository names, usernames, filesystem paths, process arguments, and session identifiers across cards, inspectors, alerts, the timeline, copied text, exports, and incident snapshots. Session-stable aliases such as ip-1 and repo-2 keep the HUD readable.

Blur was not an option, because the raw value must never survive in a tooltip, an accessibility label, or the clipboard.

Secrets and tokens are masked in every mode, not only privacy mode.

Screen-share preview

The same row, before and after redaction.

Address
ip-1
Repository
repo-2
Process
node path-1 --session session-1

Safe actions

Every state-changing action is explicit, argument-validated, confirmed, time-bounded, and written to a local audit trail.

Nothing is interpolated into a shell: every process is spawned with an argv array, and identifiers are validated by grammar rather than a blocklist. Repository commit, push, reset, and discard actions are deliberately not implemented.

Download

Put your whole dev stack on the Windows desktop.

Dev HUD is a Windows-only application. It installs per user on Windows 10 or 11 x64, needs no administrator rights, and WebView2 already ships with Windows 11. There is no macOS or Linux build yet.

Windows installer

Windows 10/11 x64 · per-user install

Requirements

  • Windows 10/11 x64
  • WebView2
  • No admin needed

Build from source

Requires Rust stable, Node 20+, and WebView2.

npm install
npm run tauri dev
npm test
npm run typecheck
cargo test --manifest-path src-tauri/Cargo.toml
npm run tauri build

Dev HUD is Windows-first today. Linux and macOS builds are planned, not available; everything except acrylic and the kill probe is already cross-platform.

FAQ

The honest answers.

The limitations are part of the product story. Here is what exists today and what still does not.

Is Dev HUD free?

Yes. Dev HUD is free, open source, and MIT licensed.

Does it send my data anywhere?

There is no maintainer telemetry. The only external services are Anthropic’s usage API, the GitHub API, api.ipify.org, your configured ping target (1.1.1.1 by default), the on-demand Cloudflare speedtest, and winget update checks. Turn the related card off and that collector is never polled.

Why does Windows warn me when I install it?

The installer is not code-signed yet, so SmartScreen warns on first run. Click More info → Run anyway.

Does it need administrator rights?

The per-user Dev HUD install needs no administrator rights. The one exception is the optional guided LibreHardwareMonitor setup for full CPU thermals, which asks for one explicit UAC approval.

Why isn’t LibreHardwareMonitor bundled?

LibreHardwareMonitor loads the WinRing0 kernel driver, which Defender and HVCI flag on some machines. Bundling it would hurt the installer’s SmartScreen reputation, and a vendored copy would go stale while winget keeps its package current. The guided setup installs it only after you opt in. To remove its autostart task, run schtasks /Delete /TN LibreHardwareMonitor-DevHUD /F as an administrator.

Do I have to configure my repositories?

No. Dev HUD follows your existing gh CLI account and discovers your repositories automatically.

Does it slow my machine down?

Polling is configurable per card, slows while the HUD is hidden, and backs off expensive collectors on battery. Cards set to off are never polled. The Windows app is about 10 MB and is built with Tauri rather than Electron.

Is there a macOS or Linux build?

Not yet. Dev HUD is Windows-first today. Linux and macOS builds are planned, and everything except acrylic and the kill probe is already cross-platform.

How is this different from Task Manager or a menu-bar app?

Dev HUD puts AI-provider rate limits and repository state beside machine health on the Windows desktop layer. It answers those questions together, at a glance, instead of separating them across system tools and browser tabs.

Can I add my own card?

Yes. Custom cards use a versioned, sandboxed contract for an argv command, local file, or loopback HTTP endpoint. Payloads are time-bounded, size-limited, schema-validated, and rendered as sanitized text only.

Read the custom-card contract