Skip to main content
Agents can call other agents to delegate work and collect results. This enables multi-agent workflows like planner → developer → reviewer pipelines.

Use Case

A planner agent triages an issue and creates an implementation plan. It calls a dev agent to implement it, then calls a reviewer agent to review the PR.

call_agent: Fire a call

Use the call_agent tool to dispatch a task to another agent:
The call is non-blocking — the calling agent continues working immediately. The tool returns a call_id for polling.

check_call: Poll for results

Use the check_call tool to check if a call has finished:
Possible statuses: pending, running, completed (with return value), error.

return_value: Send back a result

The called agent uses return_value to send a value back to the caller:
The calling agent sees this value when it polls with check_call.

Multi-call Pattern

Fire several calls, continue working, then poll for results:
  1. Call multiple agents with call_agent — each returns a call_id
  2. Do other work while they run
  3. Poll each call_id with check_call until all complete
Do work between polls rather than polling in a tight loop.

Complete Example: SKILL.md

Here’s a planner agent that delegates to dev and reviewer:

Rules

  • No self-calls — an agent cannot call itself (the call is rejected)
  • Call depth limit — chains like A → B → C are allowed up to maxCallDepth (default: 3)
  • Queuing — if all runners for the target agent are busy, the call is queued (up to workQueueSize, default: 100)
  • No reruns — called agents do not re-run. They respond to the single call.

What the Called Agent Sees

The called agent receives an <agent-call> block in its prompt with:
  • The name of the calling agent
  • The context string passed via call_agent
The called agent’s SKILL.md should handle this trigger type:

Next steps