Your calls, transcribed on your Mac
Nothing joins the meeting.
Nothing leaves your Mac.
Your meeting, transcribed in the languages you actually held it in, summarized as markdown in a folder of your choice.
How it works
Four things happen, all on your machine.
No bot, no calendar permission, no admin approval, no participant tile, no second service to manage.
- 01 Detect
Ghostie waits for a calling app to take over your microphone.
Microsoft Teams and Zoom, out of the box. Teams and Google Meet held in a browser tab can be switched on in Settings — they’re off by default, because a browser’s microphone is weaker evidence than a meeting app’s and Ghostie would rather miss a call than record something that isn’t one. A meeting window, the camera, or the other participants’ voices in the system audio confirm it’s a call rather than a notification chime. A 30-second grace covers mute, brief blips, and the moment between unplugging headphones and reaching for AirPods. Nothing ever connects to the meeting.
- 02 Record
Two local audio tracks, separately.
macOS gives Ghostie two clean streams: what you hear from the other people, and what your mic picks up from you. Both are saved as plain audio files on your Mac. No fake audio driver, no extra software, no cloud upload.
- 03 Transcribe
Whisper runs on your Mac.
Whisper is the speech-recognition engine. It never sends your audio anywhere. Both tracks are merged by timestamp, and the far end is split voice by voice so each person gets their own lines rather than one undifferentiated Participants. A filter catches Whisper’s usual mistakes — phrases looping when no one’s talking, training-data leaks like “Subtitles by the Amara.org community” — and a second pass puts back the sentence punctuation Whisper drops when it wanders into a lowercase run-on, without changing a single word.
- 04 Summarize
Two ways. Claude, or local.
Claude Code, signed into your own login (no API key, no monthly bill), writes the best summary. Or hand the transcript to a local Ollama model and nothing leaves your Mac at all. Same seven sections either way: context, participants, discussion points, decisions, action items, open questions & risks, and a one-paragraph summary.
Made for mixed-language calls
For everyone whose standups break into Swedish at the third bullet.
Two Whisper variants — Swedish and English — running locally. Models download once and stay on your Mac at ~/.ghostie/models/.
Most transcription tools commit to one language at session start, then politely guess for the other 40% of the call. Ghostie segments each track, detects the language of every segment, and routes it to the model that knows what to do with it.
The result: Swedish phrases stay Swedish in the transcript, English phrases stay English, and the summary reads naturally in both.
What you get
The note wrote itself
while you were talking.
Plain markdown. Same structure every time. Drops straight into your Obsidian vault — or any folder you point it at.
Linnea walked through the user research findings from last week. The onboarding redesign tested well, but the new pricing page is causing measurable drop-off in the signup funnel against the control variant.
- Marcus — product lead, ran the meeting.
- Linnea — user research, presented the findings.
- Elin — growth, owns the funnel data.
- Daniel — engineering, evaluating search vendors.
- Pricing-page drop-off: roughly 30% against control, in both test variants.
- Onboarding redesign tested well and is ready to roll out.
- Search rebuild: in-house index versus Algolia for v2.
- Pricing test A/B runs one more week with both variants live in parallel.
- Marcus owns the onboarding rollout starting next sprint.
- Search will use Algolia for the v2 release, not the in-house index.
| Owner | Action | Due |
|---|---|---|
| Marcus | Write up the onboarding rollout plan | Friday |
| Elin | Pull the funnel data for the pricing test | Tuesday |
| Daniel | Confirm the Algolia contract terms | Next sync |
- What’s the fallback plan if the Algolia migration breaks search relevance for the long tail?
- Should we hold the marketing push until the pricing test settles?
Sprint 24 planning centred on the pricing test and the onboarding rollout. The pricing A/B runs one more week before a call is made; Marcus takes the onboarding redesign into the next sprint, and v2 search will build on Algolia pending contract confirmation.
Written 14:51, two minutes after the call ended.
Privacy ledger
What leaves your Mac, and what stays.
An honest accounting. No marketing dressed up as a privacy policy.
Audio recordings
Captured locally by macOS. Deleted after processing unless you turn on “Keep audio” in settings. While they’re being processed they live at ~/.ghostie/recordings/.
The text transcript leaves, once — if you pick Claude
Sent through your own Claude Code login to be summarized, when Claude is the chosen summarizer. Pick the Ollama option in Settings and the transcript never leaves your Mac. Either way, never stored by Ghostie, and never sent to a Ghostie server.
Whisper and KB-Whisper models
Fetched once from Hugging Face, then run locally. No telemetry, no analytics, no error reporting — nothing about you, your Mac, or your calls is ever sent anywhere. Apart from the summarizer you choose, that model download and the update check below are the only traffic Ghostie makes.
Backlog of stalled calls
When processing can’t finish — Claude Code not logged in, Ollama not running, a model missing, you’re offline — the recording or transcript queues at ~/.ghostie/backlog/ and retries automatically. Notes upgrade in place.
Self-updating, verified
Once a day Ghostie asks ghostie.vitgranen.com which version is current — our mirror of the public GitHub Releases list, with GitHub itself as the fallback. The request carries no identifier and no information about you. Like any web server, ours can count requests, so it can tell roughly how many copies of Ghostie are running — and nothing else. The update itself downloads from GitHub, is signed by Apple, and is double-checked by Ghostie before it installs; if you’re on a call when one lands, it waits.
Audio capture, not a meeting client
Ghostie listens to what your speakers play and your mic captures, the way a screen recorder does. It never connects to Zoom, Meet, or Teams — so there’s nothing for them to show.
Platform
macOS 15 Sequoia or later
Built on the modern macOS audio APIs. Apple Silicon recommended.
Calling apps
Teams and Zoom, plus Meet in a tab
Built on per-PID audio attribution that tells a real call apart from any other mic use. Teams and Google Meet in a browser are opt-in in Settings; Slack huddles aren’t supported yet.
Summarizer
Claude Code, or local Ollama
Claude for the best summary, Ollama if you’d rather nothing leave the machine. Pick in Settings. Transcripts always work without either.
Install
Two paths.
Pick a summarizer in Settings afterwards: Claude Code (your own login, no API key) for the best notes, or a local Ollama model if you’d rather keep everything on your Mac.
A / The easy way
Drag and drop.
Signed, notarized .dmg with the CLI bundled inside. On first launch Ghostie opens Settings to download the Whisper speech model — a one-time ~140 MB fetch from Hugging Face.
- Download
Ghostie.dmg - Open it, drag Ghostie to Applications
- Launch. Grant Screen Recording and Microphone once when prompted
- For the Claude summarizer, run
claudeonce in a terminal to sign in. For the local one, install Ollama and pull a model
v1.8.0·9 September 2026·19 MB
B / The build-it way
From source.
Swift Package Manager, two shell scripts. Signs with your Developer ID if you have one, so granted permissions persist across rebuilds.
git clone github.com/sjunnesson/ghostie./scripts/setup.shto fetch whisper.cpp and the models./scripts/build-app.shto build, sign, and install to/Applicationsopen /Applications/Ghostie.appand grant permissions once
Prefer the app on your Mac? The default. Prefer headless on a server? ghostie run in a terminal. Both ship in the same binary.
Frequently asked
The questions everyone has.
Does Ghostie join the meeting as a bot?
No. macOS tells Ghostie when a calling app holds the microphone, and corroborates it with the meeting window, the camera, or the other participants' voices in the system audio. Nothing ever connects to the meeting, and the other people never see a participant join.
Where does my audio go?
Nowhere. Audio is captured to local WAV files in ~/.ghostie/recordings/, transcribed on-device with whisper.cpp, and deleted by default once processing finishes. The text transcript is sent to Claude for the summary — or, if you pick the local Ollama option in Settings, nothing leaves your Mac at all.
Do I need an Anthropic API key?
No. Ghostie uses the Claude Code app under your existing login. Or skip Claude entirely and pick the Ollama option in Settings — a local model on your Mac writes the summary instead, and the transcript never leaves the machine. Without either, you still get the full local transcript; only the AI summary is skipped, and it backfills automatically once a summarizer is reachable.
Can Ghostie run fully offline?
Yes. In Settings › Summary, switch the provider to Ollama (local)and point it at a model you’ve pulled with ollama pull. Detection, recording, transcription, and the summary then all run on your Mac; nothing reaches the network. The default is still Claude, because the notes are sharper — but a small local model is a real option if privacy is non-negotiable.
What about Swedish and English on the same call?
Add both languages in Settings ▸ Languages and download their models. There is no mode to switch: whenever two or more of your languages have a model on disk, Ghostie chops each track into chunks, detects the language of every chunk, and transcribes the Swedish ones with the Swedish-trained Whisper model and the English ones with the English-trained one. Models live in ~/.ghostie/models/.
Does it tell people apart?
Yes. Your microphone is already a separate track, so your own lines are never guesswork. The other end is split voice by voice on-device, and then named — from the meeting’s own participant list when Ghostie can read it, otherwise from how people address each other in the conversation. A name it can’t stand behind isn’t used: a label that stays Participant 2 is telling you the truth, where a confident wrong name would quietly corrupt the summary built on it.
Does it work with Obsidian?
Yes. The output is plain markdown — one .mdper call, timestamped — so any folder-based notes app picks it up. In Settings, point the notes folder at your vault (the default is ~/Documents/Ghostie Call Notes). Each call lands ready for [[wikilinks]], tags, and Dataview queries.
Can I run it headless on a server?
Yes. The same binary ships a CLI: ghostie run for the headless watch loop, ghostie install-service for a launchd service, ghostie doctor and ghostie selftest for diagnostics, and ghostie diagnose-detectfor a live readout of what the detector is seeing when a call doesn’t fire.
Is it really free?
Yes. Ghostie is MIT-licensed and open source. Bring your own Claude Code login for the summary step, or run a local Ollama model instead — everything else runs locally on your machine.
Give your next Teams call to Ghostie.
Drop the .dmg into Applications, grant the two permissions once, then forget about it.
v1.8.0·9 September 2026·19 MB