Inspiration
When a real emergency hits a city, a fire, a flood, a building collapse, the government response can't wait for someone to open a dashboard and click "approve." But autonomous systems that skip human approval entirely create a different problem: someone real is still accountable for what gets authorized in their name, and a push notification they might never see doesn't close that gap.
We'd already built GovOS for a separate purpose — a Strands Agents-based system where autonomous agents run Delhi's real government emergency-response chain (Intel, Resource, Policy, Comms, and Orchestrator agents that read real incoming incidents and auto-authorize real government action under real delegated-authority tiers, instantly, with no human in the loop). It worked. But it left exactly the accountability gap above: decisions got made in the name of a real District Magistrate, Police Commissioner, or the DDMA (chaired by the Chief Minister) — and that person had no real way to know, unless they happened to check a screen.
CALL-E was the obvious answer: the one channel that actually reaches someone during a real crisis is a phone ringing, not another unread notification.
What it does
authority-signoff-call is the accountability layer CALL-E adds to GovOS: the moment GovOS auto-authorizes an action under a real authority tier, it places a real CALL-E phone call to that specific accountable official's own pre-registered number. The call explains the decision in plain language and asks for one thing — CONFIRM it as recorded, or OVERRIDE it. The structured result feeds into the exact same function GovOS's own dashboard "Override" button calls — the phone call isn't a separate decision path, it's another way into the one that already existed.
The same pattern generalized to a second real trigger in production: when one government office tags another on a shared incident comment and needs an urgent reply, GovOS places the same kind of call — same safe-by-default gating, same single consented number — telling them they've been tagged and a reply is needed now.
It's safe by default everywhere: with no CALLE_API_KEY, no registered phone number, or the enable flag not explicitly true, it never places a real call — it logs exactly what it would have said and returns unclear. A busy line, no answer, or an API error also resolves as unclear rather than raising, so a flaky phone line can never wedge an incident that already resolved itself autonomously.
How we built it
- The core call logic lives in
signoff_call.py, using the CALL-E Python SDK'sCalleClient.calls.create_and_wait()— wrapped inasyncio.to_thread()since it blocks internally viatime.sleep()while polling for the call to complete. - GovOS's
main.pyfires the call as a backgroundasynciotask the instant an authority-tiered approval is created (or a tagged comment is posted), so the incident response itself never blocks waiting on a phone call. - We packaged the pattern as a standalone, GovOS-independent Agent Skill (
SKILL.md,references/,assets/) plus a runnable Python app with apreview/requestCLI, and submitted it to CALL-E's community repository — documenting two integration surfaces: MCP (for an interactive coding agent placing the call on someone's behalf) and the direct SDK (for a backend service firing it autonomously, which is what GovOS actually uses). - Every example and fixture in the submission — including the dry-run script capture — is generated directly from the real running code, not hand-typed, so the docs can't drift from what the code actually says.
Challenges we ran into
- CALL-E's own safety classifier rejected our first script outright (HTTP 422): an earlier version described the decision in direct operational language ("Deploy Medical/Ambulance Unit... hospital access blocked... emergency procurement"), and CALL-E correctly flagged it as seeking "an operational decision for an active emergency or disaster response." That was CALL-E working exactly as it should — we rewrote the call script to state plainly, up front, that it's a post-hoc review of an already-recorded log entry, never a live directive, rather than relying on a classifier to infer that from context.
calle-airequires Python 3.11+, but GovOS's existing environment was pinned to 3.10 for the original hackathon submission. Rather than risk that working setup, we stood up a parallel 3.13 virtualenv alongside it.- Windows' default console codepage doesn't handle the ₹ symbol our real amount-formatting produces, which crashed a plain CLI preview — fixed properly with
stdout.reconfigure(encoding="utf-8")rather than stripping the symbol. - Getting the actual
CalleClientcall signature right without guessing — we read the installed package's source directly (inspect.getsource) rather than assuming parameter names, since a wrong guess here means a real, wasted phone call.
Accomplishments that we're proud of
- This isn't a mocked demo: we verified it against the live CALL-E API — a real call connected, the recipient's phone rang, they answered and said confirm, and GovOS's own audit trail immediately reflected
overridden_by: "Chief Minister, Government of NCT of Delhi (via phone)"on the exact approval record, resolving the incident. - The same accountability primitive turned out to generalize past its original use case — the tag-a-comment trigger came for free once the underlying pattern (one real call, one pre-consented number, framed plainly as non-emergency, safe-by-default) existed.
What we learned
- A platform's safety classifier rejecting your call script isn't a bug to route around — it's a real, working guardrail, and the fix is to make your own intent legible in plain language, not to find a way past it.
- Designing a call script for a high-stakes, autonomous government-decision context is genuinely different from a casual reminder or scheduling call: every sentence has to survive being read back in a transcript as evidence of what was actually asked and answered.
- "One real call to one pre-consented number, framed honestly" is a small enough primitive that it generalizes further than we expected — we didn't set out to build a second calling pattern, it just showed up once the first one existed.
What's next
- Extending the accountable-persona set past the Chief Minister to the District Magistrate and Police Commissioner tiers individually, each with their own registered line.
- Moving off polling (
create_and_wait) to CALL-E's webhook-based result delivery, so GovOS doesn't hold a background task open for the duration of the call. - Wiring more of GovOS's existing decision points — not just approvals and tags — through the same accountability-call pattern.
Built With
- amazon-bedrock
- amazon-web-services
- call-e
- fastapi
- framer-motion
- google-news-rss
- leaflet.js
- mapbox
- next.js
- openai
- openstreetmap-nominatim
- pydantic
- python
- react
- strands-agents-sdk
- typescript
Log in or sign up for Devpost to join the conversation.