Skip to main content
Run your Agent by calling Agent.run() or Agent.arun(). Here’s how they work:
  1. The agent builds the context to send to the model (system message, user message, chat history, user memories, session state and other relevant inputs).
  2. The agent sends this context to the model.
  3. The model processes the input and responds with either a message or a tool call.
  4. If the model makes a tool call, the agent executes it and returns the results to the model.
  5. The model processes the updated context, repeating this loop until it produces a final message without any tool calls.
  6. The agent returns this final response to the caller.

Basic Execution

The Agent.run() function runs the agent and returns the output — either as a RunOutput object or as a stream of RunOutputEvent objects (when stream=True). For example:
You can also run the agent asynchronously using Agent.arun(). See this example.

Run Input

The input parameter is the input to send to the agent. It can be a string, a list, a dictionary, a message, a pydantic model or a list of messages. For example:
See the Input & Output docs for more information, and to see how to use structured input and output with agents.

Run Output

The Agent.run() function returns a RunOutput object when not streaming. Here are some of the core attributes:
  • run_id: The id of the run.
  • agent_id: The id of the agent.
  • agent_name: The name of the agent.
  • session_id: The id of the session.
  • user_id: The id of the user.
  • content: The response content.
  • content_type: The type of content. In the case of structured output, this will be the class name of the pydantic model.
  • reasoning_content: The reasoning content.
  • messages: The list of messages sent to the model.
  • metrics: The metrics of the run. For more details see Metrics.
  • model: The model used for the run.
See detailed documentation in the RunOutput documentation.

Streaming

To enable streaming, set stream=True when calling run(). This will return an iterator of RunOutputEvent objects instead of a single response.
For asynchronous streaming, see this example.

Streaming all events

By default, when you stream a response, only the RunContent events will be streamed. You can also stream all run events by setting stream_events=True. This will provide real-time updates about the agent’s internal processes, like tool calling or reasoning: . For example:

Handling Events

You can process events as they arrive by iterating over the response stream:
RunEvents make it possible to build exceptional agent experiences.

Event Types

The following events are yielded by the Agent.run() and Agent.arun() functions depending on the agent’s configuration:

Core Events

Control Flow Events

Tool Events

Reasoning Events

Memory Events

Session Summary Events

Pre-Hook Events

Post-Hook Events

Parser Model events

Output Model events

Custom Events

If you are using your own custom tools, you can yield custom events along with the rest of the Agno events. Create a custom event class by extending the CustomEvent class. For example:
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. For example:
See the full example for more details.

Specify Run User and Session

You can specify which user and session to use when running the agent by passing the user_id and session_id parameters. This ensures the current run is associated with the correct user and session. For example:
For more information see the Agent Sessions documentation.

Passing Images / Audio / Video / Files

You can pass images, audio, video, or files to the agent by passing the images, audio, video, or files parameters. For example:
For more information see the Multimodal Agents documentation.

Pausing and Continuing a Run

An agent run can be paused when a human-in-the-loop flow is initiated. You can then continue the execution of the agent by calling the Agent.continue_run() method. See more details in the Human-in-the-Loop documentation.

Cancelling a Run

A run can be cancelled by calling the Agent.cancel_run() method. See more details in the Cancelling a Run documentation.

Developer Resources