RxRelay

Proof, not promises.

Maya is a consent-first voice coordinator for prescription access — a case closes only when the evidence exists.

The problem

A prescription can be approved and still unreachable.

Prior authorization stalls. Inventory shifts. A form never arrives. The patient becomes the switchboard — calling pharmacy, clinic, insurer, repeating context, and still getting no answer they can trust. Voice agents look like the fix. The failure mode is subtler: an agent that says “I’ve taken care of it” and an agent that actually coordinated something look identical at the transcript layer. In medication access, that gap is the whole risk.

Patient calls pharmacy Calls clinic Calls insurer Repeats context Still no proof

PAVO routing

When speech gets risky, upgrade the whole pipeline — honestly.

Grounded in PAVO: Pipeline-Aware Voice Orchestration with Demand-Conditioned Inference Routing (VeiluKanthaPerumal & Imthathullah, TMLR 2026). The paper’s coupling cliff is empirical: a stronger LLM cannot repair a misheard authorization number once upstream ASR has already lost the fact. RxRelay implements that constraint in production voice turns — without pretending to swap between fictional multi-vendor ASR backends.

What actually upgrades on a high-demand turn

On the live TeXML path, PAVO selects a joint capture + reasoning tier. Verified turns widen the a1mobile <Gather> input from speech-only to speech dtmf, add digit capture for critical references, and route inference to a stronger reasoning model with structured confirmation — together, never one without the other.

What we do not claim

There is no runtime hop between competing cloud ASR vendors. Tier labels (edge_fast, hybrid_balanced, cloud_premium) map PAVO paper routes onto TeXML speech settings + model class + confirmation policy inside one orchestrator. The upgrade is real; the vendor carousel is not.

Fast

Low-demand intake — speech gather, compact reasoning, no protected action.

Balanced

Coordination turns — hybrid capture, tool-aware reasoning, permitted status actions only.

Verified

Coupling-cliff risk — speech + DTMF, strong reasoner, confirm-before-act on names, dates, auth numbers.

Safe stop

Clinical advice, emergencies, Rx changes, controlled inventory — human handoff, zero autonomous outreach.

PAVO demand-conditioned routing: Fast, Balanced, Verified, and Safe stop tiers
Demand score selects a joint capture + reasoning tier — safe stop is evaluated before any demand math.

Paper: openreview.net/pdf?id=zrneoIxlFx · Benchmark: vnmoorthy/pavo-bench · Implementation: src/pavo.mjs

Proof gate

An LLM never decides a case is resolved.

Resolution is a pure function over recorded state. Four checks must pass before status becomes resolved — consent, permitted action, counterpart outcome, patient notification. Partial progress stays open. A failed provider call records no action evidence. A clinic submission does not imply a ready pharmacy pickup.

consent recorded permitted action counterpart outcome patient update verified

Generic voice agent

  • Conversation ends ⇒ task done
  • One inference path for every turn
  • Failed API call still narrates success
  • No third-party attestation path

RxRelay

  • Case stays open until 4/4 proof
  • PAVO joint capture + reasoning upgrade
  • Provider failure leaves action flag false
  • Hash-chained receipts export what happened
RxRelay proof board showing deterministic close gate
The proof board is the operational surface — every flag is set by state transitions, not model text.

Product surfaces

One case file. Maya on the phone. Proof everywhere else.

RxRelay is not a transcript viewer. It is a consent-gated coordination ledger — natural inbound voice, operator tooling, counterpart attestation, and live visibility — all wired to the same proof gate. Live outbound telephony stays intentionally fail-closed until OTP allowlist and provider confirmation.

Proof board

Operator dashboard at :3000. Pick a case, walk the sandbox coordination path, watch the close gate flip only when evidence exists. PAVO lab exposes demand scores and route decisions per turn.

Counterpart portal

Magic-link attestations for pharmacy, clinic, or insurer staff. Third parties confirm blockers, PA submission, or readiness — replacing patient-spoken stand-ins with recorded counterpart facts.

Signed receipts

Hash-chained JSON receipts on case close: consent text, provider action IDs, route decisions, event chain. Pure Node crypto — verifiable without trusting model narration.

Human ops

Safe-stop and escalation paths set humanReview and block autonomous completion. Urgent medical cues, clinical advice requests, and ambiguous outcomes route to a human owner — not deeper automation.

Live SSE

Server-sent events stream case mutations to the proof board in real time. Voice turns, webhook events, and coordination actions appear without polling — the operator sees the same state the gate evaluates.

Architecture

Public blast radius: three TeXML routes.

Two processes share one case file. The Cloudflare quick tunnel reaches only voice-server.mjs — token-gated TeXML on :3001, no dashboard, no MCP, no outbound credentials in the voice request path. Dashboard, webhook seam, and MCP live on server.mjs at :3000. Shared state persists through data/cases.json via persist.mjs.

RxRelay system architecture: edge, voice process, shared core, dashboard, counterparts
Voice gateway isolation is deliberate — exposing the tunnel does not expose the full application.
Sandbox default

TELEPHONY_PROVIDER=demo — full E2E proof path with zero runtime dependencies. No real dial or SMS.

Live inbound

Real TeXML speech loop via claimed a1mobile number. Inbound voice ≠ outbound messaging until OTP allowlist + provider action id.

Fail closed

Live adapter refuses completion without provider-issued action id. Failed calls never manufacture action evidence.

Run it

Sandbox today. Call Maya when you are ready.

Clone, copy .env.example, run tests — no npm install. The sandbox walks a case from consent through pharmacy blocker, clinic submission, and verified close. Live inbound is a configuration decision: tunnel, point the number, speak naturally — outbound stays gated until you explicitly enable it.

git clone https://github.com/vnmoorthy/rxrelay.git
cd rxrelay
cp .env.example .env
npm test              # 27 tests · node:test · zero deps
npm run deck          # PPTX → deck/output/… ; HTML at deck/pitch.html
npm run dev           # proof board → localhost:3000
npm run live:inbound  # Maya TeXML :3001 → tunnel → point number

On a live call, say something like “I need help with my prescription — the pharmacy says prior auth” — Maya records scoped consent, walks the permitted path, and keeps the case open until counterpart evidence lands.

Why a1mobile should invest

Voice infrastructure that closes loops — not just conversations.

a1mobile’s stack already carries the calls. RxRelay shows what happens when TeXML speech, webhooks, and OTP-gated outreach feed a case engine that refuses to hallucinate completion. The wedge is prescription access — high-frequency, high-anxiety, coordination-heavy — where proof beats polish.

Uses your primitives natively

TeXML <Gather> speech and DTMF, number claim/point scripts, SMS OTP verification, webhook events — not a parallel telephony abstraction. PAVO upgrades map directly onto capture mode changes in the live voice loop.

Defensible differentiation

Every competitor demo ends at “the agent said done.” RxRelay exports hash-chained receipts, counterpart attestations, and a deterministic gate that partners and compliance teams can audit. That is a platform story, not a prompt-engineering story.

Research-backed routing

PAVO is peer-reviewed (TMLR 2026) with an open benchmark. RxRelay is the reference implementation for clinical-ops voice — demand-conditioned, coupling-aware, honest about what upgrades and what does not.

Shippable today

Zero runtime dependencies. CI green. Sandbox E2E proven. Live inbound path exercised. Live outbound fails closed until OTP allowlist and provider action confirmation — the safe default for a Catalyst investment conversation.