An open API service indexing awesome lists of open source software.

https://github.com/eyalm321/clawdpanel

A retro-styled desktop HUD for Claude Code. Monitor token usage, switch accounts, dock across monitors, and stream Lo-Fi radio β€” all from a native cross-platform utility bar (Windows / macOS / Linux).
https://github.com/eyalm321/clawdpanel

anthropic claude claude-ai claude-code desktop-app golang hud linux macos radio retro statusbar taskbar tui usage usage-tracking wails windows

Last synced: 9 days ago
JSON representation

A retro-styled desktop HUD for Claude Code. Monitor token usage, switch accounts, dock across monitors, and stream Lo-Fi radio β€” all from a native cross-platform utility bar (Windows / macOS / Linux).

Awesome Lists containing this project

README

          

ClawdPanel logo

πŸ‘Ύ ClawdPanel

A retro-styled desktop HUD for Claude Code.

Monitor token usage, switch accounts, dock across monitors, and stream Lo-Fi radio β€” all from a native cross-platform utility bar.


Go 1.25
Wails v2
Windows | macOS | Linux
~6MB RAM
MIT License

Bar layout

Always-on-top Β· Frameless Β· Multi-monitor Dock Β· Pin / auto-hide on hover Β· System tray Β· Multi-account

---

## πŸ’‘ Why ClawdPanel?

A permanent lightweight desktop HUD for Claude Code users β€” live token monitoring, multi-account switching, cross-monitor docking, retro terminal aesthetics, ambient Lo-Fi radio, zero-browser workflow.

Unlike browser dashboards or terminal-only tools, ClawdPanel lives directly in your desktop environment with native OS integrations: Windows AppBar reservation, macOS LaunchAgents, Linux `_NET_WM_STRUT_PARTIAL`, system-tray everywhere.

## πŸ‘€ Built for

- Claude Code power users running long sessions
- Teams juggling multiple Claude accounts
- Terminal enthusiasts and retro / CRT-aesthetic fans
- Anyone who prefers a HUD over an extra browser tab

---

## 🎬 Demo

_Animated demos coming soon. For now, see [the bar layout above](#-clawdpanel) and the [themes](#-visual-design) section below._

---

## πŸ–₯️ Core Features

- **Live token usage** β€” weekly + hourly consumption, percentage, shaded progress bar, reset countdown
- **Multi-account** β€” switch any number of Claude accounts (separate `~/.claude` paths) via tray or Settings
- **Multi-monitor docking** β€” pick the target monitor at any time; reserves screen space on Windows + Linux X11
- **Pin / auto-hide on hover** β€” unpin to slide the bar off-screen; cursor at top edge slides it back
- **System tray** β€” switch account, switch monitor, toggle start-on-login, manage accounts, quit
- **Start on login** β€” native autostart on all three platforms
- **5 retro themes** β€” Claude, Fallout, Amber, Matrix, Dracula
- **Headless Claude FM** β€” embedded Lo-Fi YouTube stream with custom volume control

---

## πŸš€ Quick Start

Download from the [Releases](../../releases/latest) page:

| Platform | File | Notes |
|---|---|---|
| Windows 10/11 x64 | `ClawdPanel-*-windows-amd64-setup.exe` | NSIS installer. Requires [WebView2 Runtime](https://go.microsoft.com/fwlink/p/?LinkId=2124703) (pre-installed on Win11). |
| macOS 10.13+ (Intel + Apple Silicon) | `ClawdPanel-*-macos-universal.pkg` | Double-click to install to `/Applications`. |
| Debian / Ubuntu | `clawdpanel_*_amd64.deb` | `sudo apt install ./clawdpanel_*_amd64.deb` |
| Fedora / RHEL | `clawdpanel-*.x86_64.rpm` | `sudo dnf install ./clawdpanel-*.x86_64.rpm` |
| Any Linux (portable) | `ClawdPanel-x86_64.AppImage` | `chmod +x ClawdPanel-x86_64.AppImage && ./ClawdPanel-x86_64.AppImage` |

Installers wire up Claude Code's `statuslineCommand` automatically and clean it up on uninstall β€” no terminal commands needed. AppImage users get a one-time first-run prompt instead.

First-launch security warnings (unsigned v1)

- **Windows** β†’ SmartScreen "Windows protected your PC" β†’ *More info* β†’ *Run anyway*
- **macOS** β†’ "ClawdPanel cannot be opened…" β†’ System Settings β†’ Privacy & Security β†’ *Open Anyway*, or right-click the .app β†’ *Open*
- **Linux .deb/.rpm** β†’ no warnings (root install)
- **AppImage** β†’ no warnings (user-mode)

Build from source

Requires Go 1.25+, Node.js 18+, Wails v2 CLI (`go install github.com/wailsapp/wails/v2/cmd/wails@latest`). On Linux also: `libgtk-3-dev`, `libwebkit2gtk-4.1-dev`, `libayatana-appindicator3-dev`, `pkg-config`.

```bash
wails dev # hot-reload dev mode
wails build -platform windows/amd64 -nsis # Windows installer
wails build -platform darwin/universal # macOS .app (then build/darwin/scripts for .pkg)
wails build -platform linux/amd64 -tags webkit2_41 # Linux binary (then nfpm/AppImage via build/linux/*)
```

---

## 🎨 Visual Design

Five distinct CRT-scanline-filtered themes, cycle on the fly:

| Theme | Vibe |
|---|---|
| πŸ”Έ **CLAUDE** (default) | Flat CLI β€” signature terracotta orange (`#d77757`), lavender badges (`#b1b9f9`), white headers |
| 🟒 **FALLOUT** | Pip-Boy green HUD, outlined progress brackets, glowing CRT scanlines |
| 🟑 **AMBER** | DEC VT100 / Fallout NV amber terminal β€” glowing values, dimmed labels |
| πŸ“Ÿ **MATRIX** | Digital rain β€” sharp green characters, blinking caret synced to warning status |
| 😈 **DRACULA** | Sleek dark mode β€” cyan labels, pastel pink progress |

Claude Β Β·Β  terracotta + lavender, the default


Claude theme

Fallout Β Β·Β  Pip-Boy green with CRT scanlines


Fallout theme

Amber Β Β·Β  DEC VT100 glowing amber


Amber theme

Matrix Β Β·Β  digital rain with dot dividers


Matrix theme

Dracula Β Β·Β  dark mode with pastel pink progress


Dracula theme

### Typography & TUI glyphs

- **Developer-first font stack**: prefers Cascadia Mono / Cascadia Code, then SF Mono, Menlo, Fira Code, JetBrains Mono, DejaVu Sans Mono, Inconsolata β€” uses whatever's installed.
- **Retro shaded meters**: usage rendered with `β–‘β–’β–“β–ˆ` glyphs that change shade with warning tier; unused cells are faint terminal middle dots (`Β·`).

---

## πŸ› οΈ Advanced Features

### Pin / auto-hide

A pin icon to the right of THEME toggles:
- **Pinned** (orange, tilted): docked, permanently visible β€” the default.
- **Unpinned** (gray, upright): bar slides up off-screen; cursor at the top edge slides it back.

Implementation notes

Go-side cursor polling at 80 ms β€” WebView2's `mouseleave` is unreliable on a 28 px window. A 200 ms grace period prevents accidental dismissal on cursor overshoot. The slide animates the OS window's Y position at ~60 fps (ease-out cubic) with a `SetWindowRgn` clip that masks any portion that would spill onto a monitor sitting above. (Windows only at v1; on macOS / Linux the toggle still affects docked-vs-floating state but the slide is a no-op.)

### Multi-monitor docking

Pick the target monitor from the tray menu. On Windows, **AppBar mode** uses `SHAppBarMessage` to reserve screen space β€” maximized windows automatically tile below. On Linux X11 it sets `_NET_WM_STRUT_PARTIAL` for compatible compositors. On macOS and Linux Wayland the bar floats at the topmost window level without reserving space.

### Claude FM (headless Lo-Fi radio)

Embedded YouTube audio stream β€” no browser windows needed.

- πŸ“» **Masked marquee**: when playing, the label scrolls `NOW PLAYING CLAUDE FM Β·` horizontally behind a 75 px mask; reverts instantly on pause.
- πŸ”Š **0–200 % volume range**: extended headroom mapped linearly to YouTube's `0–100`.
- πŸŽ›οΈ **Dual control**: scroll-wheel adjusts in 5 % steps; clicking `VOL` cycles in 10 % steps.
- πŸ’Ύ **State persistence**: volume and theme saved to `localStorage`.

### Smart status overrides

Dynamic and static `OFFLINE` indicators are translated globally into a lavender **`IDLE`** badge (`#b1b9f9`) to preserve your active CLI context.

---

## 🧭 Architecture

```
Claude Code (CLI)
β”‚
β”‚ statuslineCommand hook
β–Ό
~/.claude/rate_limits.json ← written every prompt
β”‚
β”‚ filesystem poll (refreshSeconds)
β–Ό
ClawdPanel backend (Go)
β”‚
β”‚ Wails IPC (JSON bindings)
β–Ό
WebView frontend (HTML/CSS/JS)
β”‚
└── OS integrations: AppBar / NSWindow / X11 dock,
system tray, autostart, monitors
```

---

## βš™οΈ Configuration

Auto-created on first run:

| Platform | Path |
|---|---|
| Windows | `%APPDATA%\ClawdPanel\config.json` |
| macOS | `~/Library/Application Support/ClawdPanel/config.json` |
| Linux | `$XDG_CONFIG_HOME/ClawdPanel/config.json` (fallback `~/.config/ClawdPanel/config.json`) |

```json
{
"monitor": 0,
"theme": "claude",
"opacity": 0.92,
"refreshSeconds": 15,
"barHeight": 28,
"appBarMode": true,
"startWithWindows": false
}
```

> **Accounts** are managed inside the app β€” open **Manage accounts** from the system tray to add, rename, switch between, or remove Claude account paths. No JSON editing required.

| Field | Description |
|---|---|
| `barHeight` | Pixel height of the bar |
| `refreshSeconds` | Re-read interval for Claude data files |
| `theme` | `claude`, `fallout`, `amber`, `matrix`, `dracula` |
| `appBarMode` | Reserve screen space (Windows / Linux X11 only) |

How live usage capture works

ClawdPanel reads `~/.claude/rate_limits.json`, populated by Claude Code's `statuslineCommand` hook. Installers set this hook automatically and clear it on uninstall by editing `~/.claude/settings.json` (only the `statuslineCommand` key β€” other keys are preserved).

If you built from source or are using the AppImage and want to configure manually:

```bash
claude config set statuslineCommand "node -e \"const fs=require('fs');const p=require('path');const os=require('os');const d=fs.readFileSync(0,'utf-8');if(d){const parsed=JSON.parse(d);fs.writeFileSync(p.join(os.homedir(),'.claude','rate_limits.json'),JSON.stringify({...parsed,captured_at:Date.now()}))}\""
```

Every Claude prompt then writes a tiny JSON payload to `rate_limits.json`, which ClawdPanel picks up instantly.

---

## πŸ“ Project Structure

```
clawdpanel/
β”œβ”€β”€ main.go # Wails bootstrap + embed directives
β”œβ”€β”€ app.go # App struct + Wails-exported bindings
β”œβ”€β”€ icon_{windows,darwin,linux}.go # Per-OS tray icon embedding
β”œβ”€β”€ internal/
β”‚ β”œβ”€β”€ config/
β”‚ β”‚ β”œβ”€β”€ config.go # Config struct, Load/Save, cross-platform AppDataDir
β”‚ β”‚ └── startup_{windows,darwin,linux}.go # autostart (registry / LaunchAgent / .desktop)
β”‚ β”œβ”€β”€ claude/ # Read Claude JSON files, compute BarData
β”‚ β”œβ”€β”€ platform/ # Per-OS window + monitor APIs
β”‚ β”‚ β”œβ”€β”€ window_{windows,darwin,linux}.go
β”‚ β”‚ └── monitor_{windows,darwin,linux}.go
β”‚ └── tray/ # System tray via fyne.io/systray
β”œβ”€β”€ frontend/ # Wails webview UI
└── build/
β”œβ”€β”€ windows/installer/ # NSIS template + statusline PowerShell script
β”œβ”€β”€ darwin/scripts/ # pkgbuild postinstall/preuninstall bash scripts
└── linux/ # nfpm.yaml, .desktop, AppDir, AppRun, postinstall.sh
```

---

## ⚠️ Known limitations (v1 cross-platform)

- **Linux Wayland**: no portable protocol for "stay above other windows" or "reserve screen space". KWin honors `_NET_WM_WINDOW_TYPE_DOCK`; GNOME/Mutter mostly ignores it; wlroots compositors (Hyprland, Sway) vary. X11 sessions work correctly.
- **macOS docking**: NSWindow at `NSStatusWindowLevel` floats above other windows but can't reserve screen space the way Windows AppBar does β€” accepted as macOS-native behavior.
- **macOS Gatekeeper** (unsigned v1): see *First-launch security warnings* in Quick Start.
- **Settings merge safety**: if `~/.claude/settings.json` already exists but contains invalid JSON, the installer logs a warning and skips the modification rather than overwriting it.

---

## πŸ“„ License

MIT β€” see [LICENSE](LICENSE).