One call, two ways
A caller phones a salon to book a haircut. Here is what goes wrong on a plain agent, and what the library does instead.
Each row is a few lines of code to fix, once you know it happens. Most teams
find out on a live call, one row at a time.
Three reasons to use it
- One agent on both frameworks. State, tasks, tools, prompts and traces behave the same on LiveKit and Pipecat. 90 shared test scenarios check it on every change. You can switch frameworks without rewriting the agent.
- The model cannot break your data. Each value has a type. A save that does not fit is refused with a reason the model can act on. Values the caller has not confirmed stay out of the prompt.
- What real calls taught us, built in. Pauses, interruptions, idle callers, slow tools, failing providers, transfers and handoffs. Each feature page starts with what it fixes.
Where each part helps
When you don’t need it
- One agent on one framework, with a few tools and no values to collect.
- You already built and tested your own answers to the rows above.