.agents/skills/adk-workflow/references/multi-agent.md
from google.adk.agents.llm_agent import Agent
researcher = Agent(
name='researcher',
description='Researches topics.',
instruction='You research topics and provide findings.',
tools=[search_tool],
)
writer = Agent(
name='writer',
description='Writes content.',
instruction='You write content based on research.',
)
root_agent = Agent(
model='gemini-2.5-flash',
name='coordinator',
instruction=(
'Delegate research to the researcher and '
'writing to the writer.'
),
sub_agents=[researcher, writer],
)
Key rules:
model=. Sub-agents inherit it.description (used for routing).disallow_transfer_to_parent=True prevents back-transfer.disallow_transfer_to_peers=True prevents peer-transfer.For structured input/output, use task mode instead of chat transfer. See task-mode.md for full details.
from google.adk import Agent
worker = Agent(
name='worker',
mode='task', # or 'single_turn'
input_schema=WorkerInput,
output_schema=WorkerOutput,
instruction='Do work, then call finish_task.',
description='Performs structured work.',
)
root_agent = Agent(
name='coordinator',
model='gemini-2.5-flash',
sub_agents=[worker],
instruction='Delegate to worker via request_task_worker.',
)
Runs sub-agents in order, one after another:
from google.adk.agents.sequential_agent import SequentialAgent
root_agent = SequentialAgent(
name='pipeline',
sub_agents=[step1_agent, step2_agent, step3_agent],
)
Runs sub-agents concurrently:
from google.adk.agents.parallel_agent import ParallelAgent
root_agent = ParallelAgent(
name='fan_out',
sub_agents=[task_a, task_b, task_c],
)
Repeats sub-agents until exit_loop is called:
from google.adk.tools import exit_loop
from google.adk.agents.loop_agent import LoopAgent
looping_agent = Agent(
name='checker',
tools=[exit_loop],
instruction='Check the result and call exit_loop if done.',
)
root_agent = LoopAgent(
name='retry_loop',
sub_agents=[worker_agent, looping_agent],
max_iterations=5,
)
gemini-2.5-flashAgent.set_default_model('gemini-2.5-pro')from google.adk.models.lite_llm import LiteLlm
root_agent = Agent(model=LiteLlm(model='anthropic/claude-sonnet-4-20250514'), ...)
disallow_transfer_to_parent=False (default) or add explicit
transfer instructions.description fields. Make
each agent's description clearly differentiate its scope.agent.py file,
or use a shared module for sub-agents.