Install everything
From the EchoBench project folder, install the backend and dashboard dependencies.
make installEchoBench simulates real callers, measures what happened, and shows exactly why a voice agent passed or failed.
call_7f3a · date-correctionPassedWait, make that Wednesday instead.
Got it. I’ve updated the date before booking.
The reference suite works locally without accounts, credentials, or downloaded AI models.
From the EchoBench project folder, install the backend and dashboard dependencies.
make installOpen a terminal and start the EchoBench control plane and scenario runner.
make apiKeep the API running. Open a second terminal in the same project folder.
make dashboardVisit http://localhost:5173, select Run test suite, then open any completed call.
EchoBench executes five practical reservation scenarios and evaluates the full conversation.
Happy path
Barge-in
State update
Failure retry
Alternative offer
Your values are measured on each run and may differ by machine and provider.
A call trace combines the audio your user heard with the internal events that explain it.
Play the complete caller and agent audio.
See speech, silence, and overlapping turns.
Inspect LLM, tool, TTS, and cancellation timing.
Compare expected behavior with observed evidence.
Click any event dot in the dashboard to inspect the event at that moment.
A scenario defines what the caller wants, what changes during the call, and what a correct outcome looks like.
name: Caller changes the date
caller:
personality: impatient
goal: Correct the booking before confirmation
turns:
- text: Book a table for two Tuesday at seven.
- text: Wait, make that Wednesday instead.
interrupt: true
- text: It's Maya Shah. Go ahead.
expected:
date: Wednesday
time: 7:00 PM
party_size: 2
name: Maya Shah
conditions:
noise: coffee_shopcallerThe goal and conversational personality.
turnsWhat the caller says and when they interrupt.
expectedFacts that must reach the agent’s tool.
conditionsNoise, availability, and failure behavior.
EchoBench stays separate from the agent being tested, so it measures the experience instead of trusting internal text.
Audio in and audio out gives the most realistic test.
Optional events reveal internal latency and tool behavior.
The protocol does not require a specific model vendor.
External agents connect over WebSocket using mono PCM audio and optional JSON trace events.
{
"type": "session.start",
"session_id": "call_123",
"audio": {
"encoding": "pcm_s16le",
"sample_rate": 16000,
"channels": 1,
"frame_duration_ms": 20
}
}{
"type": "trace.event",
"session_id": "call_123",
"timestamp_ms": 812,
"name": "tool.completed",
"data": {
"tool": "create_reservation",
"status": "success",
"duration_ms": 184
}
}EchoBench is designed so callers, STT, reasoning, and speech can be local, hosted, or mixed.
Credentials are read only by the API server. They are never sent to the browser or stored in scenario files.
The CLI is ideal for CI and quick checks. The API supports custom workflows and integrations.
uv run echobench demo/healthCheck whether the API is ready.
/api/runsStart an evaluation run.
/api/runs/:idRead status and call results.
/api/calls/:idInspect one complete trace.
/api/comparisonsCompare baseline and candidate.
/api/protocol/echoValidate protocol frames.
Most problems are one of these four things.
Confirm that make api is still running and that http://localhost:8000/health returns an OK response.
Start Docker Desktop, wait until it reports that Docker is running, then retry docker compose up --build.
Refresh the dashboard. EchoBench marks interrupted runs as cancelled when the API starts again.
The system speech tool is unavailable. Tone artifacts preserve the evaluation flow; connect a TTS adapter for spoken recordings.
Five scenarios. No API key. Evidence on every result.