Meeting Minutes → Task Breakdown (Local Ollama / 4GB RAM / No API Keys)

I’ve been running n8n + Ollama self-hosted for a few weeks now (Docker, internal network.
Verified zero outbound traffic with tcpdump).
The first workflow I built was meeting minutes → task breakdown.
The reason is simple — I was doing the same thing by hand every single time.
Reading through the notes, picking out what matters, figuring out who does what by when.

The flow is: Form Trigger → Ollama Chat Model (llama3.2:3b / CPU only /
4GB RAM) → a Code node parses deadlines and assigns priority → saves as a JSON file.

I only let the LLM do extraction. Date math and priority logic live in the Code node.
A 3B model probably can’t be trusted with anything more complex than that.

Sample test input:

October 10, 2026 - Weekly Team Meeting
Attendees: Sarah, Mike, Tom, Lisa

  • Finalize the packaging design for Product A by October 25 (Sarah)
  • Conduct price negotiation with the supplier this week (Mike)
  • Submit the budget proposal for next month’s trade show by Monday next week (Tom)
  • Complete the inventory management system migration by end of November (Lisa)

Output:

[
{"index":1,"title":"Finalize the packaging design for Product A","assignee":"Sarah","deadline":"October 25","priority":"medium"},
{"index":2,"title":"Conduct price negotiation with the supplier this week","assignee":"Mike","deadline":"This week","priority":"high"},
{"index":3,"title":"Submit the budget proposal for next month's trade show","assignee":"Tom","deadline":"Monday next week","priority":"medium"},
{"index":4,"title":"Complete the inventory management system migration","assignee":"Lisa","deadline":"End of November","priority":"low"}
]

Priority is calculated from days since the meeting date (≤7 days = high / 8–30 = medium /
30+ = low). The LLM doesn’t decide this — the Code node does.

This runs on a 4GB RAM machine (no GPU). The Ollama env vars I set to avoid OOM:

OLLAMA_NUM_CTX=2048
OLLAMA_FLASH_ATTENTION=1
OLLAMA_KV_CACHE_TYPE=q8_0
OLLAMA_NUM_PARALLEL=1
OLLAMA_KEEP_ALIVE=0
OLLAMA_MAX_LOADED_MODELS=1

The last two are the important ones. The model gets unloaded from RAM the instant a
request finishes, so memory doesn’t accumulate across sequential runs.

Workflow JSON is in the reply below. Fork it, mess with it, use it.

Here’s the JSON:

Things I’d still improve:

  • For minutes over ~1500 words, split them into sections before sending to the LLM.
    A 3B model starts dropping items past that length.
  • Form Trigger is the simplest input, but swapping it for an RSS Feed Trigger or
    Webhook lets you pipe in from other sources.
  • I use qwen2.5:3b for Japanese minutes and llama3.2:3b for English.
    Same workflow structure, but the Code node logic shifts a bit per model.

Side note: the October n8n update just patched 14 vulnerabilities in a single release.
If you’re self-hosted, docker compose pull && docker compose up -d keeps you current.

If you’re building from scratch:

  1. Docker + Ollama (alpine/ollama:latest, ~70MB)
  2. n8n in Docker (I’ve got poppler-utils + mammoth installed for PDF/DOCX parsing)
  3. Set the Docker network to internal: true (no external routing exists, so no
    firewall needed)
  4. Import the JSON, point the Ollama node’s Base URL at the container IP

No API keys, no cloud, no monthly bill. Fork it and make it yours.

1 Like