The offline-only Claude Code status line. A cute cat tells you how much usage is left — without touching a single network endpoint.
3-row kawaii card — --full --kawaii
claude-cat only renders the JSON that Claude Code already pipes to statusLine scripts via stdin. Nothing else. That's the whole design — and the whole safety story:
- 🚫 Zero network calls. No
api.anthropic.com. Noclaude.ai. No/api/oauth/usage. Run it behind a firewall; it works the same.tcpdumpstays empty. - 🚫 Zero credential reads. Never touches
~/.claude/.credentials.json, the macOS Keychain, or any OAuth token. If your npm account is ever compromised, the worst case is a funny-looking status line — not a leaked Anthropic account. - 🚫 Zero outbound writes. Only writes to
~/.claude/claude-cat/(a local sync cache + optional debug dumps). Nothing leaves your machine. - ✅ Stdin-only, by policy. Documented in
SECURITY.mdand enforced by the project's threat model — not a side effect.
| Feature | claude-cat | ccstatusline | claude-dashboard | ccusage |
|---|---|---|---|---|
| Runs on every statusLine render | ✅ | ✅ | ✅ | ❌ (CLI) |
| No network calls | ✅ | ❌ (Anthropic API) | ❌ (Anthropic API) | 🟡 (pricing fetch, --offline ok) |
| No OAuth / credential reads | ✅ | ❌ | ❌ | ✅ |
| Kawaii cat moods 😺 | ✅ | ❌ | ❌ | ❌ |
| Cross-terminal sync | ✅ | ❌ | ❌ | n/a |
| Historical / cost reports | ❌ | 🟡 | ✅ | ✅ |
Pick claude-cat when you want a friendly always-on status line
and you care that your toolchain isn't quietly talking to Anthropic
behind your back. Pair with ccusage
if you also want on-demand cost reports — the two are complementary
(claude-cat for live render, ccusage for analysis).
"Just a cat" isn't a cute tagline — it's the threat model.
Run the interactive wizard — it walks you through layout, cat theme, refresh interval, and plan in 30 seconds:
npx -y claude-cat@latest configureIt writes ~/.claude/settings.json for you (with a diff preview
first, leaving every other setting untouched). Restart Claude Code
and the line shows up on the next turn.
Pick a mode, paste the prompt into Claude Code, and it edits
~/.claude/settings.json for you.
You get a single line: usage bars + $ cost + ctx %. No cat. Wraps
on narrow terminals.
5h ▓▓▓▓░░░░░░ 47% (1h 19m) | week ▓▓▓░░░░░░░ 31% (Fri 1pm) | $37.37 | ctx 20%
Install claude-cat (https://github.com/thingineeer/claude-cat) into my
~/.claude/settings.json as the statusLine.
- type: "command"
- command: "npx -y claude-cat@latest"
- padding: 0
- refreshInterval: 300
Don't touch any other key. Show me the diff first.
You get a 3-row card: ASCII cat on the left, data rows on the right. The cat's face and prop change with your usage.
/\_/\ Opus 4.6 · $38.52 · ctx 23% used (77% left)
( ^ω^ ) Current session ▓▓▓▓▓▓░░░░░░░ 51% · 1h 15m
/ >🍣 Current week (all models) ▓▓▓░░░░░░░░░░ 31% · Resets Apr 17, 1pm
Install claude-cat (https://github.com/thingineeer/claude-cat) into my
~/.claude/settings.json as the statusLine.
- type: "command"
- command: "npx -y claude-cat@latest --full --kawaii"
- padding: 0
- refreshInterval: 300
Don't touch any other key. Show me the diff first.
All modes at a glance
Same install pattern — just swap the command value.
| flag | command | preview |
|---|---|---|
| ⭐ (default) | npx -y claude-cat@latest |
5h ▓░░░░░░░░░ 10% (3h 21m) | week ▓▓░░░░░░░░ 18% (Fri 1pm) | $0.123 |
--full --kawaii |
npx -y claude-cat@latest --full --kawaii |
/\_/\ Opus 4.6 · $0.123 ( ^ω^ ) session ▓░░░░░░░░░░░░░ 10% · 3h 21m / >🍣 week ▓▓▓░░░░░░░░░░░ 18% · Resets Apr 17, 1pm |
--full |
npx -y claude-cat@latest --full |
/ᐠ ^ᴥ^ ᐟ\ Opus 4.6 · $0.123 session ▓░░░░░░░░░░░░░ 10% · 3h 21m week ▓▓▓░░░░░░░░░░░ 18% · Resets Apr 17, 1pm |
--wide |
npx -y claude-cat@latest --wide |
5h ▓░░░░░░░ 10% (3h 21m) | week ▓░░░░░░░ 18% (Fri 1pm) | $0.123 |
--full --no-cat |
npx -y claude-cat@latest --full --no-cat |
Opus 4.6 · $0.123 session ▓░░░░░░░░░░░░░ 10% · 3h 21m week ▓▓▓░░░░░░░░░░░ 18% · Resets Apr 17, 1pm |
Power-user flags: --stack=auto|always|never, --max-cols=<n>,
--no-debug-chip, --icons=none|emoji|nerd. Env vars:
CLAUDE_CAT_COLUMNS, CLAUDE_CAT_DEBUG=1,
CLAUDE_CAT_PLAN=pro|max|auto (Pro users: set pro to hide weekly
bars — the wizard sets this automatically).
5h ▓▓▓▓░░░░░░ 47% (1h 19m) | week ▓▓▓░░░░░░░ 31% (Fri 1pm) | $37.37 | ctx 20%
| chip | meaning |
|---|---|
5h / week / sonnet |
rate-limit window (5-hour session / weekly / per-model weekly) |
▓▓▓▓░░░░░░ |
10-cell progress bar — green → yellow → red as it climbs |
47% |
exact percentage |
(1h 19m) / (Fri 1pm) |
time until that window resets — relative for session, absolute for weekly |
$37.37 |
this Claude Code session's running cost in USD — see below |
ctx 20% |
how full the current conversation's token budget is |
It's this single Claude Code session's running cost, computed by
Claude Code itself (cost.total_cost_usd from stdin JSON).
- ❌ NOT "Extra usage" plan-overage fees — that's a different
/usagepopup bar and isn't piped to statusLine scripts. - ❌ NOT your monthly subscription bill.
- ❌ NOT money leaving your account right now if you're on Pro/Max (those are flat-rate — the number is informational).
- ✅ On an API key it's the real cost. On Bedrock / Vertex
it stays
$0.00(Claude Code can't compute cost there).
The cat only shows up in --full modes. Six moods — five driven by
usage, one state-driven (resting).
| trigger | --full (1-line face) |
--full --kawaii prop |
|---|---|---|
| no rate limits yet (resting) | /ᐠ -ᴥ- ᐟ\ |
🚬 smoke |
| 0–30 % (chill) | /ᐠ ^ᴥ^ ᐟ\ |
🍣 sushi |
| 30–60 % (curious) | /ᐠ •ᴥ• ᐟ\ |
⌨️ keyboard |
| 60–85 % (alert) | /ᐠ ◉ᴥ◉ ᐟ\ |
☕ coffee |
| 85–95 % (nervous) | /ᐠ ⊙ᴥ⊙ ᐟ\ |
💤 break |
| 95 %+ (critical) | /ᐠ ✖ᴥ✖ ᐟ\ |
🛌 sleeping |
Mood policy: weekly ≥ 60 % or session ≥ 75 % → alert; any
window ≥ 85 → nervous; any ≥ 95 → critical. Weekly drives the mood
because it's the bar that actually constrains your week.
Full 3-row ASCII gallery for every mood
resting
/\_/\
( -.-)
/ >🚬~
chill (0–30 %)
/\_/\
( ^ω^ )
/ >🍣
curious (30–60 %)
/\_/\
( •ㅅ•)
/ >⌨️
alert (60–85 %)
/\_/\
( -ㅅ-)
/ づ☕
nervous (85–95 %)
/\_/\
( xㅅx)
/ づ💤
critical (95 %+)
/\_/|
( -.-)zzZ
/ \
| Plan | Shows | Notes |
|---|---|---|
| Claude Pro / Max | rate-limit bars, reset countdown, cat mood, session cost | rate_limits appears after first reply |
| Anthropic API key | session cost in USD + cat mood | no rate_limits in stdin JSON |
| Bedrock / Vertex | cost stays at $0.00 |
upstream limitation |
Two things /usage popup shows but Claude Code doesn't pipe to
statusLine scripts, so claude-cat can't render them today:
- Current week (Sonnet only) — server includes
rate_limits.seven_day_sonnetonly sometimes (condition undocumented). - Extra usage (e.g.
$14 / $20 spent) — comes from/api/oauth/usage(private endpoint).
A future opt-in daemon could proxy that endpoint locally and cache values. Tracked in issues.
claude-cat is deliberately small and network-free so it fits Claude Code's per-message hot path safely.
What it does — reads the stdin JSON Claude Code already pipes to statusLine scripts, prints a colored line.
What it doesn't do — no network requests, no credential reads, no
keychain access, no writes outside ~/.claude/claude-cat/. The
invariants are listed in SECURITY.md.
npx -y claude-cat@latest downloads and runs the latest published
version every time. This is standard for npm but worth knowing:
- Pin if you want reproducibility —
npx -y [email protected]instead of@latest. Upgrade when an advisory is published. - Review the package — the published tarball only ships
bin/,src/,examples/, and README/LICENSE (filesinpackage.json). You can audit it before install:npm pack claude-cat && tar -tf claude-cat-*.tgz. - Local install alternative — clone the repo and point your
statusLine at
node /path/to/claude-cat/bin/cli.js. No npm fetch at all.
Private advisory only: https://github.com/thingineeer/claude-cat/security/advisories/new
Don't open a public issue. See SECURITY.md.
git clone https://github.com/thingineeer/claude-cat.git
cd claude-cat
git config core.hooksPath .githooks
npm run test:sample # try a fixture
npm run test:fullContributing guide: CONTRIBUTING.md. For Claude-Code sessions: CLAUDE.md.
MIT © thingineeer
