An AI phone agent that answers on your trunk.
Self-hosted, built on Asterisk. Point it at whatever carrier you already use — or the PBX you already run. Twilio is one option, not a requirement.
Pick what you already have. The config is what changes:
Around 915 ms from “caller stops talking” to “agent starts talking”.
Median of four consecutive calls over SIP; the spread was 780 – 1234 ms and almost all of it came from the language model, not the phone path. A 4-core VPS running Asterisk 18, 8 kHz G.711 in and out, Deepgram for speech, GPT-4o-mini for the answer. The phases overlap, which is why they do not add up: generation starts before the caller has finished, and the agent speaks on its first clause rather than its finished sentence. Interrupt it and it stops mid-word.
From a bare Ubuntu server to a signed-in panel, in one command.
Two and a half minutes, no narration, captions on screen. Every frame is the real installer and the real panel.
It starts with node, psql and
asterisk all answering “command not found”, and ends on the dashboard. The
installer prints your panel address and a password shown once; the panel then
refuses to do anything until you replace it. Nothing is seeded, and no demo account
exists on your install.
Bring your own carrier
Anything that speaks SIP reaches the same dialplan context: your local telco, a wholesale trunk, an on-prem PBX, or a GSM gateway sitting in the office.
Readable source, nothing compiled
The whole application ships as source you can open, diff and change. No obfuscated
bundles and no module you have to buy elsewhere to make it run. The purchase code is
confirmed about once a week; leave LICENSE_ENDPOINT empty and even that
stops.
Swap speech and model vendors
Speech-to-text, the model, and the voice are three separate settings. Change one without touching the others, and keep your own API keys.
Built to resell
One install, a separate login per client, and a monthly minute allowance that is actually enforced — a customer over their allowance stops being answered, and the turned-away call is logged so you can explain it.
Greets, answers, gets interrupted
Picks up speaking so nobody hears silence, answers from the brief you wrote for it, and stops mid-word the moment the caller talks over it. Every call is stored with its transcript and the exact wait before the first reply.
Books, and cannot invent a time
The times the agent offers come from the opening hours your customer filled in, checked against what is already booked, and the booking is refused if the slot has gone. A caller is never told about a Thursday at ten that does not exist.
Answers from your own price list
Paste a document or import a page and the agent quotes from it when a caller asks something the brief does not cover. Passages are matched by meaning, and the search runs while the caller is still talking, so it costs no waiting.
Translatable end to end
Interface and prompts are translatable without editing code, because “add your language” should not mean “fork the project”.
Around 2.5 cents a minute, and no expensive plan to sign up for.
Deepgram needs no plan at all. Pay-as-you-go covers everything Voxtrunk uses, and new accounts start with $200 of free credit: Nova‑3 speech is $0.0048 a minute and Aura‑2 voices are $0.030 per thousand characters spoken. The figures above assume the agent speaks for about half of each minute, which is roughly 500 characters, on a small model such as GPT‑4o‑mini. A large model can double the total, which is why the model is a dropdown.
ElevenLabs starts at Creator, $22 a month — its free tier has no commercial licence, so it is not an option for a service you charge for. What decides the tier is concurrency rather than credits, because every simultaneous call holds one synthesis stream open: 10 streams on Creator, 20 on Pro, 30 on Scale. The same minute costs about $0.06 with an ElevenLabs voice, so the sensible default is Deepgram everywhere and ElevenLabs only on the agents whose voice earns it. That is a dropdown per agent.
Your carrier’s per-minute rate and your server sit on top of all of this, and every one of these bills goes to your own account with the vendor. Nothing is resold through us. Vendor prices checked September 2026, and they move — Deepgram’s speech rate is currently discounted from $0.0077.
- There is a licence check, and here is all of it. Your purchase code is
confirmed about once a week. If it is not a valid purchase there is a fourteen-day
grace period, after which one thing stops: creating new customers and
new agents. Existing customers, existing agents and every phone call carry
on. The call path never consults the licence, and a test fails if anyone wires it in.
Leave
LICENSE_ENDPOINTempty and the check never runs at all. - You pay the providers directly. Speech and model usage is billed to your own accounts. Nothing is resold through us and there are no credits to top up here — see what a minute costs.
- You need a server. Asterisk and Node on a VPS you control. Shared hosting will not carry a phone call.
- A trunk is still a trunk. Numbers, registration and call charges come from your carrier, exactly as they do today.
- The diary is its own, not your calendar. The agent offers real free slots and books against them, and it will not invent a time — but availability is computed here rather than read from Google Calendar or an external CalDAV server. Sync into the table if you live in one; there is no two-way integration in the box.
- Not built yet: warm transfer to a person, and outbound campaigns. They are on the list and they are not in the build, so they are not claimed above.