In-houseVoice AI agentsWhatsApp AI agents
Voice Agents: our platform for AI phone agents
By Sneh MehtaPublished
In productionIn short
Voice Agents is Mirai Minds' own platform for building and running AI phone agents. Teams create assistants, run inbound lines and outbound campaigns, hand live calls to a person and get structured data from every call. Each assistant runs on our Pipecat and LiveKit pipeline or on a hosted runtime such as Vapi, with Plivo or Twilio numbers.
The story
The problem
Every voice project we took on started with the same plumbing: phone numbers, a speech pipeline, campaigns, call logs, handoff, billing. Clients also wanted to try a voice agent on real calls before committing to a custom build. Building that plumbing once, and well, was cheaper than rebuilding it for each client.
What we built
- Assistants and campaigns. Teams create assistants with prompts, variants, tools and a knowledge base, then run inbound lines or outbound campaigns from a CSV, with limits on concurrent calls and a scheduler.
- A choice of runtime per assistant. Our own pipeline on Pipecat and LiveKit, or a hosted runtime such as Vapi. Speech recognition comes from Deepgram or Sarvam, voices from Cartesia or Rime, and numbers from Plivo, Twilio or Indian carriers.
- Live handoff. When an assistant asks for a person, the request appears on the workspace's dashboard; the first person to accept joins the same LiveKit room. If nobody accepts within 60 seconds, the assistant says so and offers a callback.
- Data after every call. A model reads each recording and fills structured fields: whether a person answered, whether they engaged, whether a callback was requested and for when, whether a meeting was booked, and the exact words of any conflict. A WhatsApp follow-up goes out when the assistant promised to send something.
- Integrations. An embedded Shopify app, Google Calendar, WhatsApp, Klaviyo and LimeChat, plus MCP and API-request tools for anything else.
- Workspaces and billing. Organizations, workspaces and roles keep each client's data apart, and usage runs on credits.
How it works in production
The platform runs at voice-agents.miraiminds.co and carries our client work too: iKoMatch uses it for onboarding calls, and an ethnic-wear brand for cart-recovery calls. Live call status streams to the dashboard over Socket.IO. Staging and production each deploy from a tagged, versioned release, so what runs can always be traced to a version. The approach is described under voice AI agents.
What we'd change
- Keep the judge on the production model. Our optimizer's judge runs on the same model as live calls. When the two drift apart, prompts that score well offline behave differently on the phone, so a model change on one side has to be made on both.
- Put one interface in front of every runtime earlier. Supporting hosted runtimes and our own pipeline per assistant is useful, but each runtime arrived with its own code paths. A single runtime interface from the start would have kept those differences in one place.
Stack
What it runs on
- Voice
- PipecatLiveKitDeepgramSarvamCartesiaRimeVapi
- Telephony
- PlivoTwilio
- Backend
- Node.jsTypeScriptExpressMongoDBRedisBullMQSocket.IOTypesense
- Frontend
- React 19Redux ToolkitTailwind CSS 4Vite
- Optimization
- GEPA prompt optimizerLLM judge
- Billing
- Dodo Payments