cd /news/developer-tools/whimsical-pi-agent-extension-with-co… · home topics developer-tools article
[ARTICLE · art-111106] src=gist.github.com ↗ pub= topic=developer-tools verified=true sentiment=↑ positive

Whimsical Pi Agent extension with colorful rotating working messages, playful status phrases, and non-repeating colors

A developer has created a whimsical extension for Pi Agent that displays colorful, rotating working messages with playful status phrases. The extension cycles through a list of over 150 phrases, such as 'Schlepping...' and 'Flibbertigibbeting...', changing every two seconds while ensuring no immediate repetition of phrase or color.

read15 min views12 publishedAug 12, 2026

| /** | | | * Whimsical working messages for Pi Agent. | | | * | | | * Rotates colorful, playful status phrases every two seconds while Pi is | | | * thinking. Colors and phrases are randomized without immediately repeating | | | * either the previous phrase or the previous color. | | | */ | |

| import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; | |
| const messages = [ | |

| // Short | | | "Schlepping...", | | | "Combobulating...", | | | "Doing...", | | | "Channelling...", | | | "Vibing...", | | | "Concocting...", | | | "Spelunking...", | | | "Transmuting...", | | | "Imagining...", | | | "Pontificating...", | | | "Whirring...", | | | "Cogitating...", | | | "Honking...", | | | "Flibbertigibbeting...", | | | "Noodling...", | | | "Percolating...", | | | "Ruminating...", | | | "Simmering...", | | | "Marinating...", | | | "Fermenting...", | | | "Gestating...", | | | "Hatching...", | | | "Brewing...", | | | "Steeping...", | | | "Contemplating...", | | | "Musing...", | | | "Pondering...", | | | "Mulling...", | | | "Daydreaming...", | | | "Woolgathering...", | | | "Dithering...", | | | "Faffing...", | | | "Puttering...", | | | "Tinkering...", | | | "Fiddling...", | | | "Noodging...", | | | "Finagling...", | | | "Wrangling...", | | | "Jiggling...", | | | "Wiggling...", | | | "Shimmying...", | | | "Galumphing...", | | | "Perambulating...", | | | "Meandering...", | | | "Traipsing...", | | | "Moseying...", | | | "Sauntering...", | | | "Ambling...", | | | "Pottering...", | | | "Bumbling...", | | | "Futzing...", | | | "Schmalzing...", | | | "Kerfuffling...", | | | "Bamboozling...", | | | "Discombobulating...", | | | "Recombobulating...", | | | "Unbefuddling...", | | | "Defenestrating...", | | | "Confabulating...", | | | "Persnicketing...", | | | "Flummoxing...", | | | "Befuddling...", | | | "Snorkeling...", | | | "Yodeling...", | | | "Zigzagging...", | | | "Ricocheting...", | | | "Somersaulting...", | | | "Pirouetting...", | | | "Canoodling...", | | | "Schmoozing...", | | | "Kibbitzing...", | | | "Skedaddling...", | | | "Scampering...", | | | "Skittering...", | | | "Sashaying...", | | | "Swashbuckling...", | | | "Oscillating...", | | | "Undulating...", | | | "Pulsating...", | | | "Effervescing...", | | | "Fizzing...", | | | "Bubbling...", | | | "Perplexing...", | | | "Mystifying...", | | | "Enchanting...", | | | "Bewitching...", | | | "Beguiling...", | | | "Mesmerizing...", | | | "Bedazzling...", | | | "Sparkling...", | | | "Glittering...", | | | "Scintillating...", | | | "Coruscating...", | | | "Phosphorescing...", | | | "Luminescing...", | | | "Sublimating...", | | | "Synthesizing...", | | | "Amalgamating...", | | | "Procrastinating...", | | | "Dillydallying...", | | | "Lollygagging...", | | | "Dawdling...", | | | "Malingering...", | | | "Skulking...", | | | "Lurking...", | | | "Sleuthing...", | | | "Rummaging...", | | | "Fossicking...", | | | "Foraging...", | | | "Scavenging...", | | | "Absquatulating...", | | | "Vamoosing...", | | | "Absconding...", | | | "Grooving...", | | | "Jamming...", | | | "Improvising...", | | | "Extemporizing...", | | | "Freestyling...", | | | "Frolicking...", | | | "Gamboling...", | | | "Blorping...", | | | "Flonking...", | | | "Snurfling...", | | | "Whomping...", | | | "Zorping...", | | | "Biffing...", | | | "Splunging...", | | | "Thwacking...", | | | "Gonkulating...", | | | "Splorfing...", | | | "Wibbling...", | | | "Wobbling...", | | | "Squonking...", | | | "Plonking...", | | | "Bonking...", | | | "Zonking...", | | | "Flumping...", | | | "Clomping...", | | | "Squelching...", | | | "Schlurping...", | | | "Glurping...", | | | "Burbling...", | | | "Gurgling...", | | | "Splooshing...", | | | "Whooshing...", | | | "Swooshing...", | | | "Kerplunking...", | | | "Thunking...", | | | "Clunking...", | | | "Clanking...", | | | "Rattling...", | | | "Jostling...", | | | "Rustling...", | | | "Bustling...", | | | "Hustling...", | | | "Miffing...", | | | "Boffing...", | | | "Snazzifying...", | | | "Pizzazzing...", | | | "Razzmatazzing...", | | | "Bedoodling...", | | | "Doodling...", | | | "Scribbling...", | | | "Squiggling...", | | | "Wriggling...", | | | "Niggling...", | | | "Higgling...", | | | "Piggling...", | | | "Figgling...", | | | "Gibbering...", | | | "Jabbering...", | | | "Blathering...", | | | "Blithering...", | | | "Withering...", | | | "Slithering...", | | | "Tethering...", | | | "Feathering...", | | | "Weathering...", | | | "Leathering...", | | | "Heathering...", | | | "Smoldering...", | | | "Moldering...", | | | "Shouldering...", | | | "Bouldering...", | | | "Tottering...", | | | "Teetering...", | | | "Tittering...", | | | "Flittering...", | | | "Jittering...", | | | "Frittering...", | | | "Twittering...", | | | "Nattering...", | | | "Chattering...", | | | "Clattering...", | | | "Splattering...", | | | "Battering...", | | | "Scattering...", | | | "Shattering...", | | | "Flattering...", | | | "Pattering...", | | | "Tattering...", | | | "Mattering...", | | | "Yammering...", | | | "Hammering...", | | | "Stammering...", | | | "Clamoring...", | | | "Glamoring...", | | | "Enamoring...", | | | "Shimmering...", | | | "Glimmering...", | | | "Brimming...", | | | "Skimming...", | | | "Trimming...", | | | "Primming...", | | | "Whimming...", | | | "Humming...", | | | "Strumming...", | | | "Thrumming...", | | | "Drumming...", | | | "Plumbing...", | | | "Thumbing...", | | | "Numbing...", | | | "Fumbling...", | | | "Grumbling...", | | | "Mumbling...", | | | "Rumbling...", | | | "Stumbling...", | | | "Tumbling...", | | | "Crumbling...", | | | "Jumbling...", | | | "Humbling...", | | | "Bungling...", | | | "Jungling...", | | | "Mangling...", | | | "Wangling...", | | | "Dangling...", | | | "Tangling...", | | | "Jangling...", | | | "Angling...", | | | "Struggling...", | | | "Mingling...", | | | "Tingling...", | | | "Jingling...", | | | "Singling...", | | | "Ringling...", | | | "Kingling...", | | | // Long | | | "Consulting the void...", | | | "Asking the electrons...", | | | "Bribing the compiler...", | | | "Negotiating with entropy...", | | | "Whispering to the bits...", | | | "Tickling the stack...", | | | "Massaging the heap...", | | | "Appeasing the garbage collector...", | | | "Summoning semicolons...", | | | "Herding pointers...", | | | "Untangling spaghetti...", | | | "Polishing the algorithms...", | | | "Waxing philosophical...", | | | "Consulting ancient scrolls...", | | | "Reading tea leaves...", | | | "Shaking the magic 8-ball...", | | | "Sacrificing to the demo gods...", | | | "Warming up the hamsters...", | | | "Spinning up the squirrels...", | | | "Caffeinating...", | | | "Existentially questioning...", | | | "Having a little think...", | | | "Stroking chin thoughtfully...", | | | "Squinting at the problem...", | | | "Staring into the abyss...", | | | "Abyss staring back...", | | | "Achieving enlightenment...", | | | "Transcending mere computation...", | | | "Ascending to a higher plane...", | | | "Communing with the machine spirit...", | | | "Performing arcane rituals...", | | | "Invoking elder functions...", | | | "Consulting the oracle...", | | | "Divining the answer...", | | | "Scrying the codebase...", | | | "Dowsing for bugs...", | | | "Rearranging deck chairs...", | | | "Shuffling bits around...", | | | "Aligning the chakras...", | | | "Reticulating splines...", | | | "Reversing the polarity...", | | | "Calibrating the flux capacitor...", | | | "Charging the crystals...", | | | "Tuning the vibrations...", | | | "Adjusting the cosmic frequency...", | | | "Waiting for a sign...", | | | "Hoping for the best...", | | | "Manifesting solutions...", | | | "Willing it into existence...", | | | "Believing really hard...", | | | "Politely asking the CPU...", | | | "Bribing the runtime...", | | | "Flirting with the database...", | | | "Sweet-talking the API...", | | | "Negotiating with deadlines...", | | | "Having words with the cache...", | | | "Reasoning with the memory...", | | | "Pleading with the logs...", | | | "Bargaining with fate...", | | | "Making offerings to the CI...", | | | "Praying to the uptime gods...", | | | "Consulting the rubber duck...", | | | "Interrogating the stack trace...", | | | "Cross-examining the debugger...", | | | "Petitioning the kernel...", | | | "Lobbying the scheduler...", | | | "Schmoozing the network...", | | | "Buttering up the firewall...", | | | "Wining and dining the servers...", | | | "Taking the bytes out for lunch...", | | | "Giving the code a pep talk...", | | | "Reading the room...", | | | "Checking under the hood...", | | | "Kicking the tires...", | | | "Shaking loose the cobwebs...", | | | "Dusting off the neurons...", | | | "Greasing the gears...", | | | "Oiling the cogs...", | | | "Winding up the clockwork...", | | | "Stoking the furnace...", | | | "Feeding the machine...", | | | "Watering the logic tree...", | | | "Pruning the decision branches...", | | | "Harvesting the outputs...", | | | "Planting computational seeds...", | | | "Nurturing the algorithm...", | | | "Raising the exceptions...", | | | "Taming wild pointers...", | | | "Herding cats in memory...", | | | "Teaching old code new tricks...", | | | "Whispering sweet nothings to the compiler...", | | | "Serenading the syntax...", | | | "Dancing with dependencies...", | | | "Waltzing through the codebase...", | | | "Tangoing with type errors...", | | | "Doing the deployment dance...", | | | "Having a moment of clarity...", | | | "Experiencing a flash of insight...", | | | "Channeling the ancient developers...", | | | "Receiving transmissions from the cloud...", | | | "Asking the hamsters to run faster...", | | | "Convincing the pixels to cooperate...", | | | "Teaching electrons new tricks...", | | | "Bribing the byte fairies...", | | | "Whispering passwords to the void...", | | | "Negotiating with cosmic rays...", | | | "Flattering the floating points...", | | | "Seducing the semicolons...", | | | "Wooing the while loops...", | | | "Charming the curly braces...", | | | "Hypnotizing the hash tables...", | | | "Mesmerizing the memory banks...", | | | "Enchanting the error handlers...", | | | "Bewitching the boolean logic...", | | | "Spellbinding the stack frames...", | | | "Hexing the hexadecimals...", | | | "Jinxing the JSON parsers...", | | | "Cursing the cache misses...", | | | "Blessing the build process...", | | | "Anointing the algorithms...", | | | "Consecrating the callbacks...", | | | "Sanctifying the source code...", | | | "Exorcising the exceptions...", | | | "Purifying the parameters...", | | | "Cleansing the closures...", | | | "Baptizing the binary...", | | | "Absolving the abstractions...", | | | "Redeeming the recursion...", | | | "Forgiving the for loops...", | | | "Pardoning the pointers...", | | | "Liberating the lambdas...", | | | "Emancipating the enums...", | | | "Freeing the functions...", | | | "Releasing the references...", | | | "Unbinding the variables...", | | | "Untying the type knots...", | | | "Unraveling the regex...", | | | "Decoding the mysteries...", | | | "Cracking the conundrums...", | | | "Solving the riddles of RAM...", | | | "Unlocking the secrets of silicon...", | | | "Discovering hidden semicolons...", | | | "Unearthing buried bugs...", | | | "Excavating ancient APIs...", | | | "Archeologically analyzing the architecture...", | | | "Fossil hunting in the functions...", | | | "Spelunking through the stack...", | | | "Scuba diving in the data...", | | | "Snorkeling through the streams...", | | | "Parasailing past the parameters...", | | | "Hang gliding through the heap...", | | | "Bungee jumping into the backend...", | | | "Skydiving through the source...", | | | "Surfing the syntax waves...", | | | "Skateboarding down the stack trace...", | | | "Snowboarding through the schemas...", | | | "Mountain climbing the modules...", | | | "Hiking through the headers...", | | | "Trekking through the trees...", | | | "Backpacking through the binaries...", | | | "Camping in the codebase...", | | | "Glamping in the globals...", | | | "Picnicking with the processes...", | | | "Barbecuing the bugs...", | | | "Roasting the race conditions...", | | | "Grilling the glitches...", | | | "Sautéing the syntax errors...", | | | "Flambéing the failures...", | | | "Caramelizing the callbacks...", | | | "Braising the breakpoints...", | | | "Poaching the pointers...", | | | "Blanching the branches...", | | | "Searing the segments...", | | | "Smoking the subroutines...", | | | "Curing the code smells...", | | | "Pickling the packages...", | | | "Preserving the protocols...", | | | "Canning the constants...", | | | "Bottling the buffers...", | | | "Jarring the JavaScript...", | | | "Decanting the data structures...", | | | "Aerating the arrays...", | | | "Letting the logic breathe...", | | | "Aging the algorithms gracefully...", | | | "Maturing the methods...", | | | "Ripening the results...", | | | "Seasoning the solutions...", | | | "Spicing up the specs...", | | | "Garnishing the getters...", | | | "Plating the output nicely...", | | | "Presenting with pizzazz...", | | | "Adding a dash of elegance...", | | | "Sprinkling some magic dust...", | | | "Drizzling debug sauce...", | | | "Folding in the features...", | | | "Whisking the widgets...", | | | "Kneading the namespaces...", | | | "Rolling out the runtime...", | | | "Proofing the promises...", | | | "Letting the dough rise...", | | | "Baking at 350 kilobytes...", | | | "Frosting the functions...", | | | "Decorating the deployment...", | | | "Icing the interfaces...", | | | "Glazing the graphics...", | | | "Topping with tests...", | | | "Cherry-picking the commits...", | |

| ]; | |
| type Color = readonly [number, number, number]; | |
| type Style = { | |
| color: Color; | |
| ornaments: readonly string[]; | |
| ornamentColor: Color; | |
| }; | |

| // Bright, terminal-friendly colors inspired by the reference screenshots. | |

| const styles: readonly Style[] = [ | |
| { color: [255, 126, 190], ornaments: ["✧", "☆", "✦"], ornamentColor: [255, 126, 190] }, | |
| { color: [255, 205, 45], ornaments: ["✦", "★", "✧"], ornamentColor: [0, 207, 255] }, | |
| { color: [0, 207, 255], ornaments: ["✦", "★", "✧"], ornamentColor: [255, 205, 45] }, | |
| { color: [137, 230, 44], ornaments: ["☆", "✧", "✦"], ornamentColor: [137, 230, 44] }, | |
| { color: [205, 145, 255], ornaments: ["✦", "✧", "★"], ornamentColor: [205, 145, 255] }, | |
| { color: [255, 99, 71], ornaments: ["❯", "✦", "❮"], ornamentColor: [255, 180, 80] }, | |
| { color: [64, 224, 208], ornaments: ["·", "✧", "·"], ornamentColor: [64, 224, 208] }, | |
| { color: [255, 160, 122], ornaments: ["☼", "✦", "☼"], ornamentColor: [255, 160, 122] }, | |
| { color: [170, 255, 195], ornaments: ["⋆", "☆", "⋆"], ornamentColor: [170, 255, 195] }, | |
| { color: [255, 105, 180], ornaments: ["❀", "✧", "❀"], ornamentColor: [255, 215, 0] }, | |
| ]; | |
| function pick<T>(items: readonly T[]): T { | |
| return items[Math.floor(Math.random() * items.length)]; | |

| } | |

| function ansi(color: Color, text: string): string { | |
| return `\x1b[38;2;${color[0]};${color[1]};${color[2]}m${text}\x1b[39m`; | |

| } | |

| let lastMessage = ""; | |
| let lastStyleIndex = -1; | |
| function pickRandom(): string { | |
| let styleIndex = Math.floor(Math.random() * styles.length); | |
| while (styleIndex === lastStyleIndex && styles.length > 1) { | |
| styleIndex = Math.floor(Math.random() * styles.length); | |

| } | |

| lastStyleIndex = styleIndex; | |
| const style = styles[styleIndex]; | |
| const left = `${pick(style.ornaments)} ${pick(style.ornaments)} `; | |
| const right = ` ${pick(style.ornaments)}`; | |
| let message = messages[Math.floor(Math.random() * messages.length)]; | |

| // Avoid showing the same phrase twice in a row. | |

| while (message === lastMessage && messages.length > 1) { | |
| message = messages[Math.floor(Math.random() * messages.length)]; | |

| } | |

| lastMessage = message; | |
| return `${ansi(style.ornamentColor, left)}${ansi(style.color, message)}${ansi( | |

| style.ornamentColor, | | | right, | | | )}`; | | | } | | | export default function (pi: ExtensionAPI) { | | | let messageTimer: ReturnType<typeof setInterval> | undefined; | |

| function stopChangingMessages(ctx: { ui: { setWorkingMessage: (message?: string) => void } }) { | |
| if (messageTimer) { | |
| clearInterval(messageTimer); | |
| messageTimer = undefined; | |

| } | | | ctx.ui.setWorkingMessage(); | | | } | | | pi.on("turn_start", async (_event, ctx) => { | | | // Change the phrase and color every second while Pi is working. | |

| if (messageTimer) clearInterval(messageTimer); | |
| ctx.ui.setWorkingMessage(pickRandom()); | |
| messageTimer = setInterval(() => { | |
| ctx.ui.setWorkingMessage(pickRandom()); | |
| }, 2000); | |
| }); | |
| pi.on("turn_end", async (_event, ctx) => { | |
| stopChangingMessages(ctx); | |
| }); | |
| pi.on("session_shutdown", async (_event, ctx) => { | |
| stopChangingMessages(ctx); | |
| }); | |

| } |

── more in #developer-tools 4 stories · sorted by recency
── more on @pi agent 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/whimsical-pi-agent-e…] indexed:0 read:15min 2026-08-12 ·