A desk panda for Claude Code.

A 3D panda on your Mac's screen. It says when Claude needs you and takes you there in one click.

Download for Mac
my-app ยท zsh
github.com/you/my-app/pull/41

Shorter labels on the sign-in form

Open, 3 files changed

The labels on the sign-in form are shorter now, and a failed sign-in says what to do next.

src/signin.js
src/strings.json
README.md

Loading the 3D panda

A one-minute story: Claude needs you while you are busy in another app.

How it works

Four small parts, each with one job.

  1. Hooks report

    A Claude Code plugin adds hooks. On each event, a short shell script writes the session's state to a file: needs you, your turn, or working.

  2. The app decides

    A Swift app reads those files about three times a second and picks what the panda does next: walk, sit, wave or cheer.

  3. three.js draws

    The panda is a rigged 3D model with 12 moves, drawn in a see-through window that floats above every app.

  4. One click returns you

    A short AppleScript selects the session's Terminal tab, so you land on the exact session that is waiting.

On this page, the panda, its moves and its bubble come from the app's own drawing code. Claude, the Terminal and the browser window are pretend, so you can try it without a Mac.

The concept picture: a panda in a yellow hoodie with headphones, drawn as a 2D illustration
Concept picture
The finished 3D panda as the app draws it
The 3D panda in the app

How the panda was made

From one picture to a moving 3D character, for 144.25 credits on Higgsfield.

Concept picture
GPT Image 2.5, from an original prompt
2.75 credits
3D model
Meshy v7 image to 3D, with texture, skeleton and an idle move
53.5 credits
11 more moves
Meshy 3D rigging, one run per move
88 credits
Finishing
Own scripts put every move on one skeleton, put the feet on the floor and shrink the texture
Free

Built and tested

39
automated checks in the app's self-test
2
chips tested: Apple Silicon and Intel
0.4%
of one CPU core when the panda is paused or hidden
0
network requests from the app