Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.swarms.world/llms.txt

Use this file to discover all available pages before exploring further.

Overview

The Agent class is the backbone of the Swarms framework, connecting LLMs with tools, long-term memory, and advanced autonomous capabilities. It provides a production-ready interface for building intelligent agents that can reason, use tools, handle multimodal inputs, and execute complex tasks.

Import

from swarms import Agent

Key Features

  • Tool Integration: Native support for function calling and tool execution
  • Long-term Memory: RAG-based memory system for context retention
  • Autonomous Loops: Dynamic execution with configurable stopping conditions
  • Multi-modal Support: Process text, images, and other media
  • MCP Support: Integration with Model Context Protocol servers
  • Agent Handoffs: Delegate tasks to specialized agents
  • Streaming: Real-time token streaming with callbacks
  • Fallback Models: Automatic failover to backup models
  • State Management: Autosave and state persistence

Initialization

id
str
default:"agent-{uuid}"
Unique identifier for the agent instance
agent_name
str
default:"swarm-worker-01"
The name of the agent, used for identification and logging
agent_description
str
A description of the agent’s purpose and capabilities. Shown to orchestrators when routing tasks.
system_prompt
str
The system prompt that defines the agent’s behavior and personality
llm
Any
The language model instance to use. If None, a LiteLLM instance will be created
model_name
str
default:"gpt-4.1"
The LiteLLM-compatible model identifier (e.g. "gpt-4.1", "claude-sonnet-4-6", "groq/llama-3.3-70b-versatile").
llm_args
dict
default:"None"
Extra keyword arguments forwarded to the underlying LiteLLM client.
llm_base_url
str
default:"None"
Base URL for OpenAI-compatible providers (Ollama, LM Studio, vLLM, etc.).
llm_api_key
str
default:"None"
Override API key for the LLM provider. Falls back to environment variables when unset.
fallback_model_name
str
default:"None"
Single fallback model used when the primary model fails.
max_loops
Union[int, str]
default:"1"
Maximum number of reasoning loops. Use “auto” for autonomous mode with dynamic planning
tools
List[Callable]
List of callable functions that the agent can use as tools
temperature
float
default:"0.5"
Temperature for LLM sampling (0.0 to 1.0)
max_tokens
int
default:"4096"
Maximum number of tokens in the LLM response
context_length
int
default:"16000"
Effective context window in tokens. When context_compression=True, the agent compresses memory once usage crosses 90% of this limit.
top_p
float
default:"None"
Nucleus-sampling parameter. Stripped automatically for Anthropic models when extended thinking is enabled.
dynamic_context_window
bool
default:"True"
Allow the framework to grow/shrink the per-call context budget based on token usage signals.
context_compression
bool
default:"True"
When True, the agent runs a ContextCompressor that summarises long histories at 90% of context_length so long sessions never hit the context wall.
persistent_memory
bool
default:"True"
When True, read/write MEMORY.md under the workspace so agent state survives process restarts. Set False for stateless tasks.
transforms
Union[TransformConfig, dict]
default:"None"
Optional pre/post-processing transforms applied to the conversation history.
streaming_on
bool
default:"false"
Enable basic streaming with formatted panels
stream
bool
default:"false"
Enable detailed token-by-token streaming with metadata (citations, tokens used, etc.)
streaming_callback
Callable[[str], None]
Callback function to receive streaming tokens in real-time. Use with agent.run_stream / agent.arun_stream for generator-style consumption.
interactive
bool
default:"false"
Enable interactive mode (REPL-style) — prompt the user for input between loops.
verbose
bool
default:"false"
Enable verbose logging for debugging.
print_on
bool
default:"True"
When False, suppress the agent’s printed output (Rich panels, thinking panel, etc.). Token streams via arun_stream / streaming_callback are unaffected.
output_type
OutputType
default:"str-all-except-first"
Output format: ‘str’, ‘string’, ‘list’, ‘json’, ‘dict’, ‘yaml’, ‘xml’
autosave
bool
default:"false"
Automatically save agent state during execution
dashboard
bool
default:"false"
Display agent dashboard on initialization
long_term_memory
Union[Callable, Any]
Long-term memory backend (e.g. vector database) for RAG.
fallback_models
List[str]
List of fallback models to try in order if the primary model fails.
retry_attempts
int
default:"3"
Number of retry attempts for LLM calls
retry_interval
int
default:"1"
Interval in seconds between retry attempts
stopping_token
str
Token that signals the agent to stop execution
stopping_condition
Callable[[str], bool]
Function that returns True when the agent should stop
stopping_func
Callable
Alternative stopping function
dynamic_temperature_enabled
bool
default:"false"
Enable dynamic temperature adjustment during execution
dynamic_loops
bool
default:"false"
Enable dynamic loop count adjustment (sets max_loops=“auto”)
loop_interval
int
default:"0"
Seconds to wait between consecutive loop iterations.
custom_exit_command
str
default:"exit"
Token the user can type in interactive mode to exit the loop.
preset_stopping_token
bool
default:"false"
When True, append the framework’s preset stopping marker to the system prompt.
auto_generate_prompt
bool
default:"false"
Auto-generate a system prompt from the task description when one is not provided.
user_name
str
default:"Human"
Name of the user in conversation history
saved_state_path
str
Path to save agent state
sop
str
Standard operating procedure for the agent
sop_list
List[str]
List of standard operating procedures
rules
str
Rules that govern agent behavior
planning_prompt
str
Prompt for planning phase
plan_enabled
bool
default:"false"
Enable planning phase before execution
multi_modal
bool
Enable multi-modal processing (images, etc.).
summarize_multiple_images
bool
default:"false"
When multiple images are provided, summarise them into a single context entry before invoking the LLM.
tool_call_summary
bool
default:"True"
After every tool call, run a brief LLM summary of the tool result and add it to the conversation.
tool_retry_attempts
int
default:"3"
Number of times to retry a failing tool call before giving up.
show_tool_execution_output
bool
default:"True"
Display tool inputs/outputs in the agent’s printed output.
tools_list_dictionary
List[Dict[str, Any]]
default:"None"
Pre-built OpenAI function-calling tool schemas. Use when you want to bypass the auto-generated schema.
tool_schema
ToolUsageType
default:"None"
Override tool schema used at runtime.
output_cleaner
Callable
default:"None"
Optional post-processor applied to the agent’s output before returning.
list_base_models
List[BaseModel]
default:"None"
Pydantic models registered for structured-output prompting.
mcp_url
Union[str, MCPConnection]
URL or connection object for a single MCP server.
mcp_urls
List[str]
List of MCP server URLs for connecting to multiple servers.
mcp_config
MCPConnection
Single MCP connection configuration object.
handoffs
Union[Sequence[Callable], Any]
List of agents to enable task handoffs/delegation
capabilities
List[str]
Free-form list of agent capabilities used for routing and documentation.
role
agent_roles
default:"worker"
The agent’s role within a swarm (e.g. "worker", "director").
tags
List[str]
default:"None"
Tags used to filter or categorise the agent.
use_cases
List[Dict[str, Any]]
default:"None"
Structured list of intended use cases for documentation/marketplace listings.
mode
Literal['interactive', 'fast', 'standard']
default:"standard"
Execution mode: interactive (REPL), fast (minimal logging/decoration), or standard.
marketplace_prompt_id
str
UUID of a prompt from the Swarms marketplace to use as the system prompt.
publish_to_marketplace
bool
default:"false"
When True, publish this agent to the Swarms marketplace on initialization.
skills_dir
str
Path to a directory of Agent Skills (Anthropic SKILL.md format).
selected_tools
Union[str, List[str]]
default:"all"
Tools to enable for the autonomous looper when max_loops="auto". Use "all" or a list of tool names.
react_on
bool
default:"false"
Enable ReAct-style reasoning prompting.
reasoning_prompt_on
bool
default:"True"
Whether to prepend the framework’s reasoning preamble to the system prompt.
reasoning_enabled
bool
default:"false"
Enable reasoning mode for supported models (e.g. o1, o3, Claude with extended thinking).
reasoning_effort
str
Effort level for reasoning models: "low", "medium", or "high".
thinking_tokens
int
Maximum extended-thinking budget for Claude reasoning models.
safety_prompt_on
bool
default:"false"
Prepend the framework’s safety preamble to the system prompt.
random_models_on
bool
default:"false"
Randomly select from a pool of models on each call (load-balancing/experimentation).
tokenizer
Any
default:"None"
Optional tokenizer instance used for local token counting.
load_state_path
str
default:"None"
Path from which to load saved agent state on init.

Methods

run

Execute the agent’s main loop for a given task.
def run(
    task: Optional[Union[str, Any]] = None,
    img: Optional[str] = None,
    *args,
    **kwargs
) -> Any
task
Union[str, Any]
The task or prompt for the agent to process
img
str
Optional image path or data for vision-enabled models
return
Any
Agent output formatted according to output_type configuration

call

Alternative syntax for running the agent (calls run internally).
def __call__(
    task: str,
    *args,
    **kwargs
) -> str

arun

Async version of run.
async def arun(
    task: Optional[Union[str, Any]] = None,
    img: Optional[str] = None,
    *args,
    **kwargs,
) -> Any

run_concurrent

Run a single task concurrently using the agent’s internal executor. Returns the awaited result.
async def run_concurrent(
    task: str,
    *args,
    **kwargs,
) -> Any

run_concurrent_tasks

Run a batch of tasks concurrently via a thread pool.
def run_concurrent_tasks(
    tasks: List[str],
    *args,
    **kwargs,
) -> List[Any]

bulk_run

Generate responses for multiple input sets. Each input is a dict of kwargs forwarded to run.
def bulk_run(
    inputs: List[Dict[str, Any]],
) -> List[str]

save

Save the agent’s current state to disk.
def save(
    file_path: str = None
) -> None

load

Load agent state from a saved file.
def load(
    file_path: str
) -> Agent

to_dict

Convert agent configuration to dictionary.
def to_dict() -> Dict[str, Any]

to_json

Convert agent configuration to JSON string.
def to_json(
    indent: int = 4
) -> str

to_yaml

Convert agent configuration to YAML string.
def to_yaml(
    indent: int = 4
) -> str

add_tool / add_tools

Dynamically add a tool (or list of tools) to the agent at runtime.
def add_tool(tool: Callable) -> None
def add_tools(tools: List[Callable]) -> None

remove_tool / remove_tools

Remove a previously-registered tool (or list of tools).
def remove_tool(tool: Callable) -> None
def remove_tools(tools: List[Callable]) -> None

reset

Reset the agent’s memory and state.
def reset() -> None
Display the agent’s configuration dashboard.
def print_dashboard() -> None

update_system_prompt / update_max_loops / update_loop_interval / update_retry_attempts / update_retry_interval

In-place setters for runtime reconfiguration.
def update_system_prompt(system_prompt: str) -> None
def update_max_loops(max_loops: Union[int, str]) -> None
def update_loop_interval(loop_interval: int) -> None
def update_retry_attempts(retry_attempts: int) -> None
def update_retry_interval(retry_interval: int) -> None

plan

Run only the planning phase for a task without executing.
def plan(task: str, *args, **kwargs) -> None

add_memory

Append a message to the agent’s short-term memory.
def add_memory(message: str) -> None

enable_autosave / disable_autosave / cleanup

Control the agent’s background autosave loop.
def enable_autosave(interval: int = 300) -> None
def disable_autosave() -> None
def cleanup() -> None

run_stream

Run the agent and yield response tokens one-by-one as a sync generator. The full agent loop (multi-step reasoning, tool calls, MCP, autonomous plan/execute/summary) runs in a background daemon thread; tokens are forwarded to the caller the moment the LLM emits them.
def run_stream(
    task: str,
    img: Optional[str] = None,
    **kwargs,
) -> Iterator[str]
Tool-call results are fed back into the loop automatically — tokens from each subsequent LLM turn (synthesis turn, autonomous summary phase, etc.) are streamed through as well.
for token in agent.run_stream("Analyse NVDA"):
    print(token, end="", flush=True)

arun_stream

Async generator version of run_stream. The agent loop runs in a thread executor while tokens are forwarded through an asyncio.Queue, so the caller’s event loop is never blocked.
async def arun_stream(
    task: str,
    img: Optional[str] = None,
    **kwargs,
) -> AsyncIterator[str]
import asyncio

async def main():
    async for token in agent.arun_stream("Analyse NVDA"):
        print(token, end="", flush=True)

asyncio.run(main())
Both run_stream and arun_stream work for any max_loops value (1, integer > 1 with tools, or "auto"). They stream tokens through every internal loop, including tool-call turns, synthesis turns after a tool returns, and the autonomous plan/execute/summary cycle.

Examples

Basic Usage

from swarms import Agent

# Create a simple agent
agent = Agent(
    agent_name="Financial-Analyst",
    model_name="claude-sonnet-4-6",
    max_loops=1,
    system_prompt="You are a financial analyst. Provide detailed, data-driven insights."
)

# Run a task
response = agent.run("Analyze the Q4 2024 revenue trends")
print(response)

Agent with Tools

from swarms import Agent

def search_web(query: str) -> str:
    """Search the web for information."""
    # Implementation
    return f"Search results for: {query}"

def calculate(expression: str) -> float:
    """Evaluate a mathematical expression."""
    return eval(expression)

agent = Agent(
    agent_name="Research-Agent",
    model_name="claude-sonnet-4-6",
    max_loops=5,
    tools=[search_web, calculate],
    system_prompt="You are a research assistant with web search and calculation abilities."
)

result = agent.run("Search for the population of Tokyo and calculate its growth rate")

Multi-modal Agent

agent = Agent(
    agent_name="Vision-Agent",
    model_name="claude-sonnet-4-6",
    multi_modal=True,
    max_loops=1
)

response = agent.run(
    task="Describe what you see in this image and identify any objects",
    img="path/to/image.jpg"
)

Autonomous Agent with Auto Loops

agent = Agent(
    agent_name="Autonomous-Developer",
    model_name="claude-sonnet-4-6",
    max_loops="auto",  # Enables autonomous planning and execution
    system_prompt="You are an autonomous software developer."
)

result = agent.run("Build a REST API for a todo application with authentication")
# Agent will:
# 1. Create a plan with subtasks
# 2. Execute each subtask using available tools
# 3. Generate a comprehensive summary

Agent with Streaming

def on_token(token: str):
    print(token, end="", flush=True)

agent = Agent(
    agent_name="Streaming-Agent",
    model_name="claude-sonnet-4-6",
    stream=True,
    streaming_callback=on_token,
    max_loops=1
)

response = agent.run("Write a creative story about space exploration")

Agent with Fallback Models

agent = Agent(
    agent_name="Reliable-Agent",
    fallback_models=["claude-sonnet-4-6", "gpt-5.4", "gpt-3.5-turbo"],
    max_loops=1
)

# Will try gpt-4o first, then gpt-4o-mini, then gpt-3.5-turbo if each fails
response = agent.run("Generate a market analysis report")

Agent with MCP Integration

agent = Agent(
    agent_name="MCP-Agent",
    model_name="claude-sonnet-4-6",
    mcp_url="npx -y @modelcontextprotocol/server-filesystem /path/to/directory",
    max_loops=3
)

result = agent.run("Read the contents of config.json and summarize the settings")

Agent Handoffs

# Create specialized agents
researcher = Agent(
    agent_name="Researcher",
    model_name="claude-sonnet-4-6",
    system_prompt="You are a research specialist."
)

writer = Agent(
    agent_name="Writer",
    model_name="claude-sonnet-4-6",
    system_prompt="You are a technical writer."
)

# Create coordinator with handoffs
coordinator = Agent(
    agent_name="Coordinator",
    model_name="claude-sonnet-4-6",
    max_loops=5,
    handoffs=[researcher, writer],
    system_prompt="You coordinate tasks between research and writing teams."
)

result = coordinator.run("Create a comprehensive report on quantum computing")
# Coordinator can delegate research to researcher and writing to writer

Marketplace Prompt Loading

# Load a prompt from Swarms marketplace in one line
agent = Agent(
    model_name="claude-sonnet-4-6",
    marketplace_prompt_id="550e8400-e29b-41d4-a716-446655440000",
    max_loops=1
)

response = agent.run("Execute the marketplace prompt task")
# Agent automatically loads system prompt from marketplace

Output Types

The agent supports multiple output formats via the output_type parameter:
  • "str" or "string": Returns the last response as a string
  • "str-all-except-first": Returns all responses except system prompt as string (default)
  • "list": Returns conversation as a list of messages
  • "json": Returns conversation as JSON string
  • "dict": Returns conversation as dictionary
  • "yaml": Returns conversation as YAML string
  • "xml": Returns conversation as XML string

Error Handling

The Agent class includes comprehensive error handling:
  • AgentInitializationError: Raised when agent fails to initialize
  • AgentRunError: Raised when execution fails
  • AgentLLMError: Raised when LLM encounters issues
  • AgentToolError: Raised when tool execution fails
  • AgentMemoryError: Raised for memory-related issues

Best Practices

  1. Set appropriate max_loops: Use 1 for simple tasks, higher numbers for complex reasoning, or “auto” for autonomous planning
  2. Use tools wisely: Provide well-documented tools with clear function signatures and docstrings
  3. Enable autosave for long-running tasks: Prevents data loss on interruption
  4. Configure fallback models: Ensures reliability in production
  5. Use streaming for real-time feedback: Better user experience for long-running tasks
  6. Set context_length appropriately: Prevents token limit errors
  7. Enable verbose mode during development: Helps debug issues
  8. Use agent handoffs for complex workflows: Delegate subtasks to specialized agents
  • BaseSwarm - Base class for multi-agent systems
  • BaseStructure - Foundation for swarm structures
  • Tools - Creating and using agent tools
  • Memory - Long-term memory systems