Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

16 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Bandit the raccoon

🦝 Bandit

A little raccoon who lives on your Mac's Dock and reacts to your day.

He watches your cursor, knows what app you're in, sweats when your CPU spikes, gets hangry when your battery's low, wakes all the way up after midnight, and paces the Dock across all your screens. Feed him, water him, pet him β€” and he never, ever touches the internet.

release platform network license

Install in one line

curl -fsSL https://raw.githubusercontent.com/DavidSirota/bandit/main/install.sh | sh

No tools needed. Downloads the app, drops it on your Dock, and starts it β€” sandboxed and offline.



Bandit reacting to a coding session in real time



Bandit reacting

What makes Bandit different

Desktop pets are having a moment β€” but almost all of them are heavy Electron apps that watch your screen and phone home for "updates." Bandit is the opposite: a tiny native app (Rust + a transparent window, no Electron, no node_modules) that the macOS kernel physically forbids from making a single network connection. He's cute and he's the one you can actually trust to watch what you're doing.

What he does

  • Reacts to what you're doing β€” nosy in a browser, locked-in while you code, chatty in a terminal, and he calls you out for app-hopping.
  • Reacts to your machine β€” sweats when the CPU is pegged, gets hangry under 25% battery, dramatically dying under 10%, happy and munching on the charger.
  • Nocturnal β€” greets you through the day, and after midnight the raccoon wakes right up. Trash-panda hours. πŸŒ™
  • Roams β€” paces the Dock and wanders across all your monitors; drag him anywhere and he sticks, feet shuffling as he walks.
  • Care loop β€” hover him for Feed Β· Water Β· Pet Β· Edit. Meters drift while you're away, so you return to a slightly needy little guy. Gentle by design β€” he sulks and droops, but never dies. Steady care sprouts a fuller head of grass.
  • Pomodoro buddy β€” a Focus timer with a progress ring around him; he nudges you at break time and calls you back to work.
  • Reacts to your coding agent β€” perks up on a prompt, bustles while tools run, and jumps when a task finishes. Works with anything that can run a hook (Claude Code, etc.) by writing a word to ~/.deskpet/state.
  • Approve tool calls from his bubble β€” wire him into Claude Code and when the agent wants to run a command or edit a file, Bandit pops an Allow / Deny card. You answer from him instead of the terminal. See In your coding session below.
  • Make him yours β€” recolor his coat and grass, resize him, pick Light / Dark / OS themes, and toggle his chatter on or off.

He floats over fullscreen apps, sits on your Dock with no app icon of his own, and is fully click-through β€” he never blocks anything.

Actually private β€” and you can prove it

Claim Check it yourself
No networking code in the app nm Bandit.app/Contents/MacOS/* | grep -i reqwest β†’ empty
The webview can't reach the net connect-src 'none' in the config
The kernel forbids all networking he runs under sandbox-exec with (deny network*)
No open connections, ever lsof -nP -a -p "$(pgrep -x deskpet)" -i β†’ nothing
No npm / hidden deps the raccoon is drawn in pure <canvas> code

Everything he reads (cursor, frontmost app name, CPU, battery) stays on your machine, written only to ~/.deskpet/.

Install

Easiest β€” one line (prebuilt, no tools):

curl -fsSL https://raw.githubusercontent.com/DavidSirota/bandit/main/install.sh | sh

Or download it: grab Bandit.app.zip from Releases, unzip, and drag to Applications.

Build from source (needs Rust + Xcode CLT):

git clone https://github.com/DavidSirota/bandit && cd bandit
sh build.sh
  • Stop: launchctl bootout gui/$(id -u)/app.bandit
  • Uninstall: rm -rf ~/Applications/Bandit.app ~/Library/LaunchAgents/app.bandit.plist ~/.deskpet

Play with him

  • Move your mouse β€” his eyes track you.
  • Hover him β†’ Feed / Water / Pet / Focus / Edit.
  • Drag his body to move him anywhere (it sticks across restarts and monitors).
  • Wire him to your agent: he watches ~/.deskpet/state β€” printf celebrate > ~/.deskpet/state makes him jump. Any tool with hooks can drive idle / working / thinking / celebrate / alert.

In your coding session

Wire Bandit into Claude Code and he handles permission prompts for you. When the agent wants to run a command or edit a file, a card pops up on him:

Claude wants to run Β· Bash rm -rf build/ && npm run deploy [ Deny ] [ Allow ]

Allow runs it, Deny blocks it β€” no jumping to the terminal. He only asks for the tools that change things (Bash, Write, Edit), never reads, and if you ignore him he hands the prompt back to the terminal so nothing hangs. It's all local files β€” no server, no network.

Turn it on (needs jq β†’ brew install jq):

sh ~/Applications/Bandit.app/Contents/Resources/hooks/install-hook.sh

Start a fresh Claude Code session and he's in. Off: delete the PreToolUse entry in ~/.claude/settings.json.

Built with

Pure JavaScript + <canvas> (no framework, no image assets β€” Bandit is drawn from scratch in code), Tauri v2 for a tiny transparent always-on-top window, and a macOS sandbox profile for the network guarantee. Bandit is an original character β€” no third-party mascots.

Contributing

Bandit is a personal project shared because he's fun. I'm not taking issues or pull requests and may not respond to them β€” but please fork him and make your own creature. 🦝

License

MIT.

About

🦝 A private, offline raccoon that lives on your Mac's Dock and reacts to your day β€” and never touches the network.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages