Find what brokein your agent calls.Pin it into CI.
Debug a broken voice-agent call in minutes. Measured timing from the audio, completed actions from your own tool evidence. Free and MIT.
Any recording: mono, dual-channel, or a transcript.
- Free & MIT, any scale
- Byte-reproducible, gates CI
- Nothing leaves your machine
- MCP for coding agents
One call, one report, one pin.
Find it, share it, prevent it.
-
01 / FIND
Check the call
hotato check ./call.wavReads the recording and prints every incident it measured: barge-in, talk-over, dead air, latency, each with a timestamp and an id.
-
02 / SHARE
Send the report
writes hotato-output/autopsy-<pin>.htmlOne self-contained file carries the timeline and the measurements: send it to whoever owns the fix.
-
03 / PREVENT
Pin it into CI
hotato pin apx-<id>Turns one incident into a portable failure check.
hotato provere-runs it in CI and exits non-zero unless it passed.
From one recording to a CI gate.
The first three find incidents. The last two make the exit code your CI reads.
# 1. a failing call ships with the install, no recording needed hotato check --demo # 2. then a recording of your own hotato check ./call.wav # 3. or pull and analyze your recent Vapi calls hotato vapi health # 4. pin one incident as a portable failure check hotato pin apx-cc33f46fad58#2 # 5. the CI check re-runs the stored evidence hotato prove --contracts contracts exit 1
pip install hotato is the whole setup. Full walkthrough →
An incident report → Turn-taking → Say-do → Evidence → Docs → Self-host →
Frequently asked questions
What input does it need?
A call recording. Dual-channel audio, one party per channel, yields deterministic timing. Mono yields best-effort observations, each with a stated confidence. When the evidence cannot support a claim, hotato refuses with the reason. It measures turn timing and say-do, not intent. Four evidence tiers, tier 1 gates CI: the evidence page · the standard in the repo.
Account, key, or network?
None. hotato runs offline on the machine that invokes it. The core is stdlib-only Python: zero required dependencies, about 10 MiB installed, no network calls of its own. The stack commands' only egress fetches your own calls from your own provider account.
How does say-do checking work?
Timing is measured from the audio. Completed actions come from your own tool evidence: hotato ingests Vapi and OpenTelemetry traces, so what the agent said is checked against what the backend did.
How does the CI gate work?
The step's exit code is the verdict: 0 pass, 1 fail, 2 refuse. Each pinned incident is a content-addressed contract: its id carries the recording's digest, so a rerun scores the same bytes the same way.
Voice agent testing that catches what transcripts miss.
Free. MIT. No account. Your first check takes seconds.
$ pip install hotato
- MIT
- 0 runtime deps
- zero egress by default
Then: hotato check your-call.wav