Twin floats on your desktop, knows roughly what you've been up to, and keeps all of it on your machine.
summon it anytime with ⌘ ⇧ space
a day with twin
The kind that needs your calendar and texts to be useful, then ships all of it to a server you'll never see. Twin skips that trade, keeping everything in a DuckDB file at ~/.twin/twin.duckdb, right on your Mac. No accounts, no sync, no cloud database. Here's an ordinary Tuesday with it, and exactly what does or doesn't leave your laptop.
Everyone who installs Twin gets their own brand-new twin.duckdb, created on their Mac the first time they run it. Nothing is shared, synced, or pooled between users, and the database itself never leaves your machine.
Voice, the digest and nudges never touch an AI provider at all, they're built and matched entirely on your Mac. When you chat, one request goes to the provider you picked with your message, your name, the current time, today's event titles, and a fuzzy summary like "spent money on food earlier this week". Amounts, balances, account numbers and raw SMS never leave.
and a few smaller things
That's the daily stuff. No dashboard, no onboarding flow, no 14-step tour, just a little bubble on your screen with a few more tricks up its sleeve.
Hit ⌘ ⇧ space from anywhere and Twin pops up in a floating bubble. Hit it again and it goes away. No app to switch to.
Twin itself is warm and easygoing. Want more flavor? Swap in a sly shadow-ghost, a hype-machine spark, or a sleepy moon ghost with one click. None of them write you five-paragraph essays with headers.
Every line is on GitHub. Read it, fork it, rip out the parts you don't like, give it a new personality. It's plain Python, not a black box.
Ask "what am I looking at?" and Twin takes one quick screenshot, reads it on your Mac, and deletes it right away. The AI only ever gets a one-line description, never the image.
Claude, GPT, Gemini or Grok. Paste a key from whichever you like and Twin talks to it directly. Your key lives in the macOS Keychain, not in some file.
pick a vibe
Twin comes in five flavors. Same local brain, different attitude. Colors below are the exact palettes the app uses.
The one you get out of the box. Warm, cheerful, easygoing, like a good friend who's happy to help. Light and kind, no big act.
/persona twin
A mischievous shadow-ghost. Grins a lot, teases a little, still firmly on your side.
/persona gengar
A bright little spark who hypes you up and makes errands sound like an adventure.
/persona ember
Soft, patient, unhurried. Talks about money without judgment and helps you breathe out.
/persona calm
No quirks, no puns, no ghost. Clear, neutral answers, all business.
/persona plain
Pick your buddy during setup, then switch anytime by clicking a different one in Twin or typing /persona <name> with the lowercase name on each card. Pick nothing and you get Twin. Want no personality at all? /persona plain switches to Assistant, the no-frills fallback.
get twin
Twin is a real Mac app. No terminal, no Python, no config files. Setup happens inside Twin and takes about a minute.
One command: downloads the latest .dmg, mounts it, copies Twin into Applications, and clears the quarantine flag so Gatekeeper doesn't block the first launch.
curl -fsSL https://raw.githubusercontent.com/woustachemax/twin/main/scripts/install.sh | bash
Not keen on piping a script from the internet into bash? Fair enough, download the .dmg manually instead.
Twin ships ad-hoc signed, not notarized by Apple, so the first launch after a manual download gets blocked. Here's how to clear it:
.dmg and drag Twin into your Applications folder.Or skip all of this with xattr -cr /Applications/Twin.app in Terminal after dragging it in.
Run the quick install command above, or drag the manually downloaded .dmg into Applications. Either way, Twin.app ends up in your Applications folder.
Quick install already cleared Gatekeeper for you, so it just opens. Downloaded manually? See the Open Anyway steps above the first time you launch it.
Pick your AI provider, paste your API key (it goes straight into your Keychain), tell Twin your name, and pick a buddy. Done.
You'll need an API key from Anthropic, OpenAI, Google Gemini or xAI. Twin sends your chats straight to whichever you pick. Skip any permission and Twin still works, it just knows a little less.