Skip to content

Lywright83/claude-desktop-pet

Repository files navigation

🟠 Claude Desktop Pet

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.

Features

  • 🐾 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

Requirements

  • 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)

Install

git clone <your-repo-url> claude-desktop-pet
cd claude-desktop-pet
powershell -ExecutionPolicy Bypass -File .\setup.ps1

Then 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).

Usage

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

How it reacts to Claude Code

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.

Approval green-dot (opt-in)

Enable Codex-style approvals so you never miss a permission prompt while looking at the pet:

python install_hooks.py --approvals

When 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 --approvals wires 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 same PreToolUse block in a single project's .claude/settings.json so only the chats you actively drive raise the dot.

Skins

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.

Themes

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.

Configuration

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).

Uninstall

powershell -ExecutionPolicy Bypass -File .\uninstall.ps1

Stops the pet, removes the shortcuts, and restores your original Claude Code settings.

License

MIT — see LICENSE.

Credits

Concept inspired by Petdex (crafter-station) and the Codex pets. This is an independent, original implementation — it uses no Petdex code, binaries, or assets.

About

A floating pixel desktop pet for Windows that reacts to Claude Code activity — notification card with inline reply, seasonal themes, pure Python, no third-party binaries.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages