Virtual desktop pet cats for macOS β pixel art cats that live on your dock, chat with you via Ollama LLM, and debate ideas together to help you brainstorm and refine your thoughts.
π₯ Prefer a smoother experience? Watch the full demo video on YouTube
- Dock companion β Cats walk along your dock with pixel-perfect animations
- Window perching β When dock auto-hides, cats teleport to sit on top of your active window
- Multi-cat β Up to 7 cats with distinct colors and personalities
- AI chat β Click a cat to open a pixel-art chat bubble, powered by Ollama
- Cat Debate mode β Your cats debate any topic together! Each cat argues from its personality, then they synthesize a final answer. A creative brainstorming & idea-refining tool
- Mouse tracking β Cats notice your cursor and turn to look at it. Get too close and they'll chase it!
- Random meows β Cats spontaneously say "Miaou~", "Prrr...", "Mrrp!" in cute speech bubbles
- Pixel art UI β Settings panel, chat bubbles, and controls all in retro pixel style
- Menu bar icon β π± icon with quick access to settings and quit
- Retina ready β Nearest-neighbor scaling keeps pixel art crisp on HiDPI displays
- Multilingual β French, English, Spanish (switch with flag buttons)
| Color | Default Name | Personality | Skill |
|---|---|---|---|
| π Orange | Citrouille | Playful & mischievous | Jokes & puns |
| β« Black | Ombre | Mysterious & philosophical | Deep questions |
| βͺ White | Neige | Elegant & poetic | Poetry & grace |
| π Grey | Einstein | Wise & scholarly | Science facts |
| π€ Brown | Indiana | Adventurous storyteller | Epic tales |
| π‘ Cream | Caramel | Cuddly & comforting | Emotional support |
| πΎ Percy | Percy | Retro geek & hilarious | 80s-90s internet references |
Each cat has 368 hand-drawn sprites across 8 directions:
- Walking / Chasing β 8 frames per direction (all 8 directions!)
- Eating β 11 frames per direction
- Drinking β 8 frames per direction
- Angry β 9 frames per direction
- Waking up β 9 frames per direction
- Idle / Looking / Sleeping β Static rotation sprites (8 directions)
- macOS 14+ (Apple Silicon or Intel)
- Ollama running locally (for chat feature, optional)
Grab CATAI.zip from Releases, unzip, then:
xattr -cr CATAI.app # remove macOS quarantine (app is unsigned)
open CATAI.app./build.sh
open CATAI.appswiftc -O -o cat cat.swift -framework AppKit -framework Foundation
./catNo Xcode project, no dependencies, no package manager β just one Swift file.
Click the π± menu bar icon β Settings:
- Language β π«π· π¬π§ πͺπΈ click a flag to switch
- Cats β Click a color bubble to add a cat, click Γ to remove
- Name β Rename each cat
- Size β Pixel art slider to scale cats
- Ollama model β Select from your installed models
- Debate mode β Toggle on/off to enable multi-cat brainstorming
-
Single native Swift file (~2000 lines), no external dependencies
-
NSWindowwith transparent background for overlay rendering -
CGWindowListCopyWindowInfofor detecting frontmost windows -
Dock auto-hide detection via mouse position polling at 30 FPS
-
Color tinting via direct pixel manipulation in sRGB
CGContext -
Ollama streaming chat via
URLSessionDataDelegate -
Conversation memory persisted in
UserDefaults
.
βββ cat.swift # Entire application (single file)
βββ build.sh # Build .app bundle script
βββ cute_orange_cat/ # Sprite assets
βββ metadata.json # Animation & rotation definitions
βββ rotations/ # 8 static direction sprites (68x68 PNG)
βββ animations/ # 5 animations Γ 8 directions Γ 8-11 frames
βββ angry/
βββ drinking/
βββ eating/
βββ running-8-frames/
βββ waking-getting-up/
- Focused debate β cats now stay strictly on the user-supplied topic
- System prompt rewritten as 6 strict rules: stay on topic, never derail, attempt creative tasks, personality is just tone, react to others, 2 short sentences
- Each turn re-asserts the topic in the user message β no more drifting from "write a poem" to "what's a dinosaur"
- Final synthesis now actually delivers the requested artefact (poem, plan, idea) instead of meta-summarising
- Non-intrusive bubbles β debate bubbles no longer steal focus from your work
- New
passiveMode:ignoresMouseEvents = true,canBecomeKey = false, no input field, no buttons - Uses
orderFrontRegardless(display only) instead ofmakeKeyAndOrderFront+NSApp.activate - You can keep typing in your editor, switching apps, etc. β the debate just unfolds visually above your cats
- New
- Clicks on cats are ignored during a debate (no accidental flow break)
- Bubbles auto-revert to interactive mode 8s after the synthesis appears
- Debate engine rewritten as a stateful class β eliminates Swift 6 Sendable warnings
- Validates each cat still exists before its turn (survives mid-debate cat removal)
- Generation counter invalidates stale callbacks if the debate is stopped
DispatchQueue.main.asyncAfterinstead ofTimer.scheduledTimerfrom URLSession queue- Public
stop()called fromremoveCatandapplicationWillTerminate
- Debate button now appears reliably (didSet observer triggers bubble rebuild)
- OllamaChat session race fixed β no more stale callbacks clearing newer requests
- Memory β
tintCachebounded (NSCache, 600 items),getPreviewcached, orphanmem_<UUID>purged at startup,URLSessionproperly invalidated - Robustness β
fatalErrorat startup βNSAlertwith clear message,addCatrolls back on failure,frontmostWindowFramecached (200 ms) to avoid hammeringCGWindowListCopyWindowInfo - Code organisation β
BehaviorTuningenum centralizes AI tuning knobs,Dictionary.localized()helper dedupes the L10n fallback pattern - Build is now clean: zero warnings, zero errors
- Debate mode β Your cats now debate any topic together in a dedicated window
- Each cat argues from its unique personality (philosopher, geek, poet, scientist...)
- 3 rounds of discussion where cats react to each other's arguments
- Final synthesis/consensus by the moderator cat
- Enable/disable via toggle in Settings
- Debate button in chat bubble β When debate mode is on, a "π€ DΓ©battre !" button appears in each cat's speech bubble
- Non-streaming Ollama API for reliable multi-turn debate exchanges
- Fix: Chat bubble input no longer loses focus when cat is walking
- CATAI is no longer just a desktop companion β it's now an idea refinement system powered by multiple AI personalities
- New 7th cat: Percy β white-grey cat with a unique personality
- Percy's dad is the "king of the internet" β he drops 80s-90s internet references (Astalavista, GeoCities, Netscape, IRC, BBS, AOL, 56k modems, ICQ...)
- Custom pixel-level desaturation tinting for Percy's white-grey look
- Custom bicolor bubble in the cat color picker
- Cat name displayed in chat bubble
- Performance: Sprite tint cache, conditional image updates, shared mouse polling, reduced dock polling
- Cats now look toward your cursor when it's nearby (8 directions!)
- Cats chase the cursor when it gets close enough
- Sleeping cats wake up if you wave the cursor near them
- Centralized UI color palette for consistency
- Simplified Ollama model fetching
- Fixed angle mapping gap at 360 degrees
- Code optimizations (
hypot, removed dead code)
- Fix cats floating after resize or dock refresh
- Fix chat bubble losing position near screen edge
- Remove force unwraps with safe fallbacks
- Fix potential crash in clamshell mode
- Fix memory leak on quit (monitors & timers)
- Fix fragile scale slider timer
- Multi-cat support with 6 color variants
- Distinct AI personalities per color
- Pixel art UI with custom controls
- Walk on dock and window title bars
- Random meow speech bubbles
- Chat memory persistence
- macOS .app bundle with build script
Multiplatform port in progress (Tauri v2) β Windows & Linux coming soon! π±β¨
A huge thank you to Korben.info for the mention!
MIT