Meeting Notes
Summarizer

Paste raw meeting notes and get action items, decisions, and a clean summary in seconds. Built with OpenCode in under 20 minutes.

Need to set up OpenCode first?

This guide assumes you have OpenCode and a free model provider configured. If you haven't set that up yet:

  1. Install OpenCode: curl -fsSL https://opencode.ai/install | bash
  2. Get a free API key from OpenRouter (no credit card needed)
  3. Or follow the full setup guide for detailed steps

What You'll Build

By the end of this guide, you'll have a command-line tool that takes messy, raw meeting notes and produces clean, structured output. It will:

  • Generate a 3-sentence summary of the entire meeting
  • Extract key decisions that were made during the meeting
  • List action items with owners so everyone knows who does what
  • Identify follow-up questions that still need answers
  • Output clean markdown you can paste into Slack, email, or a wiki

You paste in your notes (or point it at a text file), it gives you structured output. Then you iterate with OpenCode to customize the format for your team.

1

Create Your Project

Set up a project folder with an AGENTS.md file that tells OpenCode what kind of tool you're building.

mkdir -p ~/projects/meeting-notes
cd ~/projects/meeting-notes
mkdir -p ~/projects/meeting-notes
cd ~/projects/meeting-notes

Now create an AGENTS.md file. This is the context file that OpenCode reads to understand your project:

# Meeting Notes Summarizer

## Project Type
Python CLI tool

## Description
A command-line tool that takes raw meeting notes (from a file or stdin)
and produces a structured summary with action items, decisions, and
follow-up questions.

## Tech Stack
- Python 3.8+ (standard library only, no external deps)
- argparse for CLI interface
- Regular expressions for pattern extraction

## Conventions
- Use type hints
- Keep it in a single file for simplicity
- Output clean markdown suitable for Slack, email, or wikis
- Handle both file input and stdin (piped text)

Save this as AGENTS.md in your project folder. You can create it manually or use OpenCode:

opencode

Sample Meeting Notes

Create a test file so you have something to run the tool against. Save this as sample_meeting.txt:

Team Sync - Q2 Planning
Date: March 28, 2026
Attendees: Sarah (PM), Jake (Engineering), Maria (Design), Tom (QA)

Sarah opened the meeting and said we need to finalize the Q2 roadmap
by end of week. She mentioned the board wants to see 3 key initiatives.

Jake said the API rewrite is about 60% done and should be finished by
April 15. He needs two more engineers to hit that deadline. Sarah said
she'd talk to HR about backfilling the open positions.

Maria presented the new dashboard mockups. Everyone liked the updated
navigation but Tom raised concerns about accessibility -- the contrast
ratios on some buttons don't meet WCAG standards. Maria agreed to fix
the contrast issues by next Tuesday.

Tom brought up the regression test suite. He said 15% of tests are
flaky and it's slowing down releases. Jake suggested they pair on
fixing the top 10 flakiest tests next sprint. Tom agreed and said
he'd create tickets in Jira by Friday.

Sarah asked about the customer onboarding flow. Maria said the
redesign is blocked waiting for copy from marketing. Sarah will
ping the marketing lead today.

The team decided to ship the MVP of the new dashboard by April 30
without the analytics tab -- that can come in v2. They also agreed
to adopt weekly demo sessions starting next Wednesday.

Meeting ended at 11:15am. Next sync is Thursday at 10am.
Why AGENTS.md?
OpenCode reads this file automatically when you start it in the project directory. It gives the AI context about your project's purpose, tech stack, and conventions -- so every response is more relevant and accurate.
2

Build the Summarizer

With OpenCode running in your project folder, give it the task. One prompt builds the whole thing.

Type this into OpenCode:

Create a Python script that takes raw meeting notes as input and outputs: a 3-sentence summary, key decisions made, action items with owners, and follow-up questions

OpenCode will generate a complete Python script. To make the prompt more specific and get better results, try this expanded version:

Create a Python script called summarize.py that processes meeting notes.

It should accept input in two ways:
1. A file path: python3 summarize.py meeting.txt
2. Stdin pipe: cat meeting.txt | python3 summarize.py

The output should be clean markdown with these sections:
- Meeting title and date (extracted from the notes)
- Summary (exactly 3 sentences)
- Key Decisions (bulleted list)
- Action Items (table with columns: Task, Owner, Deadline)
- Follow-up Questions (bulleted list of unresolved items)

Use pattern matching to identify action items (look for phrases like
"will", "agreed to", "needs to", "by Friday", etc.) and extract
owner names from context.

Test it with the sample_meeting.txt file in this directory.

OpenCode will generate a complete Python script. You'll see it write the file in real time. When it's done, you'll have a working summarize.py in your project folder.

What OpenCode Generates

The output will typically include:

  • A MeetingSummarizer class with methods for each extraction task
  • Pattern matching using regex and keyword detection for action items
  • Name extraction tied to action verbs ("Sarah will...", "Tom agreed to...")
  • Deadline detection for phrases like "by Friday", "by April 15", "next Tuesday"
  • Clean markdown output with headers, tables, and bullet lists
3

Run and Iterate

Test your summarizer against the sample notes and improve it with follow-up prompts.

Run your summarizer against the sample file:

python3 summarize.py sample_meeting.txt

You should see structured markdown output like this:

# Team Sync - Q2 Planning
**Date:** March 28, 2026

## Summary
The team discussed Q2 roadmap priorities including the API rewrite,
new dashboard, and test reliability. Key blockers around staffing
and marketing copy were identified with owners assigned. The MVP
dashboard target is April 30 without the analytics tab.

## Key Decisions
- Ship dashboard MVP by April 30 without analytics tab (v2)
- Adopt weekly demo sessions starting next Wednesday
- Prioritize fixing top 10 flakiest tests next sprint

## Action Items
| Task | Owner | Deadline |
|------|-------|----------|
| Talk to HR about backfilling positions | Sarah | This week |
| Fix button contrast ratios (WCAG) | Maria | Next Tuesday |
| Create Jira tickets for flaky tests | Tom | Friday |
| Ping marketing lead about copy | Sarah | Today |
| Pair on fixing flaky tests | Jake + Tom | Next sprint |

## Follow-up Questions
- How many engineers will HR approve for the API rewrite?
- When will marketing deliver the onboarding copy?
- What's the timeline for the analytics tab in v2?

Iterate with OpenCode

Found something you want to change? Go back to OpenCode and ask. The AI remembers your project context from AGENTS.md.

# Example iteration prompts:
Add a --format flag that supports "markdown", "plain", and "html"
output formats.

Add a priority column to action items (high/medium/low) based on
urgency keywords like "today", "ASAP", "by end of week".

Save the summary to a file named meeting-summary-YYYY-MM-DD.md
with the date extracted from the notes.
Version control tip
Initialize a git repo with git init and commit after each working version. Store it on GitHub for free. That way you can always roll back if an iteration breaks something.

Example Prompts to Try

Once your basic summarizer works, try these prompts to extend it. Each one is a separate prompt you can copy and paste into OpenCode:

Add email template output so I can send the summary to my team
Extract deadlines and add them to a calendar format
Categorize discussion topics by department
Add a sentiment analysis of the meeting tone
Generate a Slack-formatted version with emoji markers for
action items, decisions, and follow-ups
Add a --watch mode that monitors a folder for new .txt files
and auto-summarizes them as they appear

Each prompt builds on the existing code. OpenCode reads the current state of summarize.py and modifies it in place.

What's Next?

You've built a working meeting notes summarizer. Here's where to go from here:

  • Use it daily: After every meeting, dump your notes into a text file and run the summarizer. Share the output with your team -- they'll appreciate the structure.
  • Integrate with your workflow: Pipe output to pbcopy (Mac) or xclip (Linux) to copy straight to clipboard. Paste directly into Slack or email.
  • Deploy it: Wrap it in a simple web interface with Flask and host it for free on Cloudflare Pages.
  • Try another agent: The setup is the same -- only the task changes. Pick your next project:

Ready for the Next Agent?

The pattern is always the same: create a folder, write AGENTS.md, give OpenCode the task. The only thing that changes is the prompt.