Overview
Cloud notetakers work by uploading your meeting. That is a reasonable engineering choice and a poor privacy one, and it means the tool only works where a bot can be invited.
Meeting Bot captures the audio already playing on the Mac (Zoom, Meet, Teams, FaceTime, or a browser tab), so it needs no meeting-platform integration and works with any of them. Whisper transcribes locally. The only optional network call sends the finished transcript text for summarization, and that endpoint can point at a local model instead.
What I built
- System-audio capture through a small Swift helper (
audiocap), using the macOS screen-recording permission that system audio sits behind. - Speaker attribution without diarization in the common case: your microphone is “Me” and system audio is “Them”. Optional Speaker A/B/C diarization layers on top.
- Structured notes per meeting: summary, decisions, action items, and the full transcript.
- Templates for general, standup, 1:1, interview and sales-call meetings, so the summary prompt fits the meeting type.
- On-device transcript cleanup that strips filler, stutters and false starts, plus on-demand rewrites: key points, formal, short, long.
- Talk-time analytics per note: Me/Them ratio, word counts, turn counts, longest monologue.
- Search and Q&A across every meeting in the archive.
Three front-ends, one engine
One core drives a native macOS SwiftUI app, a Chrome extension, and a CLI, with an iOS companion that records from the microphone on-device. Keeping the engine separate from the surfaces is what makes three front-ends cheap to maintain: each is a thin driver over the same record, transcribe, summarize and export pipeline.
Results
- Raw audio and transcripts stay on the machine. The privacy guarantee comes from where the compute runs, not from a policy document.
- Zero running cost: local Whisper plus a free inference tier, with a local model as the fallback for summarization.
- Exports to Markdown, Apple Notes (iCloud or on-device) and Google Docs.
- CI runs on GitHub Actions.