About
Claude Cockpit
Keep an eye on your Claude Code subscription and manage every local session from the bar: rate-limit windows and token cost, every session on the machine grouped by project with one click to resume it in a terminal, and quick access to edit CLAUDE.md files (global and per project) in your own editor.
Plugin
| Field | Value |
|---|---|
| ID | nightwatch75/claude-cockpit |
| Entries | Bar widget: widget; panel: panel; service: service |
The service entry is headless and owns the usage fetch loop; panel is a
thin client of its published state for the Usage tab, and fetches sessions
and CLAUDE.md data itself, on demand, for its other two tabs.
Requirements
jqandcurlonPATH— required for the Usage tab (the service checks for both and reports a status instead of running when either is missing).bash, plus the base userlandget-claude-usageandlist-claude-sessionscall:find,stat,grep,tac,awk,head,tail,rm. These ship with coreutils, findutils, gawk, grep and bash on every supported distribution.- An authenticated Claude Code install for the Usage tab, i.e.
~/.claude/.credentials.jsonexists. Sessions and CLAUDE.md work regardless. codeorzedonPATHto open a CLAUDE.md from the panel (or seteditor_commandto something else).
Usage
Add the Claude Cockpit widget to a bar from the Add-widget picker. Click it to open the panel:
noctalia msg panel-toggle nightwatch75/claude-cockpit:panel
The panel has three tabs:
- Usage — rate-limit windows (5-hour session, 7-day plan-wide week, and a model-scoped week when the plan has one), token consumption for today, this week and this month with estimated cost, a Monday-to-Sunday activity chart (hover a bar for that day's detail), a per-model breakdown and all-time session/message stats.
- Sessions — every local Claude Code session, grouped by the project
(working directory) it ran in, most recent first. Click a session to
resume it (
claude --resume <id>) in a terminal, opened in that project's directory. The brain glyph opens that project'sCLAUDE.mdin the editor (offering to create it if missing); the eye glyph expands a preview (the session's opening prompt); the trash glyph deletes the session's transcript after an inline confirm. The search box filters by title, opening prompt or project path. Fetched when the tab is first opened and on the header refresh button — never polled in the background. - CLAUDE.md — the global file, every CLAUDE.md
find-claude-mdfinds under$HOME(symlinks to e.g.AGENTS.mdincluded, noise dirs —.git,node_modules,.cache,.venv— and remote/network mounts excluded), plus one row per session-linked project that has none yet so it can still be created. Each row has a badge and a button that opens it in your editor.
Rename is deliberately not offered: Claude Code has no command to rename a
session after it is created, so there is nothing this panel could persist
that Claude's own /resume picker would also show. A session's label is its
AI-generated title, or its last prompt cut short when no title exists yet.
Settings
| Setting | Type | Default | Description |
|---|---|---|---|
usage_refresh_interval |
int |
2 |
Minutes between background usage fetches (2–15). |
currency |
select |
auto |
Cost display: auto follows the locale, or force one of usd, eur, gbp, jpy, cny, chf, aud, cad, inr. |
currency_api_url |
string |
https://api.frankfurter.dev/v1/latest |
Exchange-rate API get-claude-usage fetches non-USD rates from (ECB rates via Frankfurter by default). |
terminal |
string |
"" |
Command to open a terminal for resuming a session. Empty uses the system's own terminal discovery ($TERMINAL, then the usual emulators). |
editor_command |
string |
"" |
Command to open a CLAUDE.md file. Empty tries code, then zed. |
glyph |
glyph |
robot |
Bar widget glyph. |
usage_percent_display |
select |
both |
What rides beside the glyph: session (sNN%, the 5-hour window), weekly (wMM%, the 7-day window), both, or none. |
Notes
What this plugin touches, so nothing is a surprise:
- Reads
~/.claude/.credentials.jsonfor the OAuth token that authorizes the usage query (Usage tab only), and every~/.claude/projects/**/*.jsonlsession transcript — never a whole file, only smallgrep/tac+awkslices, since a single line in one of these files can itself be hundreds of KB. - Network: the Anthropic usage API for your account's rate windows;
LiteLLM's public model-price table to cost the tokens; the
currency_api_urlexchange-rate API (Frankfurter/ECB by default) for USD to the configured currency. All over HTTPS, on the usage refresh interval — the Sessions and CLAUDE.md tabs make no network calls. - Spawns
get-claude-usage,list-claude-sessionsandfind-claude-mdthroughbash; a configured or auto-discovered terminal to resume a session;code/zed(oreditor_command) to open a CLAUDE.md.find-claude-mdwalks$HOMEon the CLAUDE.md tab's first open and its refresh button only, never on a timer — remote/network mounts (NFS, SMB, sshfs, and similar) under$HOMEare detected via/proc/mountsand excluded, so a stalled share cannot stall it. - Deletes files: the trash glyph on a session removes its
<uuid>.jsonltranscript and, if present, its<uuid>/subagent sidecar directory — after an inline confirm, never without one.
The Usage tab's data engine, get-claude-usage, is copied (MIT) from
jrohland/claudecode
with one line updated (the Frankfurter exchange-rate API moved from
frankfurter.app to frankfurter.dev); see its own header comment and
this plugin's LICENSE for attribution. This
plugin's own shared.luau is a trimmed port of its formatters (multi-profile
CCS support removed — this plugin only ever reads the default ~/.claude
account).
Localized in English. Translations for other locales are welcome through Noctalia Translate.
License
Versions
| Version | Plugin API | Updated |
|---|---|---|
| v0.6.4 latest | 24 | Sep 10, 2026 |
Older versions stay installable on a Noctalia release whose plugin API is below the latest version's.