Meeting notes: three-way parallel fan-out with structured output
Official cookbook recipe
- Industry
- Business services · Meeting notes
- Source
- Official open-multi-agent cookbook
- Stage
- Runnable example
This is an official open-multi-agent cookbook example, maintained by YuanASI. One meeting transcript goes to three agents at once: one writes a three-part summary, one extracts action items with owners according to a schema, and one judges each speaker's sentiment. The three results then go to a fourth agent, which combines them into Markdown meeting notes with four fixed sections.
Scenario
A typical scenario: after a weekly team meeting there are usually three things to do: write a summary for people who were not there, list who does what by when, and notice whether anyone is struggling and the work needs rebalancing. All three read the same transcript and do not depend on each other, yet one person working through them has to do them one after another; and action items jotted down as a paragraph are hard to import straight into a task system.
This example splits those three jobs across three dedicated agents running at the same time. The action-item and sentiment agents output JSON according to Zod schemas, and an aggregator agent combines the prose summary and the two JSON results into one report; the script also measures how much time running in parallel saves over running them one by one.
How it works
| Roles | Task DAG | Tools | Model | Deployment |
|---|---|---|---|---|
| summary | Step 1, one of three parallel branches: transcript → three-part summary (topics, decisions, risks) | None declared | claude-sonnet-4-6 / anthropic | Local script, one run with npx tsx |
| action-items | Step 1, one of three parallel branches: transcript → action-item JSON (task / owner / due_date) | None declared | claude-sonnet-4-6 / anthropic | Same |
| sentiment | Step 1, one of three parallel branches: transcript → per-speaker sentiment JSON | None declared | claude-sonnet-4-6 / anthropic | Same |
| aggregator | Step 3: once all three branches succeed and pass the parallelism check, combine them into a Markdown report | None declared | claude-sonnet-4-6 / anthropic | Same |
The models in the table are the example repository's defaults; the actual choice is made per scenario at the design stage.
All four agents go into an AgentPool(3); the three dedicated agents are launched together with Promise.all, and the pool's concurrency limit fits exactly those three. The aggregator runs only after all three return. Every agent has maxTurns: 1 and makes a single model call.
action-items and sentiment have an outputSchema: the framework appends the schema description to the system prompt, extracts JSON from the reply and validates it with Zod; if the first validation fails, it asks the model to answer again with the error message attached (validateStructuredOutput in src/agent/agent.ts). Sentiment must be one of four values, positive / neutral / negative / mixed, and each entry must carry a quote or paraphrase.
Each agent's tool registry has the built-in tools registered, but no config sets tools or toolPreset. OMA's tool grants deny by default (src/tool/grants.ts: without an explicit grant, no built-in tool is available), so this pipeline only reads the input text and never touches files or the command line.
Result
Runnable artifacts and how to verify them:
Requires an API key. The script header lists ANTHROPIC_API_KEY as the prerequisite; run it with npx tsx packages/core/examples/cookbook/meeting-summarizer.ts.
The time saved by running in parallel is visible. The script records each branch's own duration and the wall-clock time of the three running together, and prints Parallel wall time, Serial sum and Speedup; if the wall-clock time reaches 70% or more of the sum of the three durations, it prints ASSERTION FAILED and exits with code 1. It also exits with code 1 if any dedicated agent fails, if the action items or sentiment fail schema validation, or if the aggregator fails.
Tested on commit 2f1d0ff on 2026-09-23: the three branches took 13512, 20437 and 6413 ms, parallel wall-clock time was 20437 ms against a serial sum of 40362 ms, the script printed Speedup: 1.97x and passed the assertion; the final report came out in four sections, Summary / Action Items / Sentiment / Next Steps, with 7 rows in the action-item table, the four agents used 3225 input and 13125 output tokens in total, and the script printed Done. and finished normally. This test run swapped the example's committed anthropic / claude-sonnet-4-6 for DeepSeek's deepseek-flash; the rest of the logic ran unchanged.
The final artifact is the report text. The console first prints each branch's status, duration and output token count, then the Markdown notes written by the aggregator (summary, a Task / Owner / Due action-item table, one sentiment line per person, 3 to 5 next steps), and finally token usage per agent.
The example uses a fictional English engineering weekly-meeting transcript from the repository (fixtures/meeting-transcript.txt, four participants); the output is model-generated text for demonstrating and verifying the flow.
Sources
How this relates to YuanASI
The material on this page is a cookbook example in the official open-multi-agent repository, maintained by YuanASI.
If you have a real process for handling meeting or customer-conversation transcripts, and want to split summarizing, action-item extraction and sentiment reading into parallel dedicated agents that output a fixed structure and feed your own task system or collaboration tools, the matching YuanASI service is Custom AI Agent Development →
Related services
Last updated
Want to know how a workflow like this would land on your side?