Inspiration

Desktop pets are adorable — and useless. Meanwhile, we all pay for AI subscriptions (ChatGPT, Claude) that live inside terminal windows and browser tabs. And most of us have an original character — a doodle, a sketch — that deserves to be alive somewhere. NOT A PET merges the three: your own character, living on your desktop, thinking with the AI subscriptions you already have.

What it does

  • Your original character lives on your desktop — breathing, wandering, its gaze following your cursor (16 gaze directions).
  • Press ⌥Space and talk. It answers with a real voice (VOICEVOX) and one of 20 emotion portraits parsed from an [emotion:key] tag in the reply.
  • It talks to you first, aware of your ongoing work — frequency selectable from a radial menu.
  • The brain is your existing AI subscriptions. GPT-5.6 via headless codex exec, Claude via claude -p. No API keys.
  • Shared memory across brains (the magic): tell GPT-5.6 a secret, switch the brain to Claude mid-conversation — it still remembers. Or choose separate mode, where each brain keeps its own native memory.
  • Bring your own character: drop in a single image, and Codex (hatch-pet) hatches it into a fully animated sprite atlas — idle, walk, run, jump, gaze wheel — plus an expression sheet. Every character in the demo was made this way.

How we built it

  • Swift/AppKit, single-file app: transparent always-on-top panel, CALayer sprite playback at 60fps with procedural motion, Carbon global hotkey, menu-bar residency, radial "donut" menu.
  • Codex (hatch-pet + GPT image generation) produced every character asset from single reference drawings.
  • The base app was built with Claude Code; during Build Week, Codex implemented the core extensions: the GPT-5.6 conversation backend, the shared/separate memory architecture (transcript + distilled long-term notes), in-app character hatching, and the docs. Full provenance is in the README — git history is the receipt.
  • Memory: an append-only transcript.jsonl shared by both brains + notes.md distillation (older turns get summarized into long-term notes).

Challenges we ran into

  • Making two different AI CLIs feel like one consistent personality — same persona prompt, same emotion-tag protocol, same memory, so switching brains is seamless.
  • Sprite QA for line-art characters: chroma-key fringe neutralization, debris removal, gaze-atlas slicing.
  • Tuning proactive talk so it's charming instead of annoying.

What we learned

Headless CLI modes (codex exec / claude -p) are a superpower: they turn consumer subscriptions into a local, keyless agent runtime that any native app can embed.

What's next

Goals and autonomous work — morning inbox digests, dashboards on the character's belly, voice input. He remembers. He talks. And soon, he'll work for you. NOT A PET.

Built With

Share this project:

Updates