AdvisorSwarm¶
The AdvisorSwarm implements the advisor strategy described in Anthropic's research (April 2026). It pairs a cheaper executor model that drives the task end-to-end with a powerful advisor model consulted on-demand between executor turns.
The executor runs every turn. The advisor is on-demand — consulted between executor turns when budget allows. Both agents read from and write to the same shared conversation context. The advisor never calls tools or produces user-facing output.
This is provider-agnostic: any model supported by LiteLLM works for either role.
graph TD
A[User Task] --> B[Shared Context]
B --> C{Advisor Budget?}
C -->|Yes| D[Advisor reads context, provides guidance]
D --> B
C -->|No| E[Executor reads context, produces output]
B --> E
E --> B
E --> F{More turns?}
F -->|Yes| C
F -->|No| G[Return Result]
The swarm follows this workflow:
- User task goes into the shared conversation
- Before each executor turn, the advisor reads the full shared context and provides guidance (if budget allows)
- The executor reads the full shared context (including any advisor guidance) and produces output
- Both advisor guidance and executor output are added to the shared conversation
- Repeat for
max_loopsexecutor turns
Key Features¶
| Feature | Description |
|---|---|
| Executor-Driven Loop | The executor runs every turn — it's the main driver |
| On-Demand Advisor | Advisor is consulted between turns, not in a fixed sequence |
| Shared Context | Both agents read from and write to the same conversation |
| Budget Control | max_advisor_uses caps advisor consultations per run |
| Provider-Agnostic | Any LiteLLM-supported model works for either role |
| Custom Agents | Pass pre-configured agents with tools, MCP, or any Agent settings |
Constructor¶
AdvisorSwarm.__init__()¶
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
name |
str |
"AdvisorSwarm" |
No | Human-readable name |
description |
str |
"An executor-advisor swarm..." |
No | Description of the swarm's purpose |
executor_model_name |
str |
"claude-sonnet-4-6" |
No | Model for the executor agent |
advisor_model_name |
str |
"claude-opus-4-6" |
No | Model for the advisor agent |
executor_system_prompt |
str |
Built-in | No | System prompt for the executor |
advisor_system_prompt |
str |
Built-in | No | System prompt for the advisor |
max_advisor_uses |
int |
3 |
No | Max advisor consultations per run(). 0 = executor runs alone. |
max_loops |
int |
1 |
No | Number of executor turns |
output_type |
OutputType |
"dict-all-except-first" |
No | Format for output (dict, str, list, final, json, yaml) |
verbose |
bool |
False |
No | Enable detailed logging |
executor_agent |
Agent |
None |
No | Pre-configured Agent for execution (e.g., with tools or MCP) |
advisor_agent |
Agent |
None |
No | Pre-configured Agent for advising |
tools |
List[Callable] |
None |
No | Tools available to the executor agent only |
Raises¶
| Exception | Condition |
|---|---|
ValueError |
If max_advisor_uses < 0, max_loops < 1, or model names are empty |
Core Methods¶
run()¶
Execute the advisor-executor orchestration flow.
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
task |
str |
— | Yes | The task to accomplish |
img |
str |
None |
No | Optional single image input |
imgs |
List[str] |
None |
No | Optional list of image inputs |
Returns¶
| Type | Description |
|---|---|
Any |
Formatted conversation history according to output_type |
batched_run()¶
Run the swarm on multiple tasks sequentially.
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
tasks |
List[str] |
— | Yes | List of task strings |
Returns¶
| Type | Description |
|---|---|
List[Any] |
List of results, one per task |
Usage Examples¶
Basic Usage¶
from swarms import AdvisorSwarm
swarm = AdvisorSwarm(
executor_model_name="claude-sonnet-4-6",
advisor_model_name="claude-opus-4-6",
max_advisor_uses=3,
max_loops=1,
verbose=True,
)
result = swarm.run(
"Write a Python function that implements binary search on a sorted list. "
"Include proper error handling, type hints, and edge cases."
)
print(result)
Multi-Turn with Advisor Guidance¶
Run the executor for multiple turns, with the advisor providing guidance before each:
from swarms import AdvisorSwarm
swarm = AdvisorSwarm(
executor_model_name="claude-sonnet-4-6",
advisor_model_name="claude-opus-4-6",
max_advisor_uses=3,
max_loops=3,
)
result = swarm.run("Design and implement a REST API rate limiter in Python")
Custom Executor with Tools¶
Pass a pre-configured executor agent with tools while keeping the advisor tool-free:
from swarms import Agent, AdvisorSwarm
def write_file(filename: str, content: str) -> str:
"""Write content to a file."""
with open(filename, "w") as f:
f.write(content)
return f"Written: {filename}"
executor = Agent(
agent_name="Executor",
model_name="claude-sonnet-4-6",
max_loops=1,
tools=[write_file],
)
swarm = AdvisorSwarm(
executor_agent=executor,
advisor_model_name="claude-opus-4-6",
)
result = swarm.run("Create a Python module for string manipulation utilities")
Executor Only (No Advisor)¶
Set max_advisor_uses=0 to run the executor alone:
from swarms import AdvisorSwarm
swarm = AdvisorSwarm(
executor_model_name="claude-sonnet-4-6",
advisor_model_name="claude-opus-4-6",
max_advisor_uses=0,
max_loops=1,
)
result = swarm.run("Simple task that doesn't need advisor guidance")
Different Providers¶
The swarm is provider-agnostic. Use any models LiteLLM supports:
from swarms import AdvisorSwarm
# OpenAI models
swarm = AdvisorSwarm(
executor_model_name="gpt-4.1-mini",
advisor_model_name="gpt-4.1",
)
# Mix providers
swarm = AdvisorSwarm(
executor_model_name="gpt-4.1-mini",
advisor_model_name="claude-opus-4-6",
)
Architecture Details¶
Shared Context¶
Both agents read from and write to the same Conversation object. This mirrors the Anthropic diagram where the advisor reads the same context as the executor. On each turn:
- The advisor reads
conversation.get_str()— sees everything so far - The advisor's guidance is added to the conversation
- The executor reads
conversation.get_str()— sees the task, any prior output, and the advisor's guidance - The executor's output is added to the conversation
Advisor Budget¶
The max_advisor_uses parameter controls how many times the advisor is consulted:
max_advisor_uses |
max_loops |
Behavior |
|---|---|---|
0 |
1 |
Executor runs alone — no advisor |
1 |
1 |
Advisor guides once, executor runs once |
3 |
3 |
Advisor guides before each of 3 executor turns |
1 |
3 |
Advisor guides first turn only, executor runs 3 turns |
Multi-Turn Execution¶
When max_loops > 1, the executor runs multiple turns. Each turn, it reads the full conversation — including its own previous output and any advisor guidance — so it can build on prior work. The advisor's budget is distributed across turns: it is consulted before each executor turn until the budget is exhausted.