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

PatternPrimitiveBest for
RouteTeam (route mode)A direct question that one specialist owns
CoordinateTeam (coordinate mode)Open-ended questions where a lead decides who to consult
BroadcastTeam (broadcast mode)High-stakes calls where every specialist evaluates independently
TaskTeam (tasks mode)Multi-step jobs the team decomposes autonomously
PipelineWorkflowReviews 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

TeamWorkflow
ControlA lead model decides the flowYou define the steps
Best forOpen-ended or adaptive researchStandardized, repeatable reviews
Execution pathThe lead chooses members at run timeThe declared step graph controls execution
Error handlingThe lead may retry or choose another memberEach 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

TaskGuide
Fan specialists out at onceParallel investigation
Ground every memberGrounding research

Developer Resources