FutureRouter is a call-screening agent that picks up unknown numbers, has a short live conversation with the caller, and decides in real time whether to pass the call through, send it to voicemail, or block it outright, running on real telephony infrastructure, not a mockup.
It's easy to prototype an agent against a wall of text. It's a different problem entirely to have that same agent answer a real inbound call, hold a live conversation over an audio channel with no do-overs, and make an irreversible routing decision before the caller hangs up. FutureRouter was built to prove out that second, harder problem: a LangGraph agent wired to a real telephony provider, carrying real calls to a real phone number, with an evaluation harness behind it instead of vibes.
Telnyx Call Control answers the inbound call and starts live transcription. Before the agent says a word, the caller's number is checked against that user's personal allowlist, then a global demo reputation list. A known contact short-circuits straight to pass-through, no interview needed.
For an unknown number, the agent greets the caller and asks what the call is about. Claude classifies the response turn by turn, with a classify_gate node that keeps asking follow-up questions until confidence passes 0.6, or two turns are used, whichever comes first.
Blocking a caller outright requires ≥0.75 confidence, deliberately higher than the 0.6 bar to stop asking questions. The agent would rather pass an ambiguous call through to voicemail than wrongly block someone real, a bias built into the thresholds on purpose.
The decision becomes a real Telnyx command: transfer the call to the real number, speak a decline and hang up, or route to voicemail, including a silence timeout that sends an unresponsive caller to voicemail automatically rather than holding the line open forever.
These transcripts are drawn from real test calls placed to the live FutureRouter number, replayed here so this loads instantly. The decision JSON next to each one is what the agent actually produced for that call.
Letting an LLM make an irreversible call-routing decision without first checking its judgment against known-good cases is how you end up blocking your own mother. Two layers exist specifically to catch that, run before the agent ever touched a real phone number.
8 hand-written call scenarios covering clear solicitors, clear real contacts, ambiguous callers, and multi-turn back-and-forths, run against the graph with no telephony involved: pure text in, routing decision out, scored against an expected label.
Moving to real audio surfaced failure modes no offline test could: the agent briefly transcribed its own greeting as caller speech, and solicitor-call outcomes were inconsistent run to run. Both were root-caused with structured decision logging rather than patched by guesswork, and the asymmetric confidence gate exists precisely because of what that logging showed.
A graph-based orchestration framework for LLM agents. Instead of one long prompt, the call-screening logic is a set of nodes (reputation check, classify, decide route) connected by conditional edges, so each decision point is inspectable and testable on its own.
Telnyx's programmable voice API: webhooks fire on call events (answered, speech transcribed, hung up), and the app responds with commands (speak, transfer, hang up). This is the layer that turns an LLM's output into something that actually happens to a live phone call.
The threshold that decides whether the agent asks another question or moves to a final decision. Set deliberately lower than the threshold required to block a caller, so an ambiguous call gets one more chance before anything irreversible happens.
A lookup against a per-user allowlist that happens before the LLM is ever invoked. A known contact skips the interview entirely, which also keeps the agent from spending a model call on calls that don't need one.
Two carrier-level forwarding modes offered at signup: conditional only routes a call to FutureRouter if it goes unanswered (the phone still rings first); unconditional sends every call to FutureRouter immediately, screening before the phone ever rings once.
Built to show what shipping an agentic system actually involves: a real orchestration graph, a real evaluation harness, and the unglamorous work of making it hold up against a live phone line instead of a clean demo script.