# Triage and Specialist Agents — OpenAI Agent Builder Workflows

Source: https://www.skillbyai.com/en/openai-agent-builder/m-triage

> One agent routes, others resolve.

## Route first, then specialise

A common pattern is a **triage** agent (or classifier node) that decides which **specialist** should handle a request: billing, technical, account. Each specialist has narrow instructions and only its own tools. In code, the Agents SDK expresses routing as **handoffs**: the triage agent sees each specialist as a tool named like transfer_to_billing_agent and, when it calls it, the conversation continues with that agent. On a canvas, the same design is a classifier followed by an if/else node and separate agent nodes.

## Triage, specialists, composition

Split work across focused agents and connect them with clear routing.

![Three ideas: triage, composition styles, narrow agents.](assets/figures/openai-agent-builder/section-5-map.svg) — Figure 5.1 — Triage, composition and narrow agents.

## Handoffs generated by the Agents SDK, run

I ran this with Python 3, the openai-agents package 0.22.3 and pydantic 2.13.5, without any API key: it only builds definitions and schemas, no model is called. The triage agent gets two handoff tools, transfer_to_billing_agent and transfer_to_technical_agent, whose descriptions include each specialist's handoff_description. That description is what the model uses to choose.

```python
from agents import Agent, handoff

billing = Agent(name="Billing agent", instructions="Resolve billing questions.",
                handoff_description="Questions about charges, invoices and refunds")
tech = Agent(name="Technical agent", instructions="Resolve technical problems.",
             handoff_description="App errors, login problems and bugs")
triage = Agent(name="Triage agent", instructions="Route the user to the right specialist.",
               handoffs=[billing, handoff(tech)])
for h in triage.handoffs:
    h = h if hasattr(h, "tool_name") else handoff(h)
    print(f"{h.tool_name:<28} -> {h.agent_name}: {h.tool_description}")
```

Output:

```
transfer_to_billing_agent    -> Billing agent: Handoff to the Billing agent agent to handle the request. Questions about charges, invoices and refunds
transfer_to_technical_agent  -> Technical agent: Handoff to the Technical agent agent to handle the request. App errors, login problems and bugs
```

## Write handoff descriptions from the user's view

Describe which requests belong to each specialist in user language: charges, invoices, refunds, not internal team names.

**Quiz:** What does a handoff do in the Agents SDK?

- [ ] Calls a human by phone
- [ ] Deletes the conversation
- [ ] Trains a new model
- [x] Transfers the conversation to another agent, exposed to the model as a tool

*Answer:* Transfers the conversation to another agent, exposed to the model as a tool. Handoffs are routing tools.
