We built an agentic meeting-notes system.
Upload a recording and the AI decides for itself, producing accurate meeting notes — an autonomous agent.
It is not a tool that takes audio and spits out a summary in one shot. It figures out what is missing and asks back, learns your organization's vocabulary, and finalizes the notes only when it is ready — closer to a capable colleague working alongside you.
One major thread in recent AI is the autonomous agent (agentic system). Give it a goal and it picks its own tools, decides, and asks back when stuck — the flagship being the general-purpose autonomous agent OpenClaw.
MeetClaw takes OpenClaw's operating principle (a ReAct agent) as-is, but specializes it for one job: writing meeting notes.
Most tools follow a fixed "audio → transcribe → summarize" pipeline — MeetClaw is different because it is an agent.
When it doesn't know, it doesn't assume — it checks with you.
It stores people, terms, and rules as organizational memory, and even references past notes via RAG.
The more meetings pile up, the less it asks back and the more consistent it becomes.
Control flow is handed to the LLM rather than to code — the key line between a "workflow" and an "agent."
| Fixed workflow | MeetClaw (ReAct agent) | |
|---|---|---|
| Control flow | Branches hard-coded in advance | The AI decides each turn |
| Adding a behavior | New nodes/edges (structural change) | Add one tool |
| Asking back vs. working | Separate stages | Naturally interleaved in one flow |
| Adaptability | Only anticipated scenarios | Handles unexpected turns by combining tools |
The AI holds 7 tools in hand and combines them freely as the meeting context demands.
| Ability | Tool | What it does |
|---|---|---|
| 👁 Observe | extract_transcript_signals | Re-confirms cues for attendees, companies, dates, and figures from the transcript |
| ✍ Record | update_collected_info | Builds up meeting metadata (date, attendees, speaker cues, context) |
| 🧠 Learn | write_memory | Stores new people, companies, terms, rules, and forbidden labels to long-term memory |
| 🧠 Learn | update_memory | Updates selected fields of an existing memory entry |
| 🧠 Learn | delete_memory | Deactivates memory that no longer holds |
| 🛡 Verify | detect_ambiguities | Flags risky ambiguities and queues them for user confirmation |
| ✅ Finalize | commit_minutes | Declares collection/resolution complete and triggers notes generation |
Every meeting is different, but an organization's vocabulary repeats — tell it once and the next meeting uses it automatically.
| Category | What it remembers | Required / optional fields |
|---|---|---|
| person | Person — real name, org, role, aliases, speaking cues | canonical / org, role, aliases, … |
| company | Company / organization — full name, short name | name / description, aliases |
| term | Term / acronym definitions | definition / aliases |
| writing_rule | Writing rules to always apply | rule / examples |
| forbidden_label | Expressions never to use in the notes | pattern / replacement, reason |
Two scopes — org-shared (org): a common pool for members (isolated from other orgs) · personal (user): applies only to you
Memory CRUD is exposed as the agent's tools — learning happens in the very conversation where notes are written.
It picks up to 3 ambiguities (speaker, decision owner, assignee, date, term) and asks about them one by one, moving on only once all are resolved. "If you don't know, don't write it."
Even when several tools are called in one turn, a custom sequential node runs and threads them one at a time to avoid state-channel conflicts.
A PostgreSQL checkpointer (PostgresSaver) persists conversation state to the session thread — context survives multi-worker runs and restarts.
A cap of 12 iterations is the last bolt against a runaway autonomous loop.
Based on a 60-minute meeting, savings vs. manual work (varies with meeting length and attendee count).
| Task | Before (manual) | After (MeetClaw) | Savings |
|---|---|---|---|
| Writing the notes | 30–60 min | 5–10 min | ~80% |
| Saving & sharing files | 5–10 min each | Under 1 min | ~85% |
| Reviewing & editing notes | 15–30 min | Under 5 min | ~75% |
| Organizing Drive folders | 3–5 min each | Automatic | 100% automated |
LangGraph (StateGraph · tool loop · PostgresSaver) · LangChain · LangSmith
Gemini 2.5 Pro (reasoning + generation) · Gemini Flash (lightweight memory filter)
Whisper (transcription) · OpenAI text-embedding-3-large (3072 dims)
Django 4.2 · DRF · gunicorn multi-worker
PostgreSQL + pgvector (semantic search) · psycopg 3
huey (task queue) · standarda-core (Google API client)
Design principle — "use the right model for the job": heavy reasoning on 2.5 Pro, light classification on Flash, transcription on Whisper
Move from synchronous responses to streaming — so the UI never looks frozen on long replies.
Once memory exceeds 30 entries, select via embedding top-k instead of an LLM filter.
An agent that gets smarter as meetings pile up