A tiny box-robot who keeps you company while Claude Code is busy thinking.
You know that gap between hitting Enter and getting Claude's reply? That weird limbo where you stare at the spinner, alt-tab to Twitter, and forget what you were even doing? Fidgy fills it.
He's a small floating widget who:
It's open source. It's MIT-licensed. Go wild.
Fidgy.app.zip from the latest release.xattr -cr /Applications/Fidgy.app
This removes the quarantine attribute that browsers add to downloaded apps. You only need to do this once.β + Space β type "fidgy") or double-click in Finder.git clone https://github.com/halaAlfaisal/fidgy.git
bash fidgy/hooks/install.sh
That's it. Now Fidgy reacts whenever Claude does something.You'll need Rust, Node 20+, and pnpm.
git clone https://github.com/halaAlfaisal/fidgy.git
cd fidgy
pnpm install
pnpm tauri dev # launches Fidgy with hot reload
To build your own Fidgy.app:
pnpm tauri build --bundles app
# β src-tauri/target/release/bundle/macos/Fidgy.app
Then drag it into /Applications like a real Mac app.
A button-tap menu of things to keep you sane while Claude works:
| Mode | What |
|---|---|
| π¬οΈ breathe | Two animations to pick from: nested polygons emerging vertex-by-vertex, or three teal ripples gently radiating. Both follow the medical 4-7-8 breath. |
| πΏ athkar | Arabic dhikr counter. Tap to count. Hit your target β stars in his eyes. |
| π€Έ move | "Calf raises Γ 20!" Random seated exercise + rep counter. |
| π§ stretch | Back stretches, seated or standing. Reps or timed holds. |
| π face | Silly face workouts. Lion face. Fish lips. Goes harder than you'd think. |
| π eyes | 20-20-20 rule, palming, near-far focus. For when you've been staring too long. |
| π§Ή tidy | "Wipe down your monitor." "Make your bed." One small thing at a time. Hit β done and Fidgy gets heart eyes. |
| π‘ ideas | Stash a thought. Goes to localStorage. Won't bother you. |
| πΎ invaders | A tiny Space Invaders. β/β to move, space to shoot. Clear all aliens before they reach you. Each cleared wave makes the next harder. |
| π dash | A Chrome-dino style endless runner. Space/β to jump, hold β to kneel. Avoid cacti, duck under birds, score grows over time. |
Three Claude Code hooks:
Hook in ~/.claude/settings.json |
Becomes | Fidgy's reaction |
|---|---|---|
UserPromptSubmit |
thinking |
π wakes up Β· gray "thinkingβ¦" chip |
Notification |
input |
β bouncy yellow "needs you" chip Β· brings window to front |
Stop |
done |
β¨ sparkle burst Β· mint "done β¨" chip Β· auto-fades |
Run bash hooks/install.sh (idempotent β safe to re-run, backs up your settings first).
To trigger any state by hand for testing:
curl -s -X POST http://127.0.0.1:7777/event \
-H 'Content-Type: application/json' \
-d '{"event":"done"}'
(Swap done for thinking or input.)
127.0.0.1:7777 for Claude lifecycle events#5cd6c0, cream-yellow eyes #ffe98c, peach-pink hearts #ff6c9e| Action | What it does |
|---|---|
| Click β button | Hides Fidgy. Click his dock icon to bring him back. |
| Drag the robot | Moves the window. He'll go shocked-eyed. |
| Click his chest LED | Mini mode β shrinks to a tiny window in the bottom-right. |
| Click him in mini mode | Restores full window, recentered. |
Open issues, PRs, weird ideas all welcome. If you add a new mode or expression, the codebase tries to keep things simple β modes live in src/lib/modes/, expressions live in src/lib/Robot.svelte, state lives in src/lib/stores.ts.
MIT β do whatever, just don't sue me if Fidgy becomes self-aware.