Meeting notes are time-consuming. Recording → transcribing → formatting → distributing takes 30-60 minutes per meeting. This OpenClaw agent automates the entire flow:
1 Create a new agent called meeting-notes:
openclaw agent create meeting-notes --description "Transcribes meetings and extracts action items"
This creates ~/.openclaw/agents/meeting-notes/ with these files:
config.yaml - Agent configurationprompt.md - System prompt (we'll customize this)memory/ - Session history and context2a Add your OpenAI API key to ~/.openclaw/credentials/openai.json:
{
"api_key": "sk-..."
}
2b Install the Whisper skill:
openclaw skill install whisper
2a Add your AssemblyAI API key to ~/.openclaw/credentials/assemblyai.json:
{
"api_key": "your-assemblyai-key"
}
2b Install the AssemblyAI skill:
openclaw skill install assemblyai
3 Edit ~/.openclaw/agents/meeting-notes/prompt.md:
# Meeting Notes Agent
You are a meeting transcription and summarization specialist.
## Your job
1. Transcribe the uploaded audio/video file
2. Extract structured information
3. Format as a readable summary
## Output format
Use this exact structure:
### Meeting Summary
**Date:** [Extract from filename or content]
**Duration:** [Calculate from audio length]
**Participants:** [List all speakers if diarization available]
### Key Decisions
- [Decision 1]
- [Decision 2]
### Action Items
- [ ] [Action item] - @[Owner] - Due: [Date if mentioned]
- [ ] [Action item] - @[Owner]
### Discussion Points
- **[Topic]:** [Key points discussed]
- **[Topic]:** [Key points discussed]
### Questions Raised
- [Unanswered question 1]
- [Unanswered question 2]
### Next Steps
- [Next meeting date/topic if mentioned]
- [Follow-up actions]
## Instructions
- Use the /whisper or /assemblyai skill to transcribe
- If speaker diarization is available, attribute quotes
- Extract action items even if not explicitly stated (infer from "I'll..." or "We need to...")
- Flag unclear or incomplete action items
- Preserve important quotes verbatim
- Summarize lengthy discussions into key points
- Note any blockers or risks mentioned
- Estimate dates from context (e.g., "next week" → [specific date])
## Examples
**Input:** "So I think we should migrate to the new API by end of month. John, can you handle that?"
**Extract:** Action: Migrate to new API - @John - Due: [Last day of current month]
**Input:** "We decided to go with option B instead of A."
**Extract:** Decision: Selected option B over option A
4 Run the agent with a sample meeting recording:
openclaw run meeting-notes --file ~/Downloads/team-standup-2026-03-16.mp3
The agent will:
meeting-notes-2026-03-16.md for review.
5 Review the output and refine the prompt if needed:
6 Create a Slack webhook:
https://hooks.slack.com/services/...)7 Add webhook to ~/.openclaw/credentials/slack.json:
{
"webhook_url": "https://hooks.slack.com/services/..."
}
8 Update your agent prompt to include posting to Slack:
## After generating the summary
Use the /slack skill to post the summary:
/slack post --channel meeting-notes --message "[formatted summary]"
9 Test end-to-end:
openclaw run meeting-notes --file ~/Downloads/client-call-2026-03-16.mp3
You should see the summary posted to your Slack channel within 2-3 minutes.
Auto-process recordings when uploaded to a specific folder:
# Add to crontab (check every 5 minutes)
*/5 * * * * openclaw run meeting-notes --watch ~/Dropbox/Meetings/
Process meeting recordings sent via email:
openclaw gateway email --agent meeting-notes --filter "subject:meeting recording"
Auto-fetch Zoom cloud recordings:
openclaw skill install zoom
openclaw run meeting-notes --source zoom --auto
Upload recording to Telegram, agent processes it:
openclaw gateway telegram --agent meeting-notes
Problem: "Unsupported format" error
Fix: Convert to .mp3 or .wav using ffmpeg:
ffmpeg -i input.m4a -acodec libmp3lame output.mp3
Problem: Poor audio quality, background noise, multiple speakers talking over each other
Fixes:
sox or Auphonic)Problem: Agent doesn't extract obvious action items
Fix: Add more examples to the prompt:
## Action item extraction rules
Extract action items from:
- "I'll [do thing]" → Action: [do thing] - @[Speaker]
- "Can you [do thing]?" → Action: [do thing] - @[Person asked]
- "We need to [do thing]" → Action: [do thing] - @Team
- "Let's [do thing] by [date]" → Action: [do thing] - @Team - Due: [date]
Problem: "Webhook not found" or permission error
Fixes:
https://hooks.slack.com/services/)curl -X POST [webhook-url] -d '{"text":"test"}'Problem: Transcription costs adding up
Optimization strategies:
| Strategy | Savings | How |
|---|---|---|
| Use Whisper instead of AssemblyAI | ~£0.30/hour | If you don't need speaker diarization |
| Compress audio before transcription | 20-40% | ffmpeg -i input.mp3 -b:a 64k output.mp3 |
| Skip intro/outro music | 10-20% | Trim audio: ffmpeg -ss 00:01:00 -to 00:45:00 -i input.mp3 output.mp3 |
| Use local Whisper model | 100% | Install whisper.cpp locally (slower but free) |
The OpenClaw Course teaches you to build a complete 11-agent business automation system. 10 modules, 95,000+ words, real configs and commands. From security to scaling to £500k+.
View Course (£97) Read Free ChapterDan offers private 1-hour OpenClaw setup sessions for £1,500. Get your agents running, security locked down, and cost optimized. Book via LinkedIn.