Click the icon in the menu bar to start, and click again to stop. It records your microphone and whatever the Mac is playing as two separate tracks, so your side and the other side are kept apart from the start. When you stop, it writes a transcript with you and them tagged, and if the Mac crashes mid-meeting, everything recorded so far is still there.
quill
quill records a call or a meeting on your Mac and hands you a transcript that says who said what. Nothing leaves the machine.
Private buildmacOS
$ quill run --out ~/demo/recordings quill up · recordings → ~/demo/recordings · ^C to quit resuming 1 untranscribed session(s) $ quill doctor ✓ microphone: ok ! system audio: state unknowable until first use — will prompt on first recording → if recordings come out silent: System Settings → Privacy & Security → Screen & System Audio Recording ✓ recordings folder: ok ✓ transcription: ok $ grep '^\*\*' ~/demo/recordings/*/transcript.md | head -6 **[0:00] me:** Good morning. **[0:00] me:** Thanks for joining the planning call for Saturday's beach cleanup. **[0:04] them:** Good morning. **[0:05] them:** I have the permit confirmed for eight o'clock, and the lifeguard station will be open for supplies. **[0:11] me:** Great. **[0:12] me:** How many volunteers have signed up so far?
What it does
Hard problem we solved
Getting the mic permission with no app bundle
quill is one Swift binary with a menu-bar icon, about 1,900 lines in one package, and it runs as a LaunchAgent rather than an app you open from the Dock. macOS hands out the microphone and audio permissions to an app bundle, and there was no bundle to hand them to.
So the Info.plist is linked straight into the binary, which is what lets macOS attribute the audio permission to quill when the LaunchAgent starts it. System audio comes from a Core Audio process tap on a private aggregate device, so there is no virtual audio driver to install. Audio streams as AAC into a CAF file, which needs no final pass, so a killed process still leaves readable audio. On stop, an on-device Core ML speech model transcribes each track at about 20 seconds per hour of audio, and the two tracks are shifted to one clock and merged by time.
The tap is global, so it records everything the Mac plays, and the docs say so rather than hide it. Optional echo cancellation keeps speaker playback from being transcribed twice as the local side, at the cost of slight ducking of other audio.
Where it stands
A private tool in daily use. A Whisper engine is planned as a fallback and for other languages.
One command that turns a recording into a transcript with speakers, all on the Mac.
Next in Tools