πŸ¦™ runs fully local with ollama

a tiny buddy that lives on your Mac.

Floats on your desktop and knows what you've been up to. Runs on your Mac with no API key.

summon it anytime with ⌘ ⇧ spacefree Β· open source Β· macOS 13+

running fully local

no key. no cloud. just your mac.

Pick Ollama in setup and Twin runs the whole conversation on your Mac. It starts Ollama for you, downloads a model sized to your Mac's RAM the first time, and streams replies back as they generate. Chat runs fully on your Mac from there.

πŸ¦™
pick Ollama during setup, skip the API key
no key
⚑
Twin starts Ollama for you if it's installed
automatic
πŸ“¦
no models yet? Twin downloads one sized to your RAM
needs internet once
πŸ’¬
chat runs fully on your Mac, streamed as it generates
local only

a day with twin

you've met the other kind of assistant.

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. Chat with Ollama and that stays true too: no AI provider ever sees the conversation, since the model runs on your Mac. Pick a cloud provider instead, and one request goes out 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, either way. Live lookups you ask for, like flight search or an SEC filing, still reach their own service online no matter which provider you picked.

πŸ¦†
7:41am Β· pulls bank texts and today's calendar into twin.duckdb
stays home
πŸ—’οΈ
12:30pm Β· "what did I miss?" counts texts by topic
no API key
πŸŽ™οΈ
3:15pm Β· βŒ˜β‡§V or "hi twin," speech turns to text on-device
on-device
πŸ””
9:40pm Β· flight tomorrow, a payment text nearby, one nudge
local only
πŸ”‘
your API key Β· kept in the macOS Keychain
stays home
🫧
fuzzy summary Β· "got paid yesterday," not "$1,240"
built locally
πŸ¦™
picked Ollama instead? no AI provider ever sees your chats
never sent
πŸ’¬
your AI provider Β· message, name, events + summary only
only exit
🚫
our servers Β· we don't have any, genuinely
never

and a few smaller things

small buddy. surprisingly handy.

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.

one hotkey away

Hit ⌘ ⇧ space from anywhere and Twin pops up in a floating bubble. Hit it again and it goes away. No app to switch to.

a little bit weird

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.

fully open source

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.

peeks at your screen (only when asked)

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.

bring your own AI

Ollama first: pick it and chat runs fully on your Mac, no key needed. Prefer the cloud? Claude, GPT, Gemini or Grok all work too, your key lives in the macOS Keychain, not in some file.

pick a vibe

five moods. same buddy.

Twin comes in five flavors. Same local brain, different attitude. Colors below are the exact palettes the app uses.

Twindefault
hanging out
hey friend! what's up?

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
Shade
lurking behind windows
Heh… you rang, friend? Ask me anything. Cmd+Shift+Space and I vanish.

A mischievous shadow-ghost. Grins a lot, teases a little, still firmly on your side.

/persona gengar
Ember
all fired up
Hey hey, friend! Ember's all fired up. What are we doing today?

A bright little spark who hypes you up and makes errands sound like an adventure.

/persona ember
Luna
here whenever you need me
Hi friend. Take a breath. What's on your mind?

Soft, patient, unhurried. Talks about money without judgment and helps you breathe out.

/persona calm
Assistant
ready
Hi friend. How can I help?

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

download. drag. say hi.

Twin is a real Mac app. No terminal, no Python, no config files. Setup happens inside Twin and takes about a minute.

Twin for Mac

v1.5.0 Β· macOS 13 Ventura or later Β· Apple silicon Β· free and open source

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.

01

get it onto your Mac

Run the quick install command above, or drag the manually downloaded .dmg into Applications. Either way, Twin.app ends up in your Applications folder.

02

first launch

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.

03

set it up in the bubble

Pick your AI provider: Ollama for no key, or paste a key for one of the four cloud providers (it goes into your Keychain). Tell Twin your name, and pick a buddy. Done.

what macOS will ask about

⌨️
Accessibilityso ⌘ ⇧ space works from anywhere
for the hotkey
πŸ“…
Calendarsso Twin can mention what's coming up today
optional
πŸ’¬
Full Disk Accessso Twin can read bank texts in Messages for your spending summary
optional
πŸ–₯️
Screen Recordingonly asked for the first time you ask Twin to look at your screen
optional

Pick Ollama for fully local with no key, or paste a key from one of the four cloud providers: Anthropic, OpenAI, Google Gemini, or xAI. With Ollama, chat never leaves your Mac; with a cloud provider, Twin sends your chats straight to it. Skip any permission and Twin still works, it just knows a little less.