Drop in a recording or a transcript. It writes the summary, pulls out every commitment that was made, works out who owns each one and when it's due, then sends each person a message containing only their items. Anything it can't confidently assign is flagged before a single task goes out.
Two ways in, two agents running at once, and a check for unowned work before anyone is told to do anything.
two ways in
then, on one transcript
A recording from whatever platform the team already uses, or a raw transcript if one exists. Both are accepted, which matters more than it sounds — the moment a tool requires a particular calendar integration or a bot invited to every call, half the meetings stop going through it.
audio file or transcript · no per-meeting setupAudio becomes text, and speaker diarisation separates who said what. That second half is not a transcript nicety — it's the thing that makes ownership assignable later. A transcript that knows a commitment came from a specific speaker is a task; one that doesn't is a paragraph.
Whisper API · pyannote.audio speaker diarisationOne writes the summary — the topics, the context, and the decisions, in plain English for someone who wasn't in the room. The other goes looking for commitments: every task, promise, and follow-up that was actually said out loud. They run simultaneously because they're answering different questions about the same hour.
Claude API · summary writer + action extractorEach action item gets matched to a known team member by name, role, or the way people actually refer to each other mid-conversation. Timeframes get resolved into real dates, so "by end of week" and "before the launch" become something a calendar can hold. Formal decisions are captured separately from tasks, because a decision isn't work — it's the record of why the work exists.
Claude API · owner matching · deadline parsing · decision logIf every item has a clear owner, the run proceeds on its own. If any item doesn't, a warning goes out flagging exactly which ones need a human decision before tasks are created. Orphaned work is the specific failure this whole system exists to prevent, so quietly assigning an item to a best guess would defeat the point.
owner validation gate · flagged before dispatchEach owner receives a direct message listing their items, each with its deadline and enough meeting context to make sense of it a day later. Nobody scrolls a shared document looking for their name. The complete record — summary, all items, decisions — is persisted, so the meeting stays searchable and each person's outstanding work can be pulled up on its own.
Slack direct messages · Postgres meeting recordMost of the commitments in a real meeting are made in the first person and never repeat the speaker's name. Strip the speaker labels out and you're left with a wall of text containing genuine obligations and no way to route any of them — which is precisely the state an unprocessed meeting already leaves you in. Knowing who was talking is what turns transcription into assignment.
Five distinct outputs, kept separate on purpose — they're read by different people at different times.
Topics, context, and the reasoning, written for someone who wasn't there. This is the artefact that replaces "can you catch me up?" the following morning.
Not just the ones written on a whiteboard — the ones said in passing, which are the items that historically evaporate the moment the call ends.
Matched to real team members rather than to whatever name appeared nearest in the text. Where the match isn't confident, the item is held back rather than mis-assigned.
"Next week", "before the launch", "end of month" all become actual dates. A deadline that can't be sorted or reminded on isn't a deadline.
Decisions are logged apart from tasks because they serve a different purpose — nobody needs to do them, but in three months someone will need to know they were made and why.
Transcription in, a fan of agents across the middle, and a gate before anything reaches a person.
Audio becomes text with speaker labels attached. A supplied transcript skips this tier entirely and joins the run at the same point.
Produces the readable account of the meeting — topics, context, and the decisions reached.
Finds every commitment in the conversation, including the ones made in passing and never written down.
Attach an owner and a real date to each item, and split formal decisions out into their own record.
Holds the run if anything is unowned, then splits the item list per person so each message contains one person's work. The full record is persisted for search and per-owner views.
Six modular blocks. The meeting source and the notification channel swap per client; the gate and the per-owner split don't.
Turns any recording into a usable transcript.
Separates who said what, so items can be owned.
Writes the account for people who weren't there.
Finds every task actually promised out loud.
Matches people, resolves vague timing to real dates.
One message per person, containing only their work.