Teams 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.

No bot.·No cloud.·No login.

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.

  1. 01  Detect

    Ghostie waits for a calling app to take over your microphone.

    Today it watches for Microsoft Teams specifically — each app has its own evidence shape, and Teams was the first. Zoom, Meet, and Slack huddles will follow. 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.

  2. 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.

  3. 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, labelled Me and Participants, with a filter that catches Whisper’s usual mistakes — phrases looping when no one’s talking, training-data leaks like “Subtitles by the Amara.org community.”

  4. 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.

14:03MarcusOkay, let's start with the pricing test results.en
14:03LinneaVi har ungefär 30 procent drop-off på den nya sidan.sv
14:04DanielÄr det jämfört med kontrollgruppen?sv
14:04LinneaYes, compared to the control. Both variants drop off.en
14:05MarcusOkej, vi kör båda parallellt en vecka till.sv

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.

2026-05-19_14-03_Teams-Call.mdsaved
Sprint 24 planning
Tuesday, 19 May 2026 · 14:03 · Teams · 37 min · 4 participants
Context

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.

Participants & roles
  • Marcus — product lead, ran the meeting.
  • Linnea — user research, presented the findings.
  • Elin — growth, owns the funnel data.
  • Daniel — engineering, evaluating search vendors.
Key discussion points
  • 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.
Decisions
  • 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.
Action items
OwnerActionDue
MarcusWrite up the onboarding rollout planFriday
ElinPull the funnel data for the pricing testTuesday
DanielConfirm the Algolia contract termsNext sync
Open questions & risks
  • 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?
One-paragraph summary

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, never sent to a Ghostie server (there is no Ghostie server).

Whisper and KB-Whisper models

Fetched once, then run locally. No telemetry, no analytics, no error reporting. The only outbound traffic is fetching models from Hugging Face and checking GitHub Releases for an update — both to third parties, never to a Ghostie server.

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

Every update is signed by Apple and double-checked by Ghostie before it installs. If you’re on a call when an update 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.

Trigger app

Microsoft Teams, by design

Built on per-PID audio attribution that tells a real Teams call apart from any other mic use. Zoom, Meet, and Slack huddles aren’t supported yet — each needs its own evidence shape.

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.

  1. Download Ghostie.dmg
  2. Open it, drag Ghostie to Applications
  3. Launch. Grant Screen Recording and Microphone once when prompted
  4. For the Claude summarizer, run claude once in a terminal to sign in. For the local one, install Ollama and pull a model
Download Ghostie.dmg

v1.1.0·13 July 2026·5 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.

  1. git clone github.com/sjunnesson/ghostie
  2. ./scripts/setup.sh to fetch whisper.cpp and the models
  3. ./scripts/build-app.sh to build, sign, and install to /Applications
  4. open /Applications/Ghostie.app and grant permissions once
Repository

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 Teams specifically 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 Teams never sees a participant.

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?

In Settings ▸ Transcription, switch the mode to Language switching. Ghostie chops each track into chunks, detects the language of every chunk, and transcribes Swedish ones with the Swedish-trained Whisper model and English ones with the English-trained one. Models live in ~/.ghostie/models/ and download from the same Settings pane.

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/Teams 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.1.0·13 July 2026·5 MB