minutes-record
Start or stop recording a meeting, call, or voice memo. Use this whenever the user says "record", "start recording", "capture this meeting", "stop recording", "I'm in a meeting", "take notes on this call", or wants to transcribe live audio. Also use when they ask about recording
Install
npx skills add https://github.com/silverstein/minutes/tree/main/.claude/plugins/minutes/skills/minutes-record
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install silverstein-minutes@llmmart
git clone https://github.com/silverstein/minutes.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole silverstein/minutes collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
/minutes-record
Record audio from the microphone, transcribe it locally with whisper.cpp, and save as searchable markdown.
How it works
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:
- Stops audio capture
- Transcribes the audio locally via whisper.cpp (no cloud, no data leaves the machine)
- Saves the transcript as a markdown file in
~/meetings/ - Prints the output path and word count as JSON
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}
What you get
A markdown file at ~/meetings/YYYY-MM-DD-title.md with:
- YAML frontmatter (title, date, duration, type)
- Timestamped transcript
- Summary, decisions, and action items (if LLM summarization is configured)
File permissions are set to 0600 (owner-only) because transcripts contain sensitive content.
First-time setup
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.
Gotchas
- "model not found" → Run
minutes setup --model small. This is the most common first-run error. - "already recording" → Run
minutes stopfirst, orminutes statusto check. If the PID file is stale (process crashed),minutes stopwill clean it up. - No audio captured / empty transcript → Check that the right input device is selected in System Settings > Sound. On MacBooks, the default mic works for in-person conversations but won't capture system audio.
- For Zoom/Meet/Teams audio → You need BlackHole to capture system audio. See
references/audio-devices.mdin this skill folder for the full setup guide. - Recording runs but transcription is garbage → The
tinymodel is fast but low quality. Upgrade tosmallormediumfor real meetings:minutes setup --model small. - "permission denied" on output file → Output files are
0600(owner-only). This is intentional — transcripts contain sensitive content. Don't chmod them to be world-readable. - Long meetings (>2 hours) → Transcription time scales with duration. A 2-hour meeting with the
smallmodel takes ~3-5 minutes on Apple Silicon. Thetinymodel is ~4x faster but much less accurate. - Recording process disappeared → If you close the terminal tab where
minutes recordis running, the recording stops but may not process. Always useminutes stopfrom another terminal.
Files (minutes)
-
references
-
audio-devices.md 2.9 KB
# Audio Device Setup Guide Minutes captures audio from whatever input device is set as the system default (or configured in `config.toml`). Different scenarios require different setups. ## Quick reference | Scenario | Input device | Setup needed | |----------|-------------|--------------| | In-person meeting | Built-in Microphone | None | | External USB mic (Blue Yeti, Rode, etc.) | Your mic name | Plug in, select in System Settings > Sound > Input | | Zoom / Meet / Teams call | BlackHole 2ch | Install BlackHole + Multi-Output Device (see below) | | iPhone voice memo | N/A (file-based) | Configure folder watcher | ## Capturing system audio (Zoom, Meet, Teams) macOS doesn't let apps record system audio directly. You need BlackHole, a free virtual audio device. ### 1. Install BlackHole ```bash brew install blackhole-2ch ``` ### 2. Create a Multi-Output Device This lets you hear the call AND record it simultaneously: 1. Open **Audio MIDI Setup** (Spotlight → type "Audio MIDI Setup") 2. Click the **+** button at bottom-left → **Create Multi-Output Device** 3. Check both: - Your speakers/headphones (e.g., "MacBook Pro Speakers" or "AirPods Pro") - **BlackHole 2ch** 4. Make sure your speakers/headphones are listed FIRST (drag to reorder — the first device is what you hear) 5. Right-click the Multi-Output Device → **Use This Device For Sound Output** ### 3. Configure Minutes Either set BlackHole as the system default input in System Settings > Sound > Input, or configure it in Minutes: ```toml # ~/.config/minutes/config.toml [capture] device = "BlackHole 2ch" ``` Or pass it per-recording: ```bash minutes record --device "BlackHole 2ch" --title "Team standup" ``` ### 4. After the call Switch your output back to normal speakers/headphones. The Multi-Output Device routes audio through both outputs, which can add slight latency for music/video. ## iPhone voice memos (auto-import) Use the folder watcher to auto-process voice memos synced from iPhone via iCloud: ```toml # ~/.config/minutes/config.toml [watch] input_dir = "~/Library/Mobile Documents/com~apple~Voicememos/Recordings/" ``` Then: `minutes watch` Files are moved to `~/meetings/memos/processed/` after transcription. ## Troubleshooting | Symptom | Cause | Fix | |---------|-------|-----| | Empty transcript | Wrong input device selected | Check System Settings → Sound → Input | | Only your voice, not the call | BlackHole not set up | Follow the Multi-Output Device steps above | | Echo in recording | Recording both mic + system audio | Mute your mic in the call app if you only want call audio | | BlackHole disappeared | macOS update removed it | `brew reinstall blackhole-2ch` | | Recording is mono/low quality | Source audio is compressed VoIP | Normal — VoIP audio is always lower quality than in-person | | Notification sounds in transcript | System sounds captured via BlackHole | Turn on Do Not Disturb during recording |
-
-
SKILL.md 4.3 KB
--- name: minutes-record description: Start or stop recording a meeting, call, or voice memo. Use this whenever the user says "record", "start recording", "capture this meeting", "stop recording", "I'm in a meeting", "take notes on this call", or wants to transcribe live audio. Also use when they ask about recording status or want to know if something is being recorded. user_invocable: true --- # /minutes-record Record audio from the microphone, transcribe it locally with whisper.cpp, and save as searchable markdown. ## How it works Recording is a two-step process — start and stop. Between those two commands, audio is captured continuously from the default input device. **Start recording:** ```bash 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:** ```bash minutes stop ``` This sends a signal to the recording process, which then: 1. Stops audio capture 2. Transcribes the audio locally via whisper.cpp (no cloud, no data leaves the machine) 3. Saves the transcript as a markdown file in `~/meetings/` 4. Prints the output path and word count as JSON **Live transcript during recording:** While recording, Minutes streams a real-time transcript to `~/.minutes/live-transcript.jsonl`. You can read it with: ```bash 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:** ```bash minutes status ``` Returns JSON: `{"recording": true, "pid": 12345}` or `{"recording": false}` ## What you get A markdown file at `~/meetings/YYYY-MM-DD-title.md` with: - YAML frontmatter (title, date, duration, type) - Timestamped transcript - Summary, decisions, and action items (if LLM summarization is configured) File permissions are set to 0600 (owner-only) because transcripts contain sensitive content. ## First-time setup If the user hasn't set up minutes before, they need a speech model: **Whisper (default):** ```bash 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. ## Gotchas - **"model not found"** → Run `minutes setup --model small`. This is the most common first-run error. - **"already recording"** → Run `minutes stop` first, or `minutes status` to check. If the PID file is stale (process crashed), `minutes stop` will clean it up. - **No audio captured / empty transcript** → Check that the right input device is selected in System Settings > Sound. On MacBooks, the default mic works for in-person conversations but won't capture system audio. - **For Zoom/Meet/Teams audio** → You need BlackHole to capture system audio. See `references/audio-devices.md` in this skill folder for the full setup guide. - **Recording runs but transcription is garbage** → The `tiny` model is fast but low quality. Upgrade to `small` or `medium` for real meetings: `minutes setup --model small`. - **"permission denied" on output file** → Output files are `0600` (owner-only). This is intentional — transcripts contain sensitive content. Don't chmod them to be world-readable. - **Long meetings (>2 hours)** → Transcription time scales with duration. A 2-hour meeting with the `small` model takes ~3-5 minutes on Apple Silicon. The `tiny` model is ~4x faster but much less accurate. - **Recording process disappeared** → If you close the terminal tab where `minutes record` is running, the recording stops but may not process. Always use `minutes stop` from another terminal.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.