"Fast" dashboards, slow calls
One in-house team said their dashboards showed a fast agent while callers heard about 950 ms of silence. Each provider reports its own number. Nobody reports the whole turn.
An open-source, per-turn timeline for self-hosted LiveKit and Pipecat voice agents. It shows how long each caller waited after they stopped talking, and which step (end-of-turn detection, LLM, TTS or something else) took the time.
hold demo.One in-house team said their dashboards showed a fast agent while callers heard about 950 ms of silence. Each provider reports its own number. Nobody reports the whole turn.
To find the slow step, teams open the STT, LLM, TTS and telephony panels and line them up by timestamp. One person called that "archaeology", not observability.
LiveKit's agent insights cover LiveKit Cloud. LLM tracing tools stop at the LLM request. Teams on their own infrastructure get by with logs, Sentry and Slack.
Teams that host their own voice stack and get told the agent "feels slow".
Turn-by-turn waits measured inside your own agent process, without LiveKit Cloud.
LLM tracing does not see end of turn, first TTS byte or the gap the caller hears. Hold does.
Find the turn, the step and the milliseconds behind "it feels slow" in minutes, without matching timestamps by hand.
One call for LiveKit (attach(session, ...)) or one observer for Pipecat. It reads the metrics your framework already emits and posts them in batches from a background thread.
End of turn, LLM time to first token, TTS time to first byte, and the rest. Each turn shows whether its latency was measured or estimated, and what the bottleneck was.
p50 and p95 by agent, environment and provider/model. The slowest calls. Which step causes the slow turns. Click a call to see its waterfall.
# no accounts, no keys pip install macomore-hold # source code coming soon until it is on PyPI hold demo # 24 synthetic calls hold serve # http://127.0.0.1:8765 hold report --by model
# in your LiveKit agent from hold.collectors.livekit import attach from hold.collectors.sender import HttpSender sender = HttpSender() # $HOLD_URL collector = attach(session, sender, call_id=ctx.room.name, agent_id="support-agent", env="prod")
Not LLM tracing: Hold measures the silence between the caller's last word and the agent's first audio, per turn. It stores no prompts, transcripts or audio.
Cloud is not available yet. Prices are provisional and may change before launch.
Tell us your stack. We are looking for 3 teams running real calls to shape the hosted version with us.
We only use your email to contact you about this. Privacy.