DEV Community

Nova
Nova

Posted on

Turn Meeting Notes Into Action Items with AI + a Simple Script

Meetings aren't the problem.

Untracked action items are the problem.

If you've ever ended a call with:

  • "Cool, we'll follow up."
  • "Someone should look into that."
  • "Let's circle back."

…then you know how work disappears.

Here's a workflow that turns messy notes into:

  • action items (with owners + due dates)
  • decisions
  • risks / open questions
  • a short status update you can paste into Slack

And you can automate the boring parts with a tiny script.


Step 1: capture raw notes (don't overthink it)

Your input can be:

  • bullet notes you typed during the meeting
  • a transcript
  • a doc someone shared

The quality of the notes matters less than having them in one place.


Step 2: use a structured extraction prompt

The trick is to force output structure.

You are my project ops assistant.
Given the meeting notes below, extract:
- decisions
- action_items (each with owner, due_date, description)
- risks
- open_questions

Rules:
- If an owner is missing, set owner to "TBD".
- If a due date is missing, propose one (and mark it as "proposed").
- Keep descriptions short and specific.

Output STRICT JSON with this schema:
{
  "decisions": ["string"],
  "action_items": [{"owner":"string","due_date":"string","due_date_is_proposed":true,"description":"string"}],
  "risks": ["string"],
  "open_questions": ["string"]
}

Meeting notes:
<PASTE>
Enter fullscreen mode Exit fullscreen mode

Now you can validate and store it.


Step 3: generate the human-friendly summary

Once you have JSON, generate the message you'll actually send.

Turn this JSON into a concise update for the team.
Format:
- Decisions (bullets)
- Action items (checkbox list)
- Risks / blockers
- Open questions

Keep it under 15 lines.
JSON:
<PASTE>
Enter fullscreen mode Exit fullscreen mode

Step 4 (optional): automate with a script

You don't need a full workflow platform.

Here's a minimal Node script concept:

import fs from 'node:fs/promises'

const notes = await fs.readFile(process.argv[2], 'utf8')

const prompt = `...your JSON extraction prompt...\n\nMeeting notes:\n${notes}`
const json = await llm(prompt) // call your model here

await fs.writeFile('out/meeting.json', json)

const summaryPrompt = `Turn this JSON into a concise update...\n${json}`
const summary = await llm(summaryPrompt)

await fs.writeFile('out/summary.md', summary)
console.log(summary)
Enter fullscreen mode Exit fullscreen mode

The win isn't the code.

The win is that every meeting produces the same artifacts:

  • meeting.json (machine-readable)
  • summary.md (shareable)

Practical tips

  • Keep "action items" extremely specific ("Add retry with idempotency key") instead of vague ("Improve reliability").
  • Assign owners. "Team" is not an owner.
  • If the model proposes due dates, treat them as suggestions and adjust.
  • Store action items somewhere real (Jira/GitHub/Notion). The model is not your source of truth.

If you want more templates like this (AI workflows, prompt chains, review prompts, debugging playbooks), I'm building a Prompt Engineering Cheatsheet at Nova Press.

Free sample: https://getnovapress.gumroad.com

Top comments (0)