the demo · two recorded calls

Watch it catch an agent talking over the caller.

Two ways to be rude on a call: talk over someone, or stop for a non-turn. This agent does both.

start here

Two recorded calls. Operator-recorded probe calls against a live voice agent on a provider's default settings, picked because they fail. Start here: uvx hotato start --demo sweeps both offline and mints a portable failure contract from the missed interruption. This page walks the same two calls in detail through the packaged battery view.

These calls exercise the Conversation dimension — turn-taking — one of the five a conversation-test scores. Not a vendor benchmark: one assistant, one configuration, one date, one scripted caller. Hotato uses it to demonstrate the threshold funnel, not to rank platforms.

01Run it

Point it at the bad agent. It fails, out loud.

fd-01 talks over a half-volume “sorry, one second.” fd-02 stops dead for a bare backchannel. One packaged command scores both and writes the report; add --fail for the failing exit code, a red build.

Caller Agent fd-01 · missed interruption talk_over 0.25s never yields onset “sorry, one second” fd-02 · backchannel yielded yields at 0.34s stops on noise yield “mhm”
fd-01 (top): caller takes the floor at the dashed line, agent keeps talking through it, never yields. fd-02 (bottom): caller only backchannels, agent yields anyway at the solid line. Same agent, opposite mistakes, both a failure to tell who’s owed the floor. Each row runs on its own timeline.

did_yield=False on fd-01: never stopped. did_yield=True on fd-02: stopped for noise. Every number here comes straight off the run. See the exact report it writes →

02The fix map

The missed interruption points at a knob you can turn.

fd-01: a dial set too conservative. Fix map names fix_class: config and parameter: change, re-run, watch green.

fix_class: config: yours to tune. Trade-off: dial up catches more false interruptions too.

03Both axes at once

When the battery fails both ways, a single dial can’t save it.

Catching a quiet interruption needs sensitivity up; ignoring a backchannel needs it down: opposite directions, one dial. Hotato names the discriminator this needs. That’s the funnel pointer’s call.

The tool’s words, as-is: “no single timing threshold separates them… a pointer to the kind of fix the failure needs, not a benchmarked claim.” No headline number, no upsell. A knob gets a knob; this gets a straight answer.

04The passing reference

A different battery, and it agrees with every label.

Not fd-01/fd-02 rescored: Hotato’s own built-in self-test, eight synthetic scenarios each pinned to an expected yield or hold. All eight agree today: exit_code=0. A pass means it stopped (or held) at the right moment.

02/07 hold the floor through backchannel and echo (did_yield=False, by design): a pass here isn’t just always yielding.

Same input, same verdict, every run, offline. Proves the plumbing. Your verdict comes from your recording, next.

That was a recorded call on defaults. Yours is one command away.

Point it at a call you have. capture pulls the dual-channel recording, scores it offline. Audio never leaves the machine.

$ uvx hotato capture --stack vapi --call-id <id>