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 viaclaude -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.jsonlshared by both brains +notes.mddistillation (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
- appkit
- macos
- swift
Log in or sign up for Devpost to join the conversation.