Mako is a meeting-to-action automation pipeline.
Give it a meeting audio file or a transcript, and it turns the conversation into a useful follow-up package:
- a clean meeting summary
- action items with owners, due dates, and priority
- Google Calendar events for follow-up meetings
- a Gmail report sent to the chosen recipient
- a local
meeting_report.mdfile you can keep or share
It started as a CLI project, but the goal is very real: take the messy output of a meeting and turn it into next steps automatically.
Meetings usually create work, but that work often gets lost in notes, chat messages, or memory. Mako tries to close that gap.
Instead of manually listening to a recording, writing a summary, finding tasks, creating a calendar event, and sending a follow-up email, you run one command:
python main.py --audio meeting.mp3 --email you@example.com --provider groqMako handles the pipeline from there.
- Accept an audio file:
.mp3,.wav, or.m4a - Accept a transcript file directly with
--transcript - Transcribe audio locally with Whisper
- Use Groq, Anthropic Claude, or local rules for summary/action extraction
- Save a Markdown report locally
- Send the report through Gmail
- Create Google Calendar events when follow-up meetings are mentioned
- Keep running even if Gmail or Calendar fails
flowchart TD
A["Audio file or transcript"] --> B{"Input type"}
B -->|"--audio"| C["Transcriber Agent"]
B -->|"--transcript"| D["Load transcript text"]
C --> E["Whisper local transcription"]
E --> F["Transcript"]
D --> F
F --> G{"Provider"}
G -->|"groq"| H["Groq Summarizer + Action Extractor"]
G -->|"anthropic"| I["Claude Summarizer + Action Extractor"]
G -->|"local"| J["Local rule-based extraction"]
H --> K["Structured summary + action items"]
I --> K
J --> K
K --> L["Dispatcher Agent"]
L --> M["Google Calendar event"]
L --> N["Gmail summary email"]
K --> O["meeting_report.md"]
Mako runs sequentially. Each stage depends on the previous one.
Transcribe or load transcript
->
Summarize meeting
->
Extract action items
->
Dispatch to Calendar/Gmail
->
Save meeting_report.md
This is not a parallel agent swarm. It is a clean, step-by-step workflow where each agent has one job.
Mako/
|-- main.py
|-- orchestrator.py
|-- requirements.txt
|-- README.md
|-- agents/
| |-- transcriber.py
| |-- summarizer.py
| |-- action_extractor.py
| |-- groq_summarizer.py
| |-- groq_action_extractor.py
| |-- local_summarizer.py
| |-- local_action_extractor.py
| `-- dispatcher.py
`-- tools/
|-- whisper_tool.py
|-- calendar_tool.py
|-- gmail_tool.py
`-- google_auth.py
The transcriber takes an audio file and turns it into text using local Whisper.
This means no OpenAI API key is needed for transcription. Whisper runs on your machine.
The summarizer reads the transcript and returns structured JSON:
{
"meeting_title": "Launch Plan Discussion",
"attendees_mentioned": ["Priya", "Alex"],
"key_decisions_made": ["Ship the beta checklist first"],
"topics_discussed": ["Launch plan", "Onboarding bugs"],
"follow_up_meetings": []
}The action extractor finds tasks from the transcript and returns JSON:
[
{
"task_description": "Prepare the beta checklist",
"assigned_person": "Priya",
"due_date": "2026-06-26",
"priority": "Medium"
}
]The dispatcher handles the outside-world actions:
- creates Google Calendar events for follow-up meetings
- sends the meeting report through Gmail
- logs success or failure for each external call
Even if Gmail or Calendar fails, Mako still saves the local report.
Mako supports three provider modes.
Recommended for this project right now.
Groq gives much better extraction than local rules and is often easier to test without paid Anthropic credits.
python main.py --transcript transcript.txt --email you@example.com --provider groqThis uses Claude through the Anthropic SDK.
It is high quality, but it needs Anthropic API credits.
python main.py --transcript transcript.txt --email you@example.com --provider anthropicThis uses simple local rules. It is fully free and does not call an LLM API.
It is useful for testing the pipeline, but it is less smart than Groq or Claude.
python main.py --transcript transcript.txt --email you@example.com --provider localYou can also use:
python main.py --transcript transcript.txt --email you@example.com --offline--offline is just a shortcut for --provider local.
Create and activate a virtual environment:
cd Mako
python -m venv .venv
.venv\Scripts\activateInstall dependencies:
pip install -r requirements.txtIf you added Groq after installing requirements earlier, install it directly:
pip install groq==1.5.0Create a .env file in the Mako folder.
For Groq:
GROQ_API_KEY=your_groq_api_key_here
GROQ_MODEL=llama-3.3-70b-versatile
For Anthropic:
ANTHROPIC_API_KEY=your_anthropic_api_key_here
ANTHROPIC_MODEL=claude-sonnet-4-6
You only need the keys for the provider you plan to use.
Whisper needs FFmpeg to read audio files like .mp3 and .m4a.
Check if it works:
ffmpeg -versionIf Windows says ffmpeg is not recognized, install FFmpeg and make sure its bin folder is on your PATH.
Mako uses Google OAuth for Gmail and Calendar.
In Google Cloud Console:
- Create or select a project.
- Enable Google Calendar API.
- Enable Gmail API.
- Configure the OAuth consent screen.
- Add your Gmail account as a test user if the app is in testing mode.
- Create an OAuth client ID.
- Choose application type: Desktop app.
- Download the JSON file.
- Rename it to
credentials.json. - Put it inside the
Makofolder.
The app requests only these scopes:
https://www.googleapis.com/auth/calendar.events
https://www.googleapis.com/auth/gmail.send
On the first run, Google opens a browser login. After you approve it, Mako saves token.json so you do not need to log in every time.
Do not share:
.env
credentials.json
token.json
python main.py --transcript transcript.txt --email you@example.com --provider groqpython main.py --audio meeting.mp3 --email you@example.com --provider groqSupported audio formats:
.mp3
.wav
.m4a
This is useful when you only want to test summary and action extraction.
python main.py --transcript transcript.txt --email you@example.com --provider groq --no-dispatchThis avoids paid APIs and avoids Google dispatch.
python main.py --transcript transcript.txt --email you@example.com --provider local --no-dispatchToday Priya and Alex discussed the launch plan. Priya will prepare the beta checklist by Friday. Alex will review onboarding bugs next week. We decided to schedule a follow-up meeting on 2026-07-02 at 15:00 UTC.
Console output:
[1/4] Transcribing or loading transcript...
[2/4] Summarizing meeting with Groq...
[3/4] Extracting action items with Groq...
[4/4] Dispatching calendar and email actions...
- Calendar created: Launch Plan Follow-up
- Email sent: you@example.com
Done. Saved report to meeting_report.md
Report output:
meeting_report.md
The report includes:
- summary JSON
- action items table
- dispatch results
- full transcript
After setup, yes, it is an automated pipeline.
You still provide the input file and choose the recipient email, but the meeting processing itself is automated:
audio/transcript -> summary -> actions -> calendar -> email -> report
The first Google run needs browser approval because OAuth requires your consent. After that, token.json lets future runs continue without repeating the login every time.
Use Groq instead:
python main.py --transcript transcript.txt --email you@example.com --provider groqOr use local mode:
python main.py --transcript transcript.txt --email you@example.com --provider localYour OAuth app is probably still in testing mode.
Add the Gmail account you are logging in with as a test user in the OAuth consent screen.
Mako stores event details in meeting_report.md. Check the dispatch result there first.
The calendar tool now preserves UTC time correctly, so future events should show in your local calendar timezone as expected.
FFmpeg is installed but not on PATH, or the terminal has not refreshed.
Close and reopen the terminal, then run:
ffmpeg -versionUseful upgrades for the future:
- FastAPI or Streamlit UI
- tests for JSON parsing and date handling
- report download page
- user confirmation before creating calendar events
- better handling for long meetings
- Docker setup