All articles

Introducing Parlora: build voice AI agents with Elixir

What Parlora does, the problems it handles, and how to connect a spoken conversation to useful work in your application.

I’ve released Parlora 0.1.0, an open source Elixir framework for building voice AI agents that talk with people and perform actions through your application.

Parlora lets people talk naturally with your application while it retrieves information or performs actions. It coordinates the conversation and background work as people ask follow-up questions, change their requests, or interrupt the assistant.

You choose the voice provider, the audio channel, and the backend that performs application actions. Parlora brings them together within a session.

What problem does it solve?

A voice model provides the ability to listen and speak. A useful voice application also needs to interact with services, manage concurrent work, and respond when the person changes direction.

For example, someone asks about order 123. While the lookup is running, they say, “Actually, I meant 124.” The first lookup can still finish afterwards. Your application’s policy interprets the correction, and Parlora checks returning results against the current task before forwarding them for a spoken response.

A result can be correct for the original request and still be irrelevant to the current conversation.

Parlora provides the coordination around these interactions: backend tasks, corrections, cancellation, and result delivery. Your application supplies the policy that determines what a request means and which actions are allowed.

When you integrate a voice API directly, your application still needs to coordinate provider events, backend actions, and changes to the conversation. Parlora brings that coordination into a supervised Elixir session, alongside audio queues, playback controls, lifecycle deadlines, cleanup, and events for observing the session.

One conversation. Work in parallel.

Audio channelBrowser, phone or local audio
ParloraSession and task coordination
Voice providerListens and speaks
Your applicationBackend actions and services

Audio flows through Parlora in both directions. Your application performs the work, and its policy determines how results join the conversation.

Illustrative sequence, not a live session or measured timing. The walkthrough shows a request for application work; ordinary conversation can continue without a backend action.

Why use Parlora?

If you are building with Elixir, Parlora gives you a way to add voice interactions while keeping application logic in your existing services.

It currently supports OpenAI GPT-Live-1, Gemini Live, and Grok Voice, with audio through browser WebRTC, Twilio, Telnyx, or a local microphone and speakers.

For backend work, there are optional integrations with Jido, Sagents, and Legion. You can also implement your own backend. An action can be ordinary Elixir code, such as retrieving information or checking availability; it does not need another language model.

Those choices are independent. You can try a different voice provider while keeping your application actions, or expose a workflow through both a browser and a phone number.

Parlora focuses on full duplex speech to speech models. These models accept audio and produce spoken responses while caller audio can continue flowing. The current integrations use those capabilities directly, rather than assembling separate speech recognition, text generation, and speech synthesis services.

All audio passes through Parlora. Your application controls authorization, business rules, confirmations, and storage.

Elixir’s processes and supervision provide useful foundations for managing sessions and concurrent work. Parlora builds on those foundations to coordinate the conversation with your application.

How do you get started?

Parlora is available on Hex:

{:parlora, "~> 0.1.0"}

The first working session tutorial walks through creating a small Mix application where you ask for a demo shop’s opening hours and hear the result of a Jido action.

It includes the complete code and configuration, explains the native prerequisites, and shows how to handle session events and cleanup. You need Elixir 1.18 or later, Erlang/OTP 27 or later, and an API key for a supported voice provider.

From there, you can replace the demo action with something useful in your application.

A session brings together four pieces: an audio channel, a voice provider, a backend, and a context policy. The policy connects the conversation to your application’s rules, including how to handle follow-ups and corrections.

For a more complete example, the repository includes OrderDesk. It demonstrates order lookups, order corrections, and draft delivery instructions that require separate confirmation in the browser before saving.

Parlora is at version 0.1.0 and released under the MIT license. I’m interested in seeing how these foundations fit applications beyond the examples.

What are you using for voice AI?

If you are already building voice applications, what does your stack look like? Which models and frameworks have you chosen, and why?

I would especially like to hear which parts have required the most work: audio delivery, interruptions, connecting conversations to application actions, or keeping track of changing requests.

If you are building a voice application, give Parlora a try. I’d love to hear what you build, how it works for you, and what could be improved. Your feedback will help guide its development.

You can share feedback on GitHub or find me on X.