claudeers.
// Developer Tools

avenoxstatusline

Two-line Claude Code status line with a state-driven ASCII pet. 132 lines of bash, no npm.

// Developer Tools[ cli ][ claude ]#claude#bash#claude-code#cli#developer-tools#statusline#devtoolsMIT$open-sourceupdated 15 days ago
Actively maintained
95/100
last commit 23 days ago
last release none
releases 0
open issues 0

Install with your AI

Paste into Claude Code, Cursor, or any agent — it reads the repo and wires the tool into your project.

Install and set up avenoxstatusline (git-clone project) into my current project.
Found on https://claudeers.com/avenoxstatusline
Repo: https://github.com/avenoxai/avenoxstatusline
Homepage/docs: —
Detected install method: git-clone → git clone https://github.com/avenoxai/avenoxstatusline
Category: devtools. Platforms: cli.
Read the repo's README for exact setup and env vars, then install it and wire it into my project.

Claudeers Health Verdict:
active; community-verified: false. Confirm the source before running anything.
// or clone
git clone https://github.com/avenoxai/avenoxstatusline

// compatibility

Platformscli
Operating systems
AI compatibilityclaude
LicenseMIT
Pricingopen-source
LanguageShell

avenoxstatusline

A two-line status line for Claude Code with an ASCII pet.

132 lines of bash. No npm, no node, no build step.

ʕ•ᴥ•ʔ☕  Opus 5 · high · think   5h 41% · 7d 63%
▓▓▓▓░░░░ 62%  ⎇ main*  ● serai:vegrun

Why another one

There are plenty of good Claude Code status lines. Two things make this one different.

1. It's a shell script, not a package

Your status line re-runs every few seconds, forever. Every render is a fresh process. Spawning a Node runtime on that loop is a strange thing to do to your laptop.

This is one bash file with two dependencies you already have (git, jq). Install is a curl and one line of JSON. There is nothing to update, nothing to audit, and nothing in node_modules.

2. The pet is a gauge, not an ornament

The bear's mood is derived from session state, so you can read how the session is doing without reading any numbers:

StatePetMeaning
context ≥ 90%ʕ⊙ᴥ⊙ʔ‼ red, flailingyou are about to compact
context ≥ 75%ʕ•﹏•ʔ💦 yellow, sweatingstart wrapping up
pending approvalsʕ•ᴥ•ʔ❗ yellow, alertsomething is waiting on you
effort xhigh / maxʕ◣_◢ʔ⚡ locked inthe expensive gear is engaged
context ≥ 50%ʕ◔ᴥ◔ʔ focusedworking
otherwiseʕ•ᴥ•ʔ idleblinks, glances, leans

Peripheral vision does the monitoring. You only look directly at the line when the bear changes.

And when nothing is wrong, it does things. Roughly every 10 seconds it pulls a ~4-second stunt — nap, dance, wave, table flip (and sets the table back), flower, coffee, sparkle, hug, wander.


The trick: animating a stateless script

Claude Code runs the status line command fresh on every render. There is no process to hold a frame counter in, so conventional animation is impossible.

So the frames are indexed by wall-clock time instead of by state:

T=${SL_TICK:-$(date +%s)}
frame() { local -a a=("${@:2}"); PET="${a[$(( $1 % ${#a[@]} ))]}"; }

frame "$T" "ʕ•ᴥ•ʔ" "ʕ•ᴥ•ʔ" "ʕ-ᴥ-ʔ" "ʕ◕ᴥ◕ʔ"   # idle: blinks

Each render independently computes which frame it is right now. The script stays completely stateless and the pet still walks through its frames as time passes. Stunts use the same idea at two scales: T % 10 picks the position within a stunt, (T / 10) % 9 picks which stunt.

SL_TICK pins the clock so you can screenshot or test a specific frame.


Install

curl -fsSL https://raw.githubusercontent.com/avenoxai/avenoxstatusline/main/statusline.sh \
  -o ~/.claude/statusline.sh
chmod +x ~/.claude/statusline.sh

Then add to ~/.claude/settings.json:

{
  "statusLine": {
    "type": "command",
    "command": "bash ~/.claude/statusline.sh",
    "refreshInterval": 3
  }
}

Requirements: bash (3.2+, so stock macOS works), git, jq. Tested on macOS and Linux.


What's on the line

Line 1 — pet, model, reasoning effort, extended thinking, and your 5-hour / 7-day rate-limit usage.

Line 2 — context bar (green → yellow → red), context %, branch (* = dirty tracked files), worktree, project badge, pending approvals, sync state.

Every segment hides itself when it has nothing to say. In a plain directory with no git, line 2 is just the context bar.


Configuration

Env varEffect
SL_BADGE_CMDRun any command in the repo root; its first stdout line becomes the project badge. A prefix:value string renders the prefix dimmed.
SL_NO_SERAI=1Disable the built-in Serai badge.
SL_TICK=<int>Pin the animation clock. Useful for screenshots and tests.

Custom badge example:

export SL_BADGE_CMD='cat .env 2>/dev/null | grep -m1 ^APP_ENV= | cut -d= -f2 | sed "s/^/env:/"'

The Serai badge

Out of the box, if the repo contains .serai/config.json, the line shows ● serai:<repo> plus pending approval count (⚑2) and sync freshness (●sync live / ○sync stale). That's Serai, a control plane for coding agents.

If you don't use it, nothing renders and nothing is read. SL_BADGE_CMD takes priority over it, and SL_NO_SERAI=1 turns it off entirely.


Seeing it without installing it

./demo.sh          # every mood state, side by side
./demo.sh stunts   # all 9 idle stunts, frame by frame

demo.sh pins SL_TICK, so it is also the smoke test — every state, a non-git directory, and malformed input all render or the script is broken.


Notes on correctness

Two things this script is deliberate about, because both are easy to get wrong:

Caching. Git calls are cached ~5s, keyed by session_id. Keying a cache off $$ looks reasonable and never hits — every render is a new PID.

Field parsing. The JSON payload is read one field per line, not tab-separated. Tab is IFS whitespace, so IFS=$'\t' read -r a b c silently collapses runs of tabs and every field after an empty one shifts left. Since git_worktree is empty whenever you are not in a worktree — the normal case — the working directory would land in the worktree slot and the session id in the working directory slot, quietly killing every git lookup on line 2. IFS= read -r per line keeps empty fields empty.


License

MIT © Avenox

// faq

What is avenoxstatusline?

Two-line Claude Code status line with a state-driven ASCII pet. 132 lines of bash, no npm.. It is open-source on GitHub.

Is avenoxstatusline free to use?

avenoxstatusline is open-source under the MIT license, so it is free to use.

What category does avenoxstatusline belong to?

avenoxstatusline is listed under devtools in the Claudeers registry of Claude-compatible tools.

2 views
10 stars
unclaimed
updated 15 days ago

// embed badge

avenoxstatusline on Claudeers
[![Claudeers](https://claudeers.com/api/badge/avenoxstatusline.svg)](https://claudeers.com/avenoxstatusline)

// retro hit counter

avenoxstatusline hit counter
[![Hits](https://claudeers.com/api/counter/avenoxstatusline.svg)](https://claudeers.com/avenoxstatusline)

// reviews

// guestbook

0/500

// related in Developer Tools

🔓

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Curs…

// devtoolsaffaan-m/JavaScript240,305MIT[ claude ]
🔓

Use Garry Tan's exact Claude Code setup: 23 opinionated tools that serve as CEO, Designer, Eng Manager, Release Manager, Doc Engineer, and QA

// devtoolsgarrytan/TypeScript128,278MIT[ claude ]
🔓

AI coding assistant skill (Claude Code, Codex, OpenCode, Cursor, Gemini CLI, and more). Turn any folder of code, SQL schemas, R scripts, shell scripts, docs,…

// devtoolssafishamsi/Python109,277MIT[ claude ]
🔓

Makes your AI agent think like the laziest senior dev in the room. The best code is the code you never wrote.

// devtoolsDietrichGebert/JavaScript104,762MIT[ claude ]
→ see how avenoxstatusline connects across the ecosystem