
Karachi's 2015 heatwave killed more than a thousand people in one week, most of them working outdoors. The forecasts existed. They never reached the men on the scaffold. Phoning people is the obvious fix. The harder problem is that agreeing with an authoritative voice on a phone is the ordinary human response. A naive flow files that "yes" as a delivered warning, and the employer ends up holding a record full of agreement that meant nothing, which is worse than no record at all. So this agent never asks a question that "yes" can answer. It asks what you are going to do, and where you are going to sit. Understanding counts as established only when the worker says something showing comprehension, and their own words are stored beside the judgement, so a reviewer can check the call rather than trust it. Every fact starts null, meaning not established, which is a different state from false: a call that drops before the water question must never record that the worker had no water. Water and shade are carried separately, because a bottle in your hand with nowhere out of the sun is not a safe worker. Someone who says he cannot stop, and why, is filed as its own outcome rather than a partial success. "I am paid per floor" is the most useful thing a call can learn. Dizziness, nausea or confusion abandons the script on the spot and escalates to a human. Built on the AssemblyAI Voice Agent API: one WebSocket carrying audio both ways, transcripts and tool calls, PCM16 at 24 kHz, four function tools writing the record as the call runs. Live at heat-warning-agent.vercel.app, with a real microphone call and a scripted one that needs no key. Public repo, MIT, 23 unit tests plus an end-to-end suite that runs a real session against the deployment. Limits, stated plainly. AssemblyAI's streaming models do not include Urdu, so Urdu speakers are served by the Hindi model, an approximation that is documented as one. Telephony is not wired up; calls run in the browser.
30 Sep 2026