npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@nicknisi/pi-spinner

v0.2.0

Published

Custom rotating verbs for the working spinner

Readme

@nicknisi/pi-spinner

Replaces pi's default working/loading message with a randomly selected phrase on every turn. The list contains ~1000 entries drawn from The Office, Lord of the Rings, Arnold Schwarzenegger / Predator, LinkedIn-influencer satire, gym culture, security-ops jargon, and assorted programming memes. It exists purely to make the wait between turns more entertaining; it changes no agent behavior.

Install

pi install /Users/nicknisi/Developer/pi-extensions/packages/spinner-verbs

What it adds

No slash commands, tools, keybindings, widgets, or custom entry types. It only hooks two events:

  • turn_start — picks a random verb and, while the turn runs, repaints it via ctx.ui.setWorkingMessage() on an interval with a Claude Code-style shimmer: a highlight band sweeping left → right across the text. Only the text shimmers — the spinner glyph next to it is untouched.
  • turn_end — stops the shimmer timer and calls ctx.ui.setWorkingMessage() with no argument, resetting the working message to pi's default.

Usage

Nothing to invoke. Once installed, every agent turn shows a random message in the spinner, e.g.:

Getting to the Chopper...

A new phrase is sampled independently each turn, so repeats are possible.

Configuration

Optional, via ~/.pi/agent/configs/spinner.json (loaded once at extension load). All keys are optional:

{
  "shimmer": true,
  "shimmerIntervalMs": 80,
  "shimmerPeriodMs": 2000,
  "baseColor": "muted",
  "highlightColor": "text",
  "bandWidth": 6,
  "hideSpinner": false
}

| Key | Default | Meaning | | ------------------- | --------- | -------------------------------------------------------------------------------------------------------------- | | shimmer | true | Animate the verb text with a sweeping highlight. Set false for the old static message. | | shimmerIntervalMs | 80 | Milliseconds between shimmer frames. | | shimmerPeriodMs | 2000 | Milliseconds for one full left-to-right sweep. | | baseColor | "muted" | Theme colour token or #rrggbb hex for the resting text. muted matches pi's default working-message colour. | | highlightColor | "text" | Theme colour token or #rrggbb hex the highlight sweeps toward. | | bandWidth | 6 | Width of the highlight band, in characters. | | hideSpinner | false | Hide the spinner glyph entirely (via ctx.ui.setWorkingIndicator({ frames: [] })), leaving only the text. |

On themes that don't emit truecolor sequences, the smooth gradient degrades to a two-tone band using the configured theme tokens.

The verb list is a hardcoded VERBS array in index.ts; edit the source to add or remove phrases.

Dependencies

  • @earendil-works/pi-coding-agent (peer, *) — uses ExtensionAPI, specifically pi.on for the turn_start / turn_end events and ctx.ui.setWorkingMessage().

No npm dependencies, no workspace dependencies, no build step. The package ships raw TypeScript ("pi.extensions": ["./index.ts"]). The shimmer also uses getAgentDir and ctx.ui.theme from the same peer.

Caveats

  • Depends on the turn_start / turn_end event names and the ctx.ui.setWorkingMessage() / ctx.ui.theme APIs, which are pi extension-API surface; a pi release that renames or removes either will break this extension.
  • The shimmer repaints the working message every shimmerIntervalMs (default 80ms), the same cadence as pi's built-in spinner animation.
  • The selection uses Math.random() with no deduplication, so the same phrase can appear on consecutive turns.
  • Because it hooks turn_start without checking event payload, it overrides the working message even in contexts where another extension may have set one; the last setWorkingMessage call wins.