fonds

Your meetings, recorded and transcribed on your own machine.

Captures your Mac's microphone and system audio as separate tracks, transcribes them locally, names the speakers it knows by voice, and matches every recording to the meeting it belongs to. The audio never leaves your machine.

git clone https://github.com/fondsdev/fonds && cd fonds
python3 -m venv .venv && source .venv/bin/activate
pip install -e .

MIT licensedmacOS 14.4+no account requiredsource on GitHub

Three commands, no hardware

fonds desktop record --duration 60
fonds rec transcribe
fonds rec show

Record a minute of this Mac, transcribe it, read it back. Transcription needs one extra — pip install -e '.[transcribe]' — and a Hugging Face token for the model download. Five of the six capabilities need no PLAUD hardware at all; see docs/install.md for the full prerequisites.

Every byte that leaves your machine

ASR and diarization run locally. Speaker matching is arithmetic against stored voiceprints — it does not even load a model. Several commands do use the network, and this is all of them:

WhenWhereWhat goes out
pin authPLAUD's developer APIyour serial, client id and secret key — never a recording
rec transcribe, first run per modelhuggingface.coa model download, authenticated with your HF_TOKEN
calendar authGoogle's OAuth endpointsthe consent flow; grants read-only calendar.readonly
calendar matchgoogleapis.coma read of your calendar for the days you recorded on
--llm onlyAnthropic's APIopt-in, and the only path that transmits anything derived from a recording

--llm is used only when the clock and the local transcript cannot separate two overlapping meetings. It sends candidate meeting titles, their local times, attendee first-name tokens, and up to ~4000 characters of the transcript covering the stretch those meetings span. Never email addresses, never audio, never transcript outside that stretch. Without it, an unresolved conflict is simply reported as unresolved.

docs/security.md has the field-by-field version, every file written and its mode, and what each credential grants.

Separate tracks are the quality argument

When you record your own Mac, your microphone and the far end land in different files, so the "me versus them" split is physical rather than inferred — no diarization error at all on the distinction that matters most. Remote participants arrive already close-mic'd and noise-suppressed by their own devices, at 48 kHz instead of a wearable's 16 kHz.

What it does

Five of the six capabilities need no PLAUD hardware at all.

CommandNeedsGuide
Record this Mac — mic and system audio as separate tracksfonds desktop recordmacOS 14.4+mac.md
Notice a call starting and offer to record itfonds desktop watchmacOS 14.4+mac.md
Transcribe and split it by speakerfonds rec transcribe[transcribe] extra, HF tokentranscripts.md
Name the voices you have enrolledfonds speakers identifya transcripttranscripts.md
Say which meeting a recording wasfonds calendar match[calendar] extra, Google authtranscripts.md
Sync recordings off a PLAUD NotePin Sfonds pin downloadthe device, PLAUD partner credentialspin.md

And the pin, if you have one

Existing open-source PLAUD clients target the older PLAUD Note and do nothing on a NotePin S: the device accepts your writes and answers nothing at all, including commands that need no authentication. The reason is an RSA pre-handshake the Note never had. Until it completes the device ignores everything; after it completes the whole BLE link is ChaCha20-Poly1305 encrypted, and the recordings themselves are individually encrypted at rest. fonds implements all three layers.

The full protocol is in docs/protocol.md; how it was worked out, dead ends included, is in docs/discovery.md.

Limits