@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

Packages

Package details

extension

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.

Example of pi-topping's decorated user prompt

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.

Demo of pi-topping's shimmering activity word, scrolling activity meter, elapsed timer, and token count

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

Example of pi-topping's completion marker

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