A tiny pixel companion for Windows that floats on top of everything and reacts to what Claude Code is doing — thinking, running tools, waiting on you, idling. It pops a notification card with Claude's latest response (and an inline reply box), and wears seasonal themes like ⚽ soccer.
Pure Python (tkinter). No third-party binaries, no telemetry, no account — every line
is yours to read. Inspired by the Codex / Petdex
pets, rebuilt as an original, fully-auditable tool for Windows (where the official Petdex
desktop app isn't available).
Precision First — We Handle Technology With Precision.
- 🐾 Floating, always-on-top pixel critter — drag it anywhere
- 🔄 Reacts to Claude Code via hooks: review · running · waiting · idle
- 💬 Notification card with the last response + live inline reply — a persistent two-way chat with Claude, not a one-shot (collapse/hide controls included)
- 🟢 Approval green-dot (opt-in): when Claude needs permission, a dot appears over the pet — click Allow / Decline to decide without switching to the terminal
- 🎨 Animated skin packs (drop GIF mascots in
skins/) — the coral critter is default - ⚽ Seasonal themes (soccer included; easy to add more)
- 🖱️ Left-click opens the Claude app · double-click for a happy hop · right-click menu
- 🚀 One-click launch (Desktop + Start Menu shortcuts), silent — no console window
- Windows 10/11
- Python 3.8+ with tkinter (the python.org installer includes it)
- Claude Code (for the activity reactions; the pet runs fine without it too)
git clone <your-repo-url> claude-desktop-pet
cd claude-desktop-pet
powershell -ExecutionPolicy Bypass -File .\setup.ps1Then restart Claude Code so the hooks engage. Launch the pet from the new Desktop "Claude Pet" icon.
The installer detects Python, builds the icon, creates a silent launcher + shortcuts, and
wires the pet into your global Claude Code hooks (~/.claude/settings.json — the original
is backed up to settings.json.petbak).
| Action | Result |
|---|---|
| Left-click | Open / focus the Claude desktop app |
| Drag | Move the pet |
| Double-click | Happy hop |
| Right-click | Theme · preview state · follow Claude · center · quit |
| Esc | Quit |
Hooks map session events to the pet:
| Claude Code event | Pet state |
|---|---|
UserPromptSubmit |
review (thinking) |
PreToolUse / PostToolUse |
running (working) |
Notification |
waiting |
Stop |
idle + populate the notification card |
The notification card's Reply box opens a live conversation: the pet spawns a
persistent claude streaming session (--input-format stream-json --output-format stream-json) bound to your chat, so replies keep context across turns instead of being
one-shot queries. If the live session can't start it falls back to claude -p -r.
Enable Codex-style approvals so you never miss a permission prompt while looking at the pet:
python install_hooks.py --approvalsWhen Claude is about to use a risky tool (Bash / Write / Edit / MCP / WebFetch), a green dot
appears above the pet. Click it → Allow / Decline → the choice is sent straight back to
Claude Code as the permission decision. Requests are queued (each session writes its own
file), so if several are pending the dot shows a count and you clear them one at a time;
orphaned requests from a session that died self-clean. It waits up to
CLAUDE_PET_APPROVAL_TIMEOUT seconds (default 1800) then falls back to the normal
terminal prompt, so the agent never hangs.
Scope it to where you work.
install_hooks.py --approvalswires this into your global~/.claude/settings.json, which gates every Claude Code session. If you run many agents at once, that floods the pet — instead put the samePreToolUseblock in a single project's.claude/settings.jsonso only the chats you actively drive raise the dot.
Drop animated GIF mascot packs in skins/<name>/gif/<state>.gif (192×208 frames), or point
CLAUDE_PET_SKINS_DIR at your packs root, then right-click → Skin. The built-in coral
critter is the default; skins are entirely optional.
Right-click → Theme. soccer drops a ball the pet kicks around between tasks; none
turns it off. The choice is saved in theme.txt. Adding seasonal themes (snow, fireworks,
hearts) is a small, self-contained change — PRs welcome.
Top of claude_pet.py: SCALE (size), C (colors). Environment overrides:
CLAUDE_PET_CLAUDE_EXE, CLAUDE_PET_PROJECT_DIR, CLAUDE_PET_APP_AUMID,
CLAUDE_PET_SKINS_DIR (skin packs root), CLAUDE_PET_APPROVAL_TIMEOUT (approval wait, sec).
powershell -ExecutionPolicy Bypass -File .\uninstall.ps1Stops the pet, removes the shortcuts, and restores your original Claude Code settings.
MIT — see LICENSE.
Concept inspired by Petdex (crafter-station) and the Codex pets. This is an independent, original implementation — it uses no Petdex code, binaries, or assets.