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.