Field technicians spend 30-60 minutes per job writing up the visit - often after hours, from memory. Notes get lost, reports get thin, nothing is auditable. Dictation alone cannot tell a report from a guess: "production" and "staging" servers, rack A3 and A8 all sound close enough to end up on an invoice. Of the submissions we audited (61 audited, 94 live), none published measured extraction accuracy. WHAT IT DOES: One visit, one loop: the technician starts a voice session (consent first, microphone second); every statement becomes a JSON-Schema tool call, so the incident card fills live, each field with its audit trail. Critical values - services, severity, timeline hours - are read back out loud and confirmed before they count. The session ends as evidence: CSV, print-ready PDF, JSON artifact. Audio is discarded by design. HOW WE BUILT IT: AssemblyAI Voice Agent API over a raw WebSocket (client written from the documented contract). JSON-Schema tools with catalog enums - the agent can only pick services that exist. Zero npm dependencies, Node 22, no build step. Vercel serverless issues single-use temp tokens (API key never reaches the browser). A deterministic mock channel drives CI; a metrics harness with a hand-computed oracle and a real-session driver measured 10 sessions against the live API. Born in Spanish; rewritten in English in the final 24 hours and re-measured (N=10). METRICS (N=10, failures published): turn completion 100%, severity exact 9/10, services precision/recall 100%/100%, timeline hours 80.0%, confirmation precision 71.0%, WER 0.685 word-level (a VAD segmentation artifact - the ASR hears everything) and 0.137 turn-level, both published. Evidence committed in docs/evidence/gate/. HONESTY: The demo roleplay is a deterministic replay of the mock channel, stated on screen; narration is synthetic TTS, disclosed. A pre-registered noise gate failed, so we pivoted to post-visit dictation. Privacy enforced in code: audio never stored.
Category tags: