How It Works
An orchestrator is a role, not a setting: any agent whose manifest lists sub-agents, or whose traces have children. One agent can be both an orchestrator and another’s sub-agent.
Setup
- Handoffs (OpenAI Agents SDK)
- Child traces
- Declare sub-agents
instrument() reads agent.handoffs and lists each target as a sub-agent in the orchestrator’s manifest.What Gets Captured
Each framework reads sub-agents and links child runs its own way:
On LangChain, an LLM call takes the name of its nearest enclosing chain run.
Dashboard
Agents Page
The Agents page lists sub-agents under their orchestrator, behind Show N sub-agents. An agent is listed there when the orchestrator’s active manifest names it and it has traces or LLM calls of its own.Topology Graph
An agent’s More menu has Structure, with three panels. Each hides when it has nothing to show.
The graph comes from the manifest, not from
handoff spans, and hides when no listed sub-agent has traces or calls of its own.
Status and Score Roll-Up
A child trace’s result reaches its parent:
A parent’s
eval_score blends its own score (weight 1) with each child’s (weight 0.5), and only ever goes down. A failing child turns a parent’s pass into review.
Per-Sub-Agent Datasets
Build a dataset with the sub-agent as its target, and only that agent’s LLM calls go in, even calls inside another agent’s trace:POST /api/v1/datasets/{id}/build with an empty body. Datasets has the dashboard steps and every filter.
For child traces, /api/v1/multi-agent-training/{orchestrator} has three more routes: GET /fault-attribution ranks the sub-agents that failed in the runs where the orchestrator failed, GET /subagent-dataset/{subagent} previews a sub-agent’s rows, and POST /launch starts one training job per sub-agent.
Handoff Markers
A row can hold calls from more than one agent when a build has no single agent to filter to: atrace_ids build, or a dataset with no target agent. Then each change of agent adds a marker, and each assistant message names its agent:
Version Drift Detection
Each agent with its own manifest has its own version timeline. The orchestrator’s manifest lists sub-agents by name, so a change insideflight_agent registers a new flight_agent version and leaves the orchestrator’s manifest alone. Adding or removing a sub-agent registers a new orchestrator version.
If you declare a version on a sub-agent, a major bump counts as an incompatible change for the orchestrator, and a smaller one as repairable. Manifests covers what those verdicts do.
The Structure panels show one of these for each sub-agent:
The SDK doesn’t set
manifest_ref, so Drifted appears only for a manifest you post to POST /api/v1/manifests with one.
Best Practices
- Choose child traces if you want per-sub-agent data. Handoffs put the whole run on one timeline, but give no numbers or datasets per sub-agent.
- Declare sub-agents in the manifest. The topology graph and the Agents page read the manifest, not the traces.
- Build one dataset per sub-agent, fine-tuned on its own calls.
Next Steps
Read a run
Open a trace and read its spans and LLM calls.
Datasets
Build, export and fine-tune.