An orchestrator agent manages the higher-level process and delegates to sub-agents, each running in their own scoped subprocess, with their own tools and their own inner orchestration. The orchestration layer owns the handoffs, passes context, handles failures, and maintains a single audit trail across the entire system.
Sub-agents can themselves be orchestrators, coordinating further agents below them. The pattern is recursive: the same model all the way down. You don’t need custom coordination code between agents. You don’t need a separate framework to manage the system. The orchestration layer does it.
When something fails (an agent times out, a tool returns an unexpected result, a sub-agent escalates), the orchestration layer handles it. State is preserved. The system doesn’t leave cases in an inconsistent state.