pi-status-anim
Animated working status row for the pi coding agent: phased verbs, glyph animation, token counter, stall feedback, easter eggs.
Package details
Install pi-status-anim from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-status-anim- Package
pi-status-anim- Version
1.0.1- Published
- Aug 19, 2026
- Downloads
- 327/mo · 4/wk
- Author
- oglenyaboss
- License
- MIT
- Types
- extension
- Size
- 153.8 KB
- Dependencies
- 0 dependencies · 0 peers
Pi manifest JSON
{
"extensions": [
"./src/index.ts"
],
"image": "https://raw.githubusercontent.com/oglenyaboss/pi-status-anim/main/docs/screenshots/thinking.svg"
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-status-anim
An animated working row for the pi coding agent. While the agent streams, the default status line is replaced with a richer, animated status: a stable verb per phase, an animated glyph, live token counts, stall feedback, and a few easter eggs. The whole row — verbs, glyph, tokens, timer, easter eggs, stall feedback — lives here.
Screenshots
Animated row in action — click to watch (placeholders until real captures are added):
Features
- Phased verbs — the verb changes only when the agent-loop moves between
phases (
requesting → thinking → responding); tool calls never change it. - Per-phase glyph animation — a travelling dot while requesting, a soft star set while thinking/responding, braille while tools run.
- Robot avatar (
robotAvatar) — instead of abstract glyphs, a 5-cell animated robot face across every state: it blinks while waiting, rolls its eyes up with a slow brain pulse while thinking, works with a fast brain pulse while tools run, smiles while responding, reacts to tool results (happy / sad for 2s, sad in red), falls asleep when stalled, and is pleased when done. Off by default. - Token counter — the full content snapshot is recomputed on every
update (no accumulation), shown as
↓ 1.2kwith an optional· 42/srate and a smooth odometer. - Stall feedback — no fresh tokens and no active tool for 3s: the glyph fades to red, the glimmer goes dark, and a tier word appears (worried → desperate → existential). Active tools never produce a false stall.
- Liveliness — animation speed and presence follow the real token flow.
- Width gating — suffix parts are dropped from the lowest priority up so the row never wraps, no matter how narrow the terminal.
- Interrupt hint — restored on the row when nothing else is shown.
- Easter eggs — git status, model name, time of day, fun facts after 60s of thinking, anxiety gradient after 60s.
- Wave / breath — with
animChance, the glimmer is replaced for the agent-loop by a travelling light wave or a calm breathing pulse. - reducedMotion — static glyph and plain text, single stall timer.
Install
pi install npm:pi-status-anim # from the npm registry
pi install git:github.com/oglenyaboss/pi-status-anim # or directly from GitHub
No runtime dependencies: the only import from the pi package is import type
(erased at runtime). /reload recreates the extension and re-reads the
config; there is no hot reload.
Configuration
All options live in ~/.pi/agent/settings.json under the statusAnim key.
Defaults are shown.
You can also configure from the TUI: /statusanim opens an interactive menu
of every option, and /statusanim <key> <value> sets one option directly
(e.g. /statusanim robotAvatar on). Tab completes option keys and on|off.
Changes are written to settings.json; run /reload to apply them.
{
"statusAnim": {
"enabled": true,
"words": [], // extra verbs appended to the defaults
"intervalMs": 50, // text-animation clock
"showTimer": true,
"timerAfterMs": 1000,
"tokenCounter": true,
"tokenAfterMs": 3000, // when tokens appear (flicker guard)
"tokenRate": true, // show tok/s
"effortSuffix": "", // empty = auto from thinking level
"stallAfterMs": 3000,
"stallTiers": true,
"modelEggs": true,
"timeEggs": true,
"gitStatus": true,
"funFacts": true,
"anxietyGradient": true,
"reducedMotion": false,
"toolDetail": true, // "(grep · 247 files)" when args carry a count
"queueHint": true, // "(+ queued)"
"phaseGlyphs": true, // per-phase glyph sets
"robotAvatar": false, // robot face across all phases (off by default)
"animChance": 0.25, // probability of wave/breath per agent-loop
"animAfterMs": 1500,
"labelActive": "∴ Thinking…",
"labelDone": "∴ Thinking"
}
}
Development
npm install # devDependency only (types for typecheck)
npm test # typecheck + selfcheck + log-smoke + runtime-sim
npm run typecheck # tsc --noEmit
npm run selfcheck # pure-module checks (width gating, FSM, stall math)
npm run runtime-sim # end-to-end sim against a fake pi API
npm run log-smoke # debug-logger smoke test
CI runs the same suite on every push (.github/workflows/ci.yml).
Notes
- The interrupt hint text is fixed (
escape): pi's keybinding registry is not exposed to the extension API, so the hint cannot follow custom keybindings. - The queue hint shows
(+ queued)— the extension API exposes only whether messages are pending, not the count. - Colors are always derived from the active theme tokens (never hardcoded), including the stall fade, glimmer, wave/breath, and anxiety gradient.
License
MIT