Here’s a workflow that should be trivial: a meeting ends, I want Claude Code to help me extract action items, summarize decisions, prep follow-up messages. The meeting was recorded. The audio exists. The transcript exists. Getting it from point A to point B should take seconds.
It takes ten minutes on a good day. On a bad day, it doesn’t happen at all.
The problem nobody talks about
I record most of my meetings with Otter AI. Standups, design reviews, 1:1s, sprint planning. Anything where I might need to go back and check “wait, did we actually decide X or did I imagine that?” Which, with ADHD, is… most things.
The recordings range from 30-minute syncs to 3-hour deep dives. Once they exist, I want to do things with them: summarize the key decisions, pull out action items, draft follow-up Slack messages, prep for the next meeting based on what was discussed. Claude Code is absurdly good at all of this. Give it a transcript and ask “what did Ryan say about the runner migration timeline?” and you get a precise answer in two seconds.
The problem is the space between “meeting ends” and “transcript is in Claude Code.”
Even the happy path is annoying. Meeting ends. Open browser. Navigate to Otter’s website. Find the recording. Click export. Pick a format. Download the file. Move it somewhere Claude Code can see it. Point Claude at it. That’s eight steps for what should be zero steps.
And that’s when everything works.
The unhappy paths
Otter’s free tier cuts off transcription at 30 minutes. The Pro tier at 90 minutes. So a 2-hour design review? You get the first 90 minutes, and the last 30 minutes – where all the decisions actually happened, because that’s how meetings work – just… doesn’t exist.
Sometimes two meetings run back-to-back and Otter merges them into one recording. Now you have a 2-hour blob where the first hour is a sprint retro and the second hour is a completely unrelated architecture discussion, and you have to manually figure out where one ends and the other begins.
Sometimes recordings just never get transcribed. Otter shrugs. The audio file exists somewhere on their servers but the text version never materializes. No error, no explanation. It just doesn’t happen.
And here’s the thing about ADHD: every step in a pipeline is a potential drop-off point. Eight steps to get a transcript into Claude Code means eight chances for my brain to go “this is annoying, I’ll do it later” and then never do it. The task dies not because it’s hard, but because the activation energy exceeds my executive function budget for that moment.
The desire is simple: meeting ends, transcript appears in my terminal. Minimal manual steps. No web browser involved.
Why can’t Otter just… give me my data?
I checked. Thoroughly.
Otter AI has no public API. Zero programmatic access. You cannot write a script that pulls your transcripts. You cannot hook it into a pipeline. You cannot automate anything.
Their Enterprise tier apparently has some MCP server integration, but it’s behind a sales conversation and – even if I got it – my company’s DLP policies would almost certainly block it. So that’s a dead end twice over.
There’s a Zapier integration on Pro+, but it’s limited and still requires you to be in Otter’s ecosystem. The export formats are fine (txt, srt, pdf, docx on Pro+), but “fine export formats” doesn’t help when the export itself requires six manual clicks.
Otter is a walled garden. Great microphone. Great real-time transcription. Terrible at letting you take your data somewhere else. Which is a pattern you see a lot in consumer AI tools – the product is the capture, and the moat is making extraction painful enough that you stay inside.
So I stopped trying to get data out of Otter and started wondering: do I even need Otter?
Whisper runs on your laptop now
OpenAI’s Whisper is open source. It runs locally. On a MacBook with Apple Silicon, it transcribes a 1-hour recording in about 5 minutes. No internet required. No API keys. No 90-minute cutoff. No account. No web browser.
There are several flavors, and which one you want depends on what you need:
| Tool | What It Is | Speaker ID? | Speed (1hr audio, M4 Max) | Install |
|---|---|---|---|---|
| whisper (OpenAI) | Original Python CLI | No | ~7 min (turbo model) | pip install openai-whisper |
| mlx-whisper | Apple Silicon optimized | No | ~3-5 min (turbo) | pip install mlx-whisper |
| WhisperX | Whisper + speaker diarization | Yes (via pyannote) | ~8-10 min | needs HuggingFace token |
| MacWhisper | macOS GUI app | Pro version only | ~5 min | brew install macwhisper |
| whisper.cpp | Native C++ implementation | No | ~4 min | brew install whisper-cpp |
The speed winner for Apple Silicon is mlx-whisper. It uses Apple’s MLX framework, which means it actually uses your GPU cores instead of pretending they don’t exist. For a 1-hour recording, you’re looking at 3-5 minutes with the turbo model.
If you need to know who said what, WhisperX adds speaker diarization via pyannote. It’s slower and requires a HuggingFace token for the speaker model, but the output labels each segment with SPEAKER_00, SPEAKER_01, etc. Claude can usually figure out who’s who from context – “the person talking about Bazel migration is probably Zoe, the person asking about runner timelines is probably Ryan.”
The pipeline: one command
Here’s what I actually built. A shell alias:
mt recording.mp3
That’s it. mt for “meeting transcript.” It runs mlx-whisper on the file and drops the transcript into ~/.claude/scratch/ where Claude Code can see it immediately. No browser. No export. No clicking through a website.
For the common case – quick standup, 30-minute sync, I just need the words – mlx-whisper is the default. Fast, accurate, done.
For meetings where I need to know who said what, I swap to WhisperX:
mt --speakers recording.mp3
The speaker labels come back as SPEAKER_00, SPEAKER_01, etc. Anonymous, but Claude maps them to real names instantly once it reads the content. “SPEAKER_00 keeps talking about Docker image builds” – that’s Masatoshi. Context does the work.
The merged meeting problem
Remember the thing where Otter sometimes merges two meetings into one recording? With local Whisper, that’s actually solvable.
Whisper transcribes the whole audio file with timestamps. Hand that to Claude and say “find where the topic changes dramatically” and it’ll identify the boundary. Then ffmpeg splits the audio:
ffmpeg -i merged.mp3 -ss 00:00:00 -to 01:02:30 meeting1.mp3
ffmpeg -i merged.mp3 -ss 01:02:30 meeting2.mp3
Two transcripts from one file. The thing Otter can’t do – or won’t do – because it would require acknowledging that their recording boundaries are sometimes wrong.
The ADHD math
Before:
- Open browser
- Navigate to Otter
- Find the recording
- Click export
- Choose format
- Download file
- Move file somewhere useful
- Point Claude Code at it
- Hope Otter actually transcribed the whole thing
Steps: 9. Drop-off points: 9. Assumes Otter cooperated: yes.
After:
- Get the audio file (one click – AirDrop from phone, or it’s already on disk)
- Run
mt recording.mp3 - Wait ~4 minutes
Steps: 3. Drop-off points: 2. External dependencies: zero.
That’s not a minor improvement. For someone whose executive function treats “open browser and navigate to a website” as a significant activation barrier, cutting the pipeline from 9 steps to 3 is the difference between “I’ll do it later” and actually doing it.
The audio file acquisition is the one remaining friction point. If you’re recording on your laptop, the file is already there. If you’re on your phone, it’s an AirDrop. I haven’t automated that last step yet, but one tap to share via AirDrop is within my activation energy budget.
What I actually wanted
I spent an unreasonable amount of time trying to make Otter work better. Checking if there’s an API. Investigating enterprise tiers. Looking at Zapier integrations. Trying to find Chrome extensions that auto-export. All of this was solving the wrong problem.
The right question wasn’t “how do I get data out of Otter?” It was “why is Otter in the pipeline at all?”
Otter’s value proposition is real-time transcription during a meeting – the live captions, the ability to highlight and comment while someone’s talking. If you need that, Otter is good at it. But if what you actually need is “audio in, text out, as fast as possible, with no friction,” then a local Whisper model on Apple Silicon is strictly better. Faster. No limits. No account. No walled garden. Runs offline.
The tool I was fighting with wasn’t even solving the problem I actually had. I didn’t need live transcription. I needed post-meeting text extraction. Those are different problems with different optimal solutions, and I was using the wrong tool because it was the one I’d already set up.
Sometimes the fix isn’t a better integration. It’s removing the thing you’re trying to integrate with.