When Claude Code mods dropped, I was poking around to see what the function-hook API could actually do, and ended up making something completely unnecessary: a pixel pet that lives in a pane next to your session. https://reddit.com/link/1wwwemd/video/bgz3c6e55bth1/player It wanders around a little yard, bouncing and blinking. While tools run it stops and goes . . . , when a turn finishes it hops with a "nice work!", after about two minutes of quiet it naps, and when a rate-limit window passes 80% it tears up. /pet pat gets you hearts and a purr. It grows with you. Tool calls, finished turns, pats and output tokens give XP (only output tokens, since input and cache grow with conversation length, not with work done). Level n+1 takes 25 × n² XP, so you'll hit Lv 5 in an evening and it slows down from there. At Lv 15 it becomes a teen with an accessory, and at Lv 40 it evolves. Then I got carried away. It picks up a personality from how you use it: mostly tools and it's a worker that holds up a laptop (and swings a pickaxe as an adult), mostly long turns and it's a scholar that stops to read, lots of pats and it's a sweetie, lots of game snacks and it's a gamer. That's also the form it evolves into, and one in twenty gets a rare one instead. The yard slowly fills in to match, a building site or a library corner or a garden, and follows your clock from morning sun to moon and stars. Every so often a finished turn drops a gift, and one new pet in 32 shows up shiny. There are even two tiny games, /pet play and /pet quest , for when you're waiting on a long task. No hunger, no decay, no dying. The whole point is to make the coding environment a bit cozier, not to give you one more thing to feel guilty about. /plugin marketplace add uppinote20/claude-pets /plugin install pets@claude-pets Then /pet to let it out. There are eight critters (cat, chick, dog, slime, bunny, hamster, penguin, frog). For anyone curious about mods: it's a register.tsx hooking session.start , command.run , tool.call , turn.complete , session.measure and ui.render . In the terminal the sprite is one Raster element of half-block cells, kitty and Ghostty get a single hi-res image, and desktop, VS Code and mobile get an SVG card instead. One fun quirk: the module's clock is UTC, so it asks date +%z for your offset to know when it's night. It went from 0.1.0 to 0.2.0 in about three days of Claude Code sessions (58 commits, 19 PRs), which says more about my self-control than anything. The mods API is early access, so a Claude Code update might break it until I catch up. I've mostly lived with it in the terminal, so if the card looks off on desktop, VS Code or mobile I'd really like to know. A new species is just a 12×12 and an 8×8 sprite written as string arrays, so new critters as PRs would make my day. https://github.com/uppinote20/claude-pets submitted by /u/uppinote [link] [comments]