A tiny pixel pet that lives in your Claude Code statusline and eats your tokens.
One file, zero dependencies. Your pet shows the session's real numbers (context, cost, tokens, time), munches while you work, celebrates your approved PRs, gets grumpy when the context window fills up, and falls asleep when you wander off. It levels up for life: every session, every project, one pet.
Needs Node ≥ 18 and Claude Code.
git clone https://github.com/Nomlings/statusline
node statusline/nomling-statusline.mjs installThat's it: install writes the statusLine entry into
~/.claude/settings.json for you (and uninstall removes it). Restart
Claude Code and say hi to the egg. No signup, no tokens, nothing leaves
your machine.
Prefer to edit settings.json yourself?
Add this to ~/.claude/settings.json (forward slashes, even on Windows):
{
"statusLine": {
"type": "command",
"command": "node C:/path/to/statusline/nomling-statusline.mjs",
"refreshInterval": 1
}
}refreshInterval: 1 is what makes it animate; without it the sprite only
redraws when Claude Code pushes a status update.
Your species is hatched from your session, or pick one with
node nomling-statusline.mjs character <name>.
![]() |
![]() |
![]() |
![]() |
![]() |
| Pip the fox | Axel the axolotl | Nib the wyrm | Bumo the owl | Krib the crab |
pip |
axo |
nib |
bumo |
krib |
They render in 24-bit truecolor with two animation frames per second of session time, exactly like the previews below (these gifs run at the statusline's real cadence).
| idle | working | eat | sleeping | celebrate | grumpy | alert | hungry | egg |
|---|---|---|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
| idle | working | eat | sleeping | celebrate | grumpy | alert | hungry | egg |
|---|---|---|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
| idle | working | eat | sleeping | celebrate | grumpy | alert | hungry | egg |
|---|---|---|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
| idle | working | eat | sleeping | celebrate | grumpy | alert | hungry | egg |
|---|---|---|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
| idle | working | eat | sleeping | celebrate | grumpy | alert | hungry | egg |
|---|---|---|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Every refresh, Claude Code pipes session JSON to the script (see the statusline docs) and the pet turns it into a mood, highest priority first:
| Mood | Trigger |
|---|---|
| 🎉 celebrate | the current branch's PR is approved |
| context window ≥ 90% | |
| 😾 grumpy | context window ≥ 75% ("so full...") |
| 😰 hungry | 5-hour rate limit ≥ 90% (the food is running out) |
| 😋 eat | tokens grew since the last refresh (nom) |
| ⌨️ working | mid-task, waiting on the model |
| 💤 sleeping | no tokens eaten for 5 minutes (sleepy at 2) |
| 🙂 idle | otherwise |
XP is tokens eaten, 1 xp per 1k, and it persists for life in
~/.nomling/statusline.json: every session across every project feeds
the same pet. It starts as an egg and hatches at 20 xp.
The script doubles as its own CLI:
node nomling-statusline.mjs character axo # pick a species
node nomling-statusline.mjs character auto # per-session species (default)
node nomling-statusline.mjs list # level, lifetime tokens, rosterEnvironment variables override the saved choices:
| Variable | Values | Default |
|---|---|---|
NOMLING_CHARACTER |
pip axo nib bumo krib |
picked per session |
NOMLING_TRUECOLOR |
1 force 24-bit, 256 force 256-color, 0 force monochrome |
auto-detected |
NOMLING_COLOR |
ANSI SGR code for the monochrome silhouette, e.g. 96 |
92, mood-tinted |
echo '{"session_id":"demo","model":{"display_name":"Opus"},"context_window":{"used_percentage":45},"cost":{"total_cost_usd":1.20,"total_duration_ms":600000}}' | node nomling-statusline.mjsIs it free? Yes.
Does it phone home? No. It reads the JSON Claude Code gives it and a
small state file in ~/.nomling. Nothing is sent anywhere.
My pet is a flat green silhouette. Your terminal advertised neither
truecolor nor 256 colors. If it can actually do better, force it with
NOMLING_TRUECOLOR=1 (24-bit) or NOMLING_TRUECOLOR=256. Terminals that
only do 256 colors (like Apple Terminal) get the pets in nearest-color
approximation automatically.
Where do Nomlings come from? They are the desktop pets that live next to your terminal and eat your Claude Code tokens. Meet the full 3D version at Nomlings/app, or put one in your GitHub README.
Something is broken / I have an idea. Open an issue. The pet's home page, with every mood and species, is at nomlings.cc/statusline.
The code is MIT: fork it, tweak it, ship your own statusline.
The Nomlings themselves are not: the species designs, the pixel artwork in
assets/, and the sprite data in pixel-pets.mjs are © 2026 Francesco
Gruosso, all rights reserved, and may not be reused outside this
statusline and the official Nomlings apps. Details in LICENSE.
Nomling species designs and artwork © Nomlings. All rights reserved.












































