Orchestration patterns
Choose a Team mode or Workflow based on ownership, execution order, and review requirements.
Choose the orchestration primitive from the research flow. Route a factual lookup to one specialist, broadcast a high-stakes decision to every specialist, and use a Workflow for a standardized review with an explicit step graph.
Choose an orchestration pattern
| Pattern | Primitive | Best for |
|---|---|---|
| Route | Team (route mode) | A direct question that one specialist owns |
| Coordinate | Team (coordinate mode) | Open-ended questions where a lead decides who to consult |
| Broadcast | Team (broadcast mode) | High-stakes calls where every specialist evaluates independently |
| Task | Team (tasks mode) | Multi-step jobs the team decomposes autonomously |
| Pipeline | Workflow | Reviews with an explicit sequence and error policy |
Coordinate: a lead orchestrates dynamically
A lead model decides which analysts to consult based on the question, then synthesizes.
These are composition examples adapted from the Investment Team application. Follow its clone, database, credentials, and research-loading setup for a complete application. Its agents/, teams/, and workflows/ define the components referenced here; agents/settings.py supplies shared knowledge and paths.
Import those components into your application module, or define your own before composing them. The application uses Gemini; the OpenAI variants on these pages require uv pip install "agno[openai]" and OPENAI_API_KEY as well. Shared knowledge/storage still needs the application's database and embedding-provider setup. Prose context, analyst-output variables, and local archives must be supplied by your application.
from agno.models.google import Gemini
from agno.team import Team, TeamMode
coordinate_team = Team(
id="coordinate-team",
name="Investment Team - Coordinate",
mode=TeamMode.coordinate,
model=Gemini(id="gemini-3.1-pro-preview"),
members=[market_analyst, financial_analyst, technical_analyst, risk_officer],
instructions=[
"Dynamically decide which analysts to consult based on the question.",
"Always consult the Risk Officer before any allocation decision.",
"Provide a final recommendation with a specific dollar allocation.",
],
)
response = coordinate_team.run("Should we add NVDA at a $2M position?")
answer = response.content
# The lead chooses which members to consult and synthesizes a recommendation.
# response.member_responses holds each consulted member's run.The lead receives an instruction to consult the Risk Officer. Enforce mandatory review with a Workflow step or an application-side gate.
Broadcast: independent evaluations, one synthesis
Every analyst assesses the same question independently. The lead reconciles agreement and disagreement into one call. Use this when independence reduces bias.
broadcast_team = Team(
id="broadcast-team",
name="Investment Team - Broadcast",
mode=TeamMode.broadcast,
model=Gemini(id="gemini-3.1-pro-preview"),
members=[market_analyst, financial_analyst, technical_analyst, risk_officer],
instructions=[
"All analysts evaluated this independently.",
"Note where they agree and disagree, then decide.",
"Weight the Risk Officer's concerns heavily in position sizing.",
],
)Set store_member_responses=True to persist each member's run with the team's run record.
Pipeline: explicit execution order
When a review needs an explicit execution path, a Workflow fixes the step graph. Each step's output feeds the next; independent steps run in parallel.
from agno.workflow import Parallel, Step, Workflow
investment_workflow = Workflow(
id="investment-workflow",
name="Investment Review Pipeline",
steps=[
Step(name="Market Assessment", agent=market_analyst),
Parallel(
Step(name="Fundamental Analysis", agent=financial_analyst),
Step(name="Technical Analysis", agent=technical_analyst),
name="Deep Dive",
),
Step(name="Risk Assessment", agent=risk_officer),
Step(name="Investment Memo", agent=memo_writer),
Step(name="Committee Decision", agent=committee_chair),
],
)
result = investment_workflow.run("Run a full investment review on NVDA")
# result.content is the Committee Decision; result.step_results holds each
# step in order (the Deep Dive is one StepOutput with the two analyses in
# its .steps).Teams vs Workflows
| Team | Workflow | |
|---|---|---|
| Control | A lead model decides the flow | You define the steps |
| Best for | Open-ended or adaptive research | Standardized, repeatable reviews |
| Execution path | The lead chooses members at run time | The declared step graph controls execution |
| Error handling | The lead may retry or choose another member | Each step uses its configured on_error policy |
Use Teams for adaptive exploration and a Workflow when the decision path must be explicit. Add a database to retain the run record.
Next steps
| Task | Guide |
|---|---|
| Fan specialists out at once | Parallel investigation |
| Ground every member | Grounding research |