Run your Team by calling Team.run() or Team.arun(). Below is a flowchart that explains how the team runs:
Execution Flow Diagram
Pre-hooks execute (if configured) to perform validation or setup before the run starts.
Reasoning agent runs (if enabled) to plan and break down the task.
Context is built including system message, user message, chat history, user memories, session state, and other inputs.
Model is invoked with the prepared context.
Model decides whether to respond directly, call provided tools, or delegate requests to team members.
If delegation occurs, member agents execute their tasks concurrently (in async mode) and return results to the team leader. The team-leader model processes these results and may delegate further or respond.
Response is processed and parsed into an output_schema if provided.
Post-hooks execute (if configured) to perform final validation or transformation of the final output.
Session and metrics are stored in the database (if configured).
TeamRunOutput is returned to the caller with the final response.
In the case of streaming responses, the team leader will stream responses from the model and from members to the caller. See the Streaming section for more details.
The Team.run() function runs the team and returns the output — either as a TeamRunOutput object or as a stream of TeamRunOutputEvent and RunOutputEvent (for member agents) objects (when stream=True). For example:
Copy
Ask AI
from agno.team import Teamfrom agno.agent import Agentfrom agno.models.openai import OpenAIChatfrom agno.utils.pprint import pprint_run_responsenews_agent = Agent( name="News Agent", model=OpenAIChat(id="gpt-4o"), role="Get the latest news", tools=[DuckDuckGoTools()])weather_agent = Agent( name="Weather Agent", model=OpenAIChat(id="gpt-4o"), role="Get the weather for the next 7 days", tools=[DuckDuckGoTools()])team = Team( name="News and Weather Team", members=[news_agent, weather_agent], model=OpenAIChat(id="gpt-4o"))# Run team and return the response as a variableresponse = team.run(input="What is the weather in Tokyo?")# Print the response in markdown formatpprint_run_response(response, markdown=True)
You can also run the team asynchronously using Team.arun(). This means members will run concurrently if the team leader delegates to multiple members in one request.
See the Input & Output docs for more information, and to see how to use structured input and output with teams.
The Team.run() function returns a TeamRunOutput object when not streaming. This object contains the output content, the list of messages sent to the model, the metrics of the run, the model used for the run, and an optional list of member responses.See the detailed schema in the TeamRunOutput documentation.
To enable streaming, set stream=True when calling run(). This will return an iterator of TeamRunOutputEvent objects instead of a single TeamRunOutput object.
Copy
Ask AI
from typing import Iteratorfrom agno.team import Teamfrom agno.agent import Agentfrom agno.models.openai import OpenAIChatnews_agent = Agent(name="News Agent", role="Get the latest news")weather_agent = Agent(name="Weather Agent", role="Get the weather for the next 7 days")team = Team( name="News and Weather Team", members=[news_agent, weather_agent], model=OpenAIChat(id="gpt-4o"))# Run team and return the response as a streamstream: Iterator[TeamRunOutputEvent] = team.run("What is the weather in Tokyo?", stream=True)for chunk in stream: print(chunk.content, end="", flush=True)
When you stream a response, only the TeamRunContent events will be streamed by default.You can also stream all run events by setting stream_events=True.This will provide real-time updates about the team’s internal processes, like tool calling or reasoning:
Copy
Ask AI
# Stream all eventsresponse_stream = team.run( "What is the weather in Tokyo?", stream=True, stream_events=True)
When streaming events with stream_events=True, the team leader also streams the events from team members to the caller.When your team is running asynchronously (using arun), the members will run concurrently if the team leader delegates to multiple members in one request.This means you will receive member events concurrently and the order of the events is not guaranteed.You can disable this by setting stream_member_events=False.
Copy
Ask AI
...team = Team( name="News and Weather Team", members=[news_agent, weather_agent], model=OpenAIChat(id="gpt-4o"), stream_member_events=False)response_stream = team.run( "What is the weather in Tokyo?", stream=True, stream_events=True)
By default the TeamRunContentEvent and RunContentEvent events are not stored. You can modify which events are skipped by setting the events_to_skip parameter.For example:
Copy
Ask AI
team = Team( name="Story Team", members=[], model=OpenAIChat(id="gpt-4o"), store_events=True, events_to_skip=[] # Include all events)
If you are using your own custom tools, it will often be useful to be able to yield custom events. Your custom events will be yielded together with the rest of the expected Agno events.We recommend creating your custom event class extending the built-in CustomEvent class:
You can then yield your custom event from your tool. The event will be handled internally as an Agno event, and you will be able to access it in the same way you would access any other Agno event.
Copy
Ask AI
from agno.tools import tool@tool()async def get_customer_profile(): """Example custom tool that simply yields a custom event.""" yield CustomerProfileEvent( customer_name="John Doe", customer_email="john.doe@example.com", customer_phone="1234567890", )
You can specify which user and session to use when running the team by passing the user_id and session_id parameters.
This ensures the current run is associated with the correct user and session. For example:
Copy
Ask AI
team.run("Get me my monthly report", user_id="john@example.com", session_id="session_123")
For more information see the Sessions documentation.