pi extension to show waffle throbber, yeah
  • TypeScript 76.6%
  • JavaScript 23.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-15 16:33:52 +03:00
extensions Initial commit: waffle-throbber toast extension 2026-10-15 16:33:52 +03:00
tests Initial commit: waffle-throbber toast extension 2026-10-15 16:33:52 +03:00
.gitignore Initial commit: waffle-throbber toast extension 2026-10-15 16:33:52 +03:00
package-lock.json Initial commit: waffle-throbber toast extension 2026-10-15 16:33:52 +03:00
package.json Initial commit: waffle-throbber toast extension 2026-10-15 16:33:52 +03:00
README.md Initial commit: waffle-throbber toast extension 2026-10-15 16:33:52 +03:00

dumm-pi

Questionable pi harness additions. First up: bread with somewhere to be.

Thinking toast

The default is a minimal pixel waffle drawn from the @furry-industries/blocks agent-throbber motifs, painted in the active pi theme's accent color and shown in a six-column, three-row image slot. Each activity is one of five motifs of eight hard-cut frames:

Activity Motif Cycle
Waiting --wait: the lying waffle dozes and breathes while a dot grows into a z that drifts up and fades 2400 ms
Thinking --tilt: the standing waffle leans to the brink and back 1600 ms
Searching --search: the standing waffle turns around its vertical axis, pockets on the face and a plain back 1200 ms
Tools --flip: a 400 ms turn onto the other side, pockets trading sides 400 ms
Writing --flop: the waffle tips over its edge and back up 200 ms

Fast moves ride smear frames swept across the arc; landings pass through a settle frame that dims the body behind a short arc; pockets, smears, and the ground shadow are opacity layers of the same accent (35%, 60%, 30%). There are 40 cached frames (eight per activity) on a 16 ms tick. The activity is chosen from real pi events, exactly like the blocks demo asks: the application selects the motif from its actual operation. The waiting motif is the resting state of the tracker: while a turn is running the request is always in flight, so the windows before the first streamed token and between a finished tool round and the next model call play the thinking tilt instead of the doze.

/toast minimal selects it. Without image support it falls back to the single-character │ → ╱ → _ → ╱ → │ animation. /toast preview tours the five activities for ten seconds without a model call. /toast preview thinking (or waiting, searching, tools, writing) previews one activity for five seconds. The earlier toast experiments remain available with /toast sprite and /toast text.

A tiny golden pixel toast falls onto a table and rebounds without squashing at 60 ms per frame while pi is working, replacing the normal working row. On terminals supported by pi's image component (including Ghostty through the Kitty graphics protocol), it uses a six-column, three-row image slot. The sprite is drawn as PNG frames in code, with no added dependencies. Unsupported terminals fall back to the five-row, six-column text animation. The slot stays fixed while animating so the prompt stays still. The toast runs for the whole agent turn, including tools, and disappears on completion or cancellation. Requires pi 1.1.0 or compatible widget APIs.

Try it from this directory:

pi -e ./extensions/toast.ts

Then /toast preview gives you a ten-second tour of unnecessary bread without an API call, or five seconds when a specific activity is selected. /toast off restores the normal working display; /toast on brings the bread back. /toast toggles it. The setting lasts for the current session. /toast sprite selects images and reports the detected protocol; /toast text selects the original text animation. Run /toast preview after switching. Image support may be unavailable through tmux or screen. Actual smoothness and image cleanup should be checked in the terminal where you run pi.

This is a pixel-art port of the blocks waffle motifs, not SVG playback. The text fallback and image alt color adopt your pi theme's accent, with the same requested → accent → text fallback chain the styling extensions use. Global configuration is not changed by simply trying the extension with -e.

Replacing the pi-droid-styling spinner

When @sting8k/pi-droid-styling is installed, the toast takes over its working loader row entirely: pi's row is hidden and the widget renders the compact waffle to the left of the shimmering label instead — the same Working/Thinking/Answering/Cooking labels and 80 ms highlight sweep the droid draws, read from customWorkingMessage in pi-droid-styling.json and re-created in the widget. On Kitty-protocol terminals (including Ghostty) the waffle and the label share one line, the 4×2-cell waffle drawn from code with a reused Kitty image id and the cursor forwarded over it; other image protocols stack the label above the compact waffle, and terminals without image support get the │ → ╱ → _ glyph beside the label. On exit the toast regenerates the droid's 24-frame breathing ○ (accent eased toward dim at 100 ms, honouring the theme's colour mode) instead of resetting the indicator, so the row is never demoted to pi's default spinner. Without the package, the toast behaves as before: it clears the indicator while animating and restores pi's default on exit.

To install the package globally from this checkout:

pi install /Users/duumxh/Projects/dumm-pi