@underactive/pi-topping
A Pi extension that decorates user prompts and replaces the default "Working..." loader with a shimmering, randomized activity word, live elapsed timer, and output-token activity meter
Package details
Install @underactive/pi-topping from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@underactive/pi-topping- Package
@underactive/pi-topping- Version
0.3.0- Published
- Jul 23, 2026
- Downloads
- 575/mo · 359/wk
- Author
- underactive
- License
- MIT
- Types
- extension
- Size
- 78.5 KB
- Dependencies
- 0 dependencies · 2 peers
Pi manifest JSON
{
"extensions": [
"./index.ts"
],
"video": "https://cdn.jsdelivr.net/gh/underactive/pi-topping@main/demo.mp4"
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-topping
We garnish our pies. It seemed rude not to extend Pi the same courtesy. This is a Pi extension that adds some quality of life improvements to Pi's UX, while looking good in the process:
User Prompt — high-vis bordered prompt box with configurable border color, pi icon toggle, and timestamp.

Working Loader Text — animated spinner (with color choice), randomized activity word, shimmer (with direction), token activity meter (with color, direction, and dim toggle), elapsed timer, and output token display.

Completion Marker — end-of-turn marker with icon, randomized verb, and token consumption display. Hooks into Pi's agent_settled event.

Settings
Run /topping-settings (TUI only) to customize your toppings:
╔═┥ Pi Topping: Settings ┝═══════════════════════════════════╗
╟─ Preview ──────────────────────────────────────────────────╢
║ ║
║ Crafting (0m 03s · ↓ 84 tokens) ║
║ ║
╟─ User Prompt ──────────────────────────────────────────────╢
║ [■] High-vis prompt ON ║
║ [■] Border color ‹ accent › ║
║ [■] Pi icon ON ║
║ [■] Timestamp ON ║
║ ║
╟─ Working Loader Text ──────────────────────────────────────╢
║ [■] Animated spinner ON ║
║ ▸ [■] Animated spinner color ‹ accent › ║
║ [■] Randomize "Working" text ON ║
║ [■] Text shimmer ON ║
║ [■] Text shimmer direction ‹ Left to Right › ║
║ [■] Token activity monitor ON ║
║ [■] Token activity monitor color ‹ accent › ║
║ [■] Token activity monitor direction ‹ Left to Right › ║
║ [■] Token activity monitor dimmed OFF ║
║ [■] Elapsed time since prompt ON ║
║ [■] Show output tokens ON ║
║ ║
╟─ Completion Marker ────────────────────────────────────────╢
║ [■] Show completion marker ON ║
║ [■] Pi icon ON ║
║ [■] Randomize "Worked" text ON ║
║ [■] Tokens spent ON ║
║ ║
╟─ Options ──────────────────────────────────────────────────╢
║ [■] Use NerdFont icons ON ║
╟────────────────────────────────────────────────────────────╢
║ ↑↓ move ←→ select ␣ toggle ⏎ apply esc cancel ║
╚═════════════════════════════════════════════════════┥ 1/9 ┝╝
Install
pi install npm:@underactive/pi-topping
Restart Pi (or run /reload) to pick it up.
Requirements
- Pi
- Node.js ≥22.19.0
Development
npm install
npm test
npm run typecheck
Tests cover the word/shimmer rendering, activity meter behavior, timer resets, settings persistence, the menu.ts component, and the settings menu wiring end to end.
Limitations
- Token counts are a streaming word-count estimate, not an exact tokenizer count — they self-correct when each message finishes, so you'll see a small jump at that point.
- Elapsed time normally starts when you submit a prompt; for auto-continuations without that event, it starts slightly later instead.
- If another extension also customizes the working message, whichever one runs last wins.
Author
Eric Sison