Claude Code & Grok Metrics
Code Critter
A pixel familiar that watches your Claude Code and Grok sessions and reacts in real time: a desktop app for macOS, Windows and Linux, and a Stream Deck plugin. Live sessions, /loop, tokens, cost and burn rate, all read 100% locally.
0
API calls · 100% local
Desktop app
A desktop app
The standalone version for macOS, Windows and Linux: a companion in your menu bar (or the system tray on Windows and Linux) that shows your Claude Code and Grok stats without a Stream Deck. Same engine as the plugin, so the numbers always match.
What it does
Live sessions, fleet, loops, tokens, cost per project, burn rate, Claude and Grok models, counters, activity, account. Show, hide, reorder. Burn over 24h, 7d or 30d and cost per project over 1D, 7D, 30D or ALL, each one click away.
One line per live session, named by its title (your /rename, Claude Code’s automatic title or Grok’s generated title, else the repo): time since last activity, context ring, tokens in, tokens out, cache reads and API-equivalent cost. Click a header to sort.
The companion lives at the top of your screen, next to the clock. Its mood follows your fleet (working, waiting, done), with an optional blink when a session needs you.
See which sessions are looping: a ↻ marker, a LOOP square in the fleet, a dedicated Loops card with cadence and a countdown. Read straight from the transcript.
Get told when a session needs you, work ships, or a /loop ends, even with the app closed. Titles name the session ({session_name}), with master, per-session and new-session controls and tunable wording.
On macOS, click a session to jump straight to its window or tab, even a background tab. Ghostty, Terminal.app, iTerm2 and more.
Claude usage is no longer counted twice, subagents and advisor calls are now included, Grok cost comes from Grok’s own per-turn cost, and a model without a known price is flagged instead of shown as $0. Costs remain an API-equivalent estimate, not your plan price.
It reacts, right in your menu bar


RUN The fleet is running, all green.
Three themes, automatic light/dark
Also on your Stream Deck
The same thing on hardware: a little pixel creature lives on a key and reacts to your fleet in real time, surrounded by live tiles.


RUN The fleet is running, everything at a glance.
The companion reacts
a session is running
a session needs you
work shipped
all quiet
The 13 tiles
Your reactive pixel familiar, 12 skins.
Live counts of every session in one tile: RUN, INPUT, END.
How many sessions are in a given state: RUN, INPUT or END.
One specific session: its title, context %, tokens in / out, cache reads or cost, with a ↻ when it is running a /loop.
How many sessions are running a /loop, with a countdown to the next run.
Streak and a 12-week heatmap.
Token usage by hour, your peak.
Today, lifetime, or a 24h sparkline. Billed tokens by default, cache reads apart.
API-equivalent spend, today to lifetime. A ! flags a model without a known price.
Spend per project and per model.
Tokens per minute over the last hour.
A daily or weekly counter: permission prompts, runs, sub-agents, loops launched or iterations.
A shareable recap of your stats.
Local-first & privacy
Code Critter is built to be boringly safe with your data.
- ›Reads your local Claude Code files under ~/.claude and Grok’s own, read-only.
- ›Makes no network calls and talks to no API. No account, no key.
- ›Sends no telemetry. Nothing about you is collected, stored remotely, or shared.
- ›Cost figures are an API-rate-equivalent estimate, not a bill, and never leave your machine.
Install
Install the desktop app (macOS, Windows or Linux), or the Stream Deck plugin (see Downloads) then drag any tile onto a key. Tokens, cost, project cost and activity work right away.
Live sessions: why it needs a hook
Some tiles need to know whether a session is working, waiting, or done: state Claude Code and Grok store nowhere. A small hook captures it.
-
With nothing
Tokens, cost, project cost and activity already work: Claude Code and Grok write their transcripts.
-
What’s missing
Live state (
working,waiting,done) lives in no file. -
The hook
A plugin listens to Claude Code’s or Grok’s events and writes the state to
~/.claude/deck-stateor~/.grok/deck-state, read by the app.
/loop detection needs no setup: the Session tile shows a ↻, the Loops tile counts active loops, and it is read straight from the transcript, still 100% local.
The desktop app installs the hooks itself, for Claude Code and Grok: nothing to do here. Without it, in Claude Code, enabling the plugin installs them automatically:
One command at a time: copy, paste, run, then the next.
- 1
/plugin marketplace add https://github.com/denisvinciguerra/code-critter-hooks - 2
/plugin install code-critter@code-critter - 3
/reload-plugins
For Grok, in a terminal (even without the Claude Code plugin), then start a new Grok session:
- 1
grok plugin marketplace add https://github.com/denisvinciguerra/code-critter-hooks - 2
grok plugin install code-critter --trust
FAQ
Do I need a Claude or Anthropic API key? +
No. Code Critter only reads the files Claude Code already writes on your machine. There is no API call and no key to enter.
Is the cost figure my real bill? +
No. On a flat subscription there is no per-token bill, so the cost tile shows an API-rate-equivalent estimate, labelled as such.
A tile shows a dash or zero. +
There is no local data yet for that metric. The tile fills in as you use Claude Code.
The companion is always asleep, or my Fleet / Session tiles are empty. +
Those live tiles need the optional hooks for Claude Code or Grok: the desktop app installs them, otherwise see Install. Tokens, cost and activity work without them.
Downloads
The GitHub repo is private for now, opening up soon.