Laravel’s AI SDK now lets you hand off agents as tools to other agents, turning the SDK into a proper orchestration layer.
Real apps rarely live in one prompt. A general support agent needs different instructions, tools, and often a different model when answering a refund question vs. a billing one. Sub-agents make that delegation a first-class concept instead of a router you hand-roll.
How it works
Return an agent from another agent’s tools() method. The parent delegates a specific task and uses the sub-agent’s response while answering the original prompt.
public function tools(): iterable
{
return [
new RefundsAgent,
];
}
Each sub-agent carries its own:
Instructions and system prompt
Tools (a RefundsAgent gets LookupOrder; the parent doesn’t need it)
Provider and model — pin a sub-agent to Anthropic with #[Provider(Lab::Anthropic)] while the parent runs on OpenAI
Configuration like temperature, max steps, or timeout
Finer control: Implement CanActAsTool on the sub-agent to define the name() and description() the parent sees. Skip it and Laravel falls back to the class basename and a generic description.
One catch: Each sub-agent invocation runs in isolation — it does not receive the parent’s conversation history. The parent has to pass a clear, self-contained task description.
Read the sub-agents docs for the full API.