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.
v1.13.2·18 October 2026·20 MB
How it works
Four steps. The first three never leave your Mac.
Ghostie doesn’t ask for your calendar, doesn’t need an admin to approve it, and never appears as a tile in the call.
- 01 Detect
Ghostie waits for a calling app to take over your microphone.
Microsoft Teams and Zoom work out of the box. Teams and Google Meet in a browser tab are off by default and can be switched on in Settings. A browser holding the microphone is weaker evidence than a meeting app doing it, 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.
Some meetings never trip the detector: one held in a room, or a call in an app Ghostie doesn’t know. Those you record yourself with Start Recording in the menu, and the same two tracks are kept until you stop it. A recording made somewhere else (a voice memo, a phone, a call someone exported) you hand over with Import Audio File…, and it goes through the three steps below like any call.
- 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. A file you import arrives as one track with everyone in the room on it, you included, and is filed under the date the recording was made, not the day you imported it.
- 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 Claude account (no API key, nothing billed on top), writes the sharper 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 models, one trained for Swedish and one for English, both 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.
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, with the same structure every time. It drops straight into your Obsidian vault, or any folder you point it at. When it has to go somewhere else, Copy Last Summary & Transcript in the menu puts the summary and the full transcript on your clipboard in one go.
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. Ghostie has no telemetry, no analytics and no error reporting. Apart from the summarizer you choose, an assistant you connect over MCP, this model download and the update check below, it makes no network traffic at all.
Notes an assistant reads, if you connect one
Ghostie can hand your notes to an AI assistant over MCP — off until you switch it on in Settings. A note is sent only when you ask about a call, and it goes to whichever provider that assistant runs on, exactly like text you paste in yourself. Point it at a local model and nothing leaves at all. The connection is read-only: it cannot start a recording, change a setting, or delete a note.
Backlog of stalled calls
When processing can’t finish — Claude Code not logged in or at its usage limit, 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.
Ghostie and Granola
How this is different from Granola.
Granola is the app people most often compare Ghostie to, and it’s a good one. Neither sends a bot into the call. They differ in where your meeting goes afterwards.
| Ghostie | Granola | |
|---|---|---|
| Transcription | On your Mac, with Whisper. | In the cloud, through Deepgram and AssemblyAI. Audio streams there live and is deleted once it’s transcribed. |
| Where notes live | Markdown files in a folder you choose. Your Obsidian vault works. | Granola’s servers on AWS in the US, with no EU hosting option, and a cache on your device. Bulk export is a CSV sent by email. |
| Account | None. | Sign in with Google or Microsoft, which connects that calendar. |
| The summary | Claude under your own account, or a local Ollama model that never touches the network. | Granola sends it to OpenAI or Anthropic models. |
| Model training | Ghostie never sees your notes, so it has nothing to train on. | Granola trains on anonymised data by default. You can opt out in Settings. |
| Speakers | Every voice split on your Mac, then named from the participant list or the conversation. | Me and Them by default. Speaker tags add names from Meet, Zoom and Teams. |
| Existing recordings | Import any audio file macOS can play. | Not supported. |
| Price | Free and MIT-licensed. The Claude summary needs a Claude plan that includes Claude Code. | Free with 30 days of history. Business is $14 per user per month. |
Where Granola is ahead
It runs on Windows, iPhone and Android as well as the Mac. You can type your own notes during the call and it folds them into the summary. Teams share notes and folders in one place. It transcribes 31 languages, and there’s nothing to set up. It also has a company behind it; Ghostie is one person’s experiment.
Where Ghostie is the better fit
When a call shouldn’t leave your Mac, or can’t sit on a US server. When you want the notes as plain files you own, next to the rest of your notes. When you have a recording already, or a meeting that happened in a room. And when you want to read the source before you trust it.
Granola’s details come from granola.ai and its help center, checked 26 September 2026. If something here has gone out of date, open an issue.
Platform
macOS 15 Sequoia or later
Captures audio with Core Audio and ScreenCaptureKit, no extra driver. Apple Silicon recommended.
Calling apps
Teams and Zoom, plus Meet in a tab
Ghostie checks which app is using the microphone, so dictation or a voice memo doesn’t count as a call. Teams and Google Meet in a browser are opt-in in Settings; Slack huddles aren’t supported yet. Anything the detector can’t see, you record by hand or import as a file.
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.13.2·18 October 2026·20 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
The menu bar app is the default. For a headless Mac, run ghostie run in a terminal; the CLI ships in the same binary.
Frequently asked
Before you install.
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 runs Claude Code under your existing Claude 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 › Transcription 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. An imported file has no microphone track of its own, so there you are one of the voices being told apart, not a given.
I already have a recording. Can Ghostie transcribe it?
Yes. Import Audio File… in the menu (or ghostie importon the command line) takes anything macOS can play — m4a, mp3, wav, aiff, the audio of a video — converts it on your Mac, and runs it through transcription, speaker separation, naming and the summary exactly like a call. The note is dated by when the recording was made. The same goes for a meeting that was never a call: Start Recording captures the room until you stop 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, ghostie diagnose-detectfor a live readout of what the detector is seeing when a call doesn’t fire, and ghostie import to push existing recordings through the pipeline from a script.
Can I ask an AI assistant about my calls?
Yes. Ghostie ships an MCP server, so Claude Desktop, Claude Code, Codex, Cursor, VS Code, Windsurf or LM Studio pointed at a local model can read your notes — “what did we decide on my last call?”, “when did she last bring up pricing?”. Settings › MCP sets up whichever of those you have installed, and any other MCP client takes the config block it copies for you. It’s off until you connect one, and read-only: an assistant can read a note when you ask about a call, and can’t start a recording or change anything.
Is it really free?
Yes. Ghostie is MIT-licensed and open source, and costs nothing. The Claude summary runs on your own Claude account, which needs a plan that includes Claude Code; the Ollama option costs nothing at all. Everything else runs on your Mac.
Give your next call to Ghostie.
Drop the .dmg into Applications, grant the two permissions once, then forget about it.
v1.13.2·18 October 2026·20 MB