Inspiration
In May 2023, the U.S. Senate Committee on Finance released an investigation titled "Ghosts in the Network", revealing that over 80% of listed mental health providers across 12 major commercial health plans were phantom listings—unreachable, disconnected, or no longer taking patients. In parallel, CMS national audits showed that 52% of provider directory locations contained material errors.
When directories rot silently, consumers and patients bear the cost: making 10 to 15 successive calls during acute medical crises just to reach a single doctor. Traditional manual audits cost between $25 and $50 per listing and take months. We built Muster to replace manual surveys with programmatic, empirical telephony verification using autonomous voice agents at scale.
What it does
Muster ingests a directory (CSV or JSON) and programmatically places autonomous voice calls via CALL-E, asking a single benign qualifying question: "Are you currently in-network and accepting new patients?"
It isolates the callee's response, verifies operating signals, and certifies each listing:
- Present: Active staff explicitly confirms network status and open patient intake.
- Ghost: Disconnected line, wrong business, or explicit confirmation that the provider departed or retired.
- Unreachable: Terminal carrier busy, no-answer, or disconnected IVR loop.
- Uncertain: Ambiguous dialogue or early operator hangup before verification.
Every verdict is backed by an auditable verbatim cited quote and a confidence score ( c \in [0.0, 1.0] ). Muster then computes the headline mathematical Ghost Rate:
$$GR = \frac{N_{\text{Ghost}}}{N_{\text{Present}} + N_{\text{Ghost}}} \times 100$$
and the consumer access barrier multiplier:
$$N_{\text{access}} = \frac{1}{1 - \left(\frac{GR}{100}\right)}$$
where ( N_{\text{access}} ) quantifies the average number of calls a patient must dial before reaching a verified, active provider. Results stream live to a Mission Control switchboard UI where confirmed ghost nodes crack and drop away upon completion.
Evidentiary Decision Matrix
| Verdict | Meaning | Confidence | Trigger Conditions | Sample Spoken Proof |
|---|---|---|---|---|
PRESENT |
Active, verified participant | ( 0.80 - 0.98 ) | Staff confirms network participation and intake. | "Yes, we are in-network with BlueCross and currently accepting new patients." |
GHOST |
Phantom listing | ( 0.85 - 0.98 ) | Reaches wrong entity, provider departed/retired, or dead line. | "Dr. Jenkins retired three years ago. This number is now an accounting firm." |
UNREACHABLE |
Non-responsive failure | ( 0.70 - 0.90 ) | Rings without answer, busy/reorder tone, or IVR menu loop. | Carrier signal: NO_ANSWER or terminal IVR loop. |
UNCERTAIN |
Inconclusive interaction | ( 0.40 - 0.60 ) | Operator answered greeting but disconnected before verification. | "Mount Sinai Hospital, how can I direct your call? [Call Ended]" |
How we built it
- Directory Ingress: Python parser with spreadsheet formula injection protection (=, +, -, @) and E.164 pre-call anomaly detection (rejecting dummy digits and duplicate lines).
- Core Engine: Asynchronous runner with concurrency controls and a Credit Guard modal in the Web UI to prevent unintended credit consumption.
- Telephony Gateway: Subprocess client orchestrating the CALL-E CLI with a 4.0-second SIP line release cooldown, paired with an offline deterministic Mock harness.
- Evidentiary Classifier: Deterministic turn parser that isolates callee speech from assistant prompts (
get_callee_turns) to eliminate self-citation bugs. - Mission Control Switchboard: FastAPI backend with Server-Sent Events (SSE) driving a Vanilla CSS/JS switchboard with circular SVG adequacy dials and cracking ghost nodes.
- Agent Integration: Exposes a FastMCP server tool (
audit_directory) and a reusable Agent Skill for multi-agent workflows.
Challenges we ran into
- Classifier Self-Citation: Early runs matched affirmative phrases in the assistant bot's own question (e.g. "accepting new patients"), falsely classifying disconnected operator calls as
Present. We built strict callee turn isolation (get_callee_turns()) to eliminate bot self-citations. - SIP Concurrency Collisions: Simultaneous outbound cellular calls caused carrier line contention. We enforced sequential execution with a 4.0-second SIP trunk cooldown between calls.
- Cross-Platform Process Piping: Windows terminals failed on UTF-8 emoji and glyphs during subprocess capture; resolved by enforcing explicit UTF-8 decoding with character replacement fallbacks.
Accomplishments that we're proud of
- Placed verified live CALL-E phone calls to active New York clinic switchboards, validating real intake receptionists with verbatim transcript evidence.
- Achieved a zero-live-calls guarantee in automated testing: 33 unit tests execute in 0.13 seconds with 100% offline determinism.
- Submitted upstream PR #513 contributing Muster as a reusable Agent Skill to
CALLE-AI/awesome-phone-call-agents.
What we learned
Autonomous voice agents are only as reliable as their boundary classification rules. Telephony edge cases—such as multi-tier hospital IVRs, hold music, and receptionist re-routing—require conversational turn isolation rather than naive transcript text matching. Defensive CSV sanitization is also essential when exporting automated phone ledger reports.
What's next for Muster
- Multi-Sector Expansions: Pre-baking schemas for state licensing boards, commercial contractors, and marketplace vendor registries.
- Automated Carrier Webhooks: Pushing instant audit webhooks to health insurers when a provider listing is certified as a ghost.
- Scheduled Continuous Monitoring: Running periodic, non-intrusive re-audits every quarter to prevent silent directory rot.
Built With
- call-e
- css3
- fastapi
- fastmcp
- html5
- javascript
- pydantic
- pytest
- python
- rich
- sse
- telephony
- uvicorn


Log in or sign up for Devpost to join the conversation.