
Records meetings and calls by capturing audio from your mic, transcribing it locally with whisper.cpp or parakeet.cpp, and saving timestamped markdown files to ~/meetings/. Works for in-person conversations on MacBook's built-in mic or system audio from Zoom and Meet if you route it through BlackHole. The live transcript streams to a JSONL file while recording so you can follow along mid-meeting. Everything stays on your machine, no cloud transcription. The tiny model is fast but sloppy, small is the sweet spot for real meetings, and large gets you the best accuracy if you can wait. Transcripts are saved with 0600 permissions since they contain sensitive content. Takes a few minutes of setup to download a speech model but then it just works.
$ npx -y skills add silverstein/minutes --skill minutes-record --agent claude-codeInstalls into .claude/skills of the current project.
Record audio from the microphone, transcribe it locally with whisper.cpp, and save as searchable markdown.
Recording is a two-step process — start and stop. Between those two commands, audio is captured continuously from the default input device.
Start recording:
minutes record
# Or with a title:
minutes record --title "Weekly standup with Alex"
The process runs in the foreground. It captures audio from whatever input device is active — the built-in MacBook mic for in-person conversations, or a BlackHole virtual audio device for system audio (Zoom, Meet, Teams calls).
Stop recording:
minutes stop
This sends a signal to the recording process, which then:
~/meetings/Live transcript during recording:
While recording, Minutes streams a real-time transcript to ~/.minutes/live-transcript.jsonl. You can read it with:
minutes transcript # all lines
minutes transcript --since 42 # lines after cursor
minutes transcript --since 5m # last 5 minutes
minutes transcript --status # check if active
This lets you follow what's being discussed mid-meeting. The live output is rougher than the final transcript produced after stop -- it prioritizes speed over accuracy.
Check status:
minutes status
Returns JSON: {"recording": true, "pid": 12345} or {"recording": false}
A markdown file at ~/meetings/YYYY-MM-DD-title.md with:
File permissions are set to 0600 (owner-only) because transcripts contain sensitive content.
If the user hasn't set up minutes before, they need a speech model:
Whisper (default):
minutes setup --model small
This downloads a ~466MB model. For faster but lower quality: --model tiny (75MB). For best quality: --model large-v3 (3.1GB).
Parakeet preferences currently resolve to Whisper on every platform. The pathname-only helper cannot safely receive Minutes' sealed private audio, so setup and selection fail closed until a secure byte transport lands. Do not send users through the Parakeet setup guide as a recording prerequisite.
minutes setup --model small. This is the most common first-run error.minutes stop first, or minutes status to check. If the PID file is stale (process crashed), minutes stop will clean it up.references/audio-devices.md in this skill folder for the full setup guide.tiny model is fast but low quality. Upgrade to small or medium for real meetings: minutes setup --model small.0600 (owner-only). This is intentional — transcripts contain sensitive content. Don't chmod them to be world-readable.small model takes ~3-5 minutes on Apple Silicon. The tiny model is ~4x faster but much less accurate.minutes record is running, the recording stops but may not process. Always use minutes stop from another terminal.Sponsors