name: meeting_transcription description: Transcribe and summarise meeting recordings using only local tools (Whisper + Ollama). No data is sent online. Use when the user asks to transcribe, summarise, or take notes from a meeting recording.
Meeting Transcription & Summary (Fully Local)
Overview
Transcribe an audio/video recording and produce a structured meeting summary. All processing happens locally — no data leaves the user's machine. Uses OpenAI Whisper (local inference) for transcription and Ollama (local LLM) for summarisation.
Input
ARGUMENTS may be:
- A file path to an audio/video file (e.g.,
.m4a,.mp3,.wav,.mp4,.mov,.webm) - A directory path containing multiple recordings
- The word
transcriptfollowed by a path to an existing.txttranscript (skips transcription, goes straight to summary)
If no argument is provided, ask the user for the file path.
Prerequisites Check
Before doing anything, verify the local toolchain is installed. Run these checks:
which whisper || echo "MISSING: whisper"
which ollama || echo "MISSING: ollama"
which ffmpeg || echo "MISSING: ffmpeg"
ollama list 2>/dev/null | head -5
If any tool is missing, guide the user through installation using ONLY these local install commands:
# FFmpeg (required by Whisper for audio decoding)
brew install ffmpeg
# Whisper (local speech-to-text — runs entirely on-device)
pip3 install openai-whisper
# Ollama (local LLM — runs entirely on-device)
# Download from https://ollama.ai or:
brew install ollama
# Pull a summarisation model (one-time download, then runs offline)
ollama pull mistral
IMPORTANT: Tell the user that:
openai-whisperis a LOCAL model that runs on their Mac — despite the "openai" name, it does NOT use any API or send data onlineollamaruns models entirely on-device after the initial model downloadffmpegis a local audio processing tool- After installation, the entire pipeline works offline
Do NOT proceed until all tools are confirmed installed.
Step 1: Transcribe
Run Whisper locally on the audio file. Choose the model size based on the user's preference for speed vs accuracy:
| Model | Size | Speed | Quality |
|-------|------|-------|---------|
| tiny | 75 MB | Fastest | Basic |
| base | 140 MB | Fast | Decent |
| small | 460 MB | Moderate | Good |
| medium | 1.5 GB | Slow | Very good |
| large | 3 GB | Slowest | Best |
Default to small unless the user specifies otherwise. Auto-detect language unless specified.
whisper "<audio_file>" --model small --output_format txt --output_dir "<output_dir>"
Where <output_dir> is the same directory as the audio file.
After transcription:
- Read the output
.txtfile - Report the transcript length and detected language to the user
- Save the raw transcript as
<filename>_transcript.txt
If the user provided a pre-existing transcript (via transcript <path>), skip this step and read the file directly.
Step 2: Summarise with Ollama
For transcripts under ~3000 words, pipe directly to Ollama:
cat "<transcript_file>" | ollama run mistral "<prompt>"
For transcripts over ~3000 words, use the REST API to set a larger context window (the --num-ctx flag does not exist in current Ollama CLI):
import json, urllib.request
with open("<transcript_file>") as f:
transcript = f.read()
prompt = "<instruction>\n\nTRANSCRIPT:\n" + transcript
payload = json.dumps({
"model": "mistral",
"prompt": prompt,
"stream": False,
"options": {"num_ctx": 8192} # use 16384 for very long transcripts (>7000 words)
}).encode()
req = urllib.request.Request(
"http://localhost:11434/api/generate",
data=payload,
headers={"Content-Type": "application/json"}
)
with urllib.request.urlopen(req, timeout=600) as resp:
data = json.loads(resp.read())
print(data["response"])
For very long transcripts (>7000 words), use the chunking strategy in the section below instead of increasing num_ctx further, as model quality degrades at extreme context lengths.
Use this prompt structure:
You are a meeting summarisation expert. Analyse this meeting transcript and produce a structured summary with the following sections:
## Meeting Summary
### Key Discussion Points
- [Bullet points of main topics discussed]
### Decisions Made
- [Specific decisions that were agreed upon]
### Action Items
- [ ] [Action item] — [Responsible person if mentioned] — [Deadline if mentioned]
### Open Questions
- [Unresolved issues or topics deferred to future discussion]
### Notable Quotes or Positions
- [Any significant statements, disagreements, or positions taken]
Be concise. Only include information explicitly present in the transcript. Do not infer or add information that was not discussed.
TRANSCRIPT:
Step 3: Save Output
Save the summary as <filename>_summary.md in the same directory as the audio file.
Then delete the original audio file:
rm "<audio_file>"
The final output structure:
meeting_recording_transcript.txt ← raw transcript (saved in audio folder)
meeting_recording_summary.md ← structured summary
Note: the original audio file is deleted after successful transcription and summarisation to save disk space. Skip deletion if the user provided a pre-existing transcript (no audio file was consumed).
Step 4: Review
After saving, display the summary to the user and ask:
- Whether they want to adjust the level of detail
- Whether any sections need expansion
- Whether they want to re-run with a different Ollama model (e.g.,
llama3for higher quality)
Handling Long Transcripts
If the transcript exceeds ~3000 words (roughly the context window of smaller models):
- Split into chunks of ~2500 words at natural paragraph breaks
- Summarise each chunk separately
- Run a final consolidation pass combining the chunk summaries
# Consolidation prompt
cat chunk_summaries.txt | ollama run mistral "Consolidate these partial meeting summaries into a single coherent summary following the same structure (Key Discussion Points, Decisions, Action Items, Open Questions):"
Privacy Guarantees
Remind the user at the start of every run:
- Whisper runs locally — audio never leaves the machine
- Ollama runs locally — transcript text never leaves the machine
- No API keys, no cloud services, no network requests during processing
- The only network activity is the one-time model downloads during installation
Troubleshooting
- Whisper out of memory: Use a smaller model (
--model tinyor--model base) - Ollama not responding: Run
ollama servein a separate terminal first - Unsupported audio format: Convert with
ffmpeg -i input.xyz output.wavfirst - Transcript too long for Ollama: Use the chunking strategy above, or try
ollama pull llama3which has a larger context window
Priorisation de Tâches
Productivite
Priorise vos tâches avec les frameworks Eisenhower, ICE et RICE.
Generateur de Rapport Hebdomadaire
Productivite
Generez des rapports de statut hebdomadaires structures et concis.
Rapport de Daily Standup
Productivite
Génère des rapports de daily standup structurés et concis.