claudemux
Claudemux is a lightweight, dependency-minimal message bus that lets multiple Claude Code sessions communicate in real-time over tmux, enabling one session to ask another a question and receive the answer without manual intervention.
It replaces a Node-based status line with a pure shell script, uses wall-clock time for stateless animation, and its pet mood acts as a visual gauge for context usage, approvals, and effort.
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
There are plenty of good Claude Code status lines. Two things make this one different.
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.
The bear's mood is derived from session state, so you can read how the session is doing without reading any numbers:
| State | Pet | Meaning |
|---|---|---|
| context ≥ 90% | ʕ⊙ᴥ⊙ʔ‼ red, flailing | you are about to compact |
| context ≥ 75% | ʕ•﹏•ʔ💦 yellow, sweating | start wrapping up |
| pending approvals | ʕ•ᴥ•ʔ❗ yellow, alert | something is waiting on you |
effort xhigh / max | ʕ◣_◢ʔ⚡ locked in | the expensive gear is engaged |
| context ≥ 50% | ʕ◔ᴥ◔ʔ focused | working |
| otherwise | ʕ•ᴥ•ʔ idle | blinks, 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.
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
Two-line Claude Code status line with a state-driven ASCII pet. 132 lines of bash, no npm.
Similar projects matched by category, topics, and programming language.
Claudemux is a lightweight, dependency-minimal message bus that lets multiple Claude Code sessions communicate in real-time over tmux, enabling one session to ask another a question and receive the answer without manual intervention.
OpenClaude is an open-source CLI coding agent that runs on any platform and supports a wide range of LLM providers, offering the same tools and workflows as Claude Code.

tty7 is a fast, GPU-accelerated terminal workbench with persistent sessions, built-in input tools, SSH support, and coding agent awareness.