@ladbabynpm/picc-working-spinner
Claude Code style spinner ·✢✶✻✽ for pi. Fork of pi-claude-shimmer, better aligned with the actual Claude Code implementation.
Package details
Install @ladbabynpm/picc-working-spinner from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@ladbabynpm/picc-working-spinner- Package
@ladbabynpm/picc-working-spinner- Version
0.1.3- Published
- Aug 22, 2026
- Downloads
- 349/mo · 349/wk
- Author
- ladbabynpm
- License
- MIT
- Types
- extension
- Size
- 34.3 KB
- Dependencies
- 0 dependencies · 1 peer
Pi manifest JSON
{
"extensions": [
"./index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
picc-working-spinner
Claude Code style spinner · ✢ ✳ ✶ ✻ ✽ for pi: spinner glyph, shimmer sweep, mode-aware status line, stall detection, thinking glow, smooth token counter.
Part of picc, a pi agent setup mirroring Claude Code's harness.
Fork of npm:pi-claude-shimmer, better aligned with the actual Claude Code spinner implementation.
Usage
Install via pi install npm:@ladbabynpm/picc-working-spinner.
Changes vs. upstream
agent_endpreviously reported the final turn's duration instead of total run time.Date.now() - (agentStart || turnStart)is now used in the completion message, matching the live status calculation.- Re-derived each animation parameter from the actual claude-code source.
| Area | Before | After |
|---|---|---|
| Spinner glyphs | macOS-only: · ✢ ✳ ✶ ✻ ✽ |
Platform-aware: macOS / Linux / Windows / Ghostty variants (verbatim from components/Spinner/utils.ts) |
| Verb list | 40 verbs (curated) | 186 verbs (verbatim from constants/spinnerVerbs.ts) |
| Stall ramp | Frame-based: 30 frames at 200ms = 6s | Time-based: 3s start + 2s ramp to full red, 50ms tick with += diff * 0.1 smoothing (matches useStalledAnimation.ts) |
| Thinking display | Cleared after 3.5s | 2s minimum "thinking", then 2s of "thought for Ns" (matches SpinnerWithVerb.tsx useEffect) |
| Spinner continuity | Mode change reset the spinner glyph to frame 0 | setGlyphs() no longer called on mode change — frame continues |
| Live verb text | No trailing ellipsis | Verb… (matches effectiveVerb + '…') |
| Status parts order | [thinking, tokens, timer] (reversed) |
[timer, tokens, thinking] matching SpinnerAnimationRow.tsx render order |
| Stall color | Linear interpolation over 6s | > 0.5 threshold: jump to ERROR_RED once intensity passes midpoint (matches SpinnerGlyph.tsx) |
Behaviors
- Verb: picked once per turn from 186 whimsical options. Stays fixed throughout the turn.
- Glyph:
· ✢ ✶ ✻ ✽ ✻ ✶ ✢ ·(Linux/Windows) or· ✢ ✳ ✶ ✻ ✽ ✻ ✶ ✳ ✢ ·(macOS) at 120ms per frame. - Live message:
${Verb}… (1m 23s · ↓ 42 tokens · thinking)— verb text with shimmer sweep, status parts inside parens. - Mode-driven colors:
requesting— shimmer sweeps left-to-right (50ms tick), arrow↑thinking— "thinking" with sine-wave glow after 3sresponding— shimmer sweeps right-to-left (200ms tick), arrow↓tool-input/tool-use— flash oscillates entire verb between base and shimmer
- Stall: if no tokens for 3s and no tools active, verb blends from orange to
rgb(171,43,63)over the next 2s. Resets instantly on token arrival. - Completion:
✻ ${past-tense verb} for ${duration}via notification, randomly picked from["Baked","Brewed","Churned","Cogitated","Cooked","Crunched","Sautéed","Worked"].