Voice AI · Open source
Patter: an open-source voice AI SDK
From 200+ calls with customers, developers and startups to an open-source voice AI SDK with 1,000+ GitHub stars, 126 forks and 9 contributors.
- Discovery
- 200+ customer & developer calls
- Community
- 1,063 GitHub stars · 126 forks
- Contributors
- 9 people · Open source
The problem
A phone-capable AI agent needs more than a language model. It needs a carrier, audio handling, a voice engine, tools and a way to manage the lifecycle of a real call. Developers often have to connect those pieces before they can work on the actual product.
Patter brings that voice stack into the application through one SDK. Developers can build their own agent while using a common interface for providers, call events and tools.
My contribution
I co-founded Patter and served as CEO from April to July 2026. The product grew around a concrete developer need: give an AI agent a phone number while keeping the application and its integrations under the builder's control.
I conducted more than 200 calls with customers, developers and startups. Those conversations were a central part of my work as co-founder: understanding how people were building voice agents, what they needed from the SDK and where they encountered friction.
My work spanned product discovery, developer conversations and community building alongside the engineering work. The call count represents conversations with people building or evaluating the product; the stars, forks and contributions below describe participation in the public repository.
Alongside product discovery, I worked on building the developer community. Patter attracted contributions from engineers across the voice AI ecosystem, including Telnyx, Plivo and Resemble AI. Its Python and TypeScript SDKs share a configurable voice stack and development tools for testing calls.
Engineering decisions
The SDK separates the carrier from the voice engine. Twilio, Telnyx and Plivo sit behind the telephony interface; the voice configuration can use an end-to-end realtime model, a speech-to-text → LLM → text-to-speech pipeline, or a hybrid setup. This lets an application change one layer as its requirements change.
Python and TypeScript expose the same concepts, hooks and events. Common call capabilities include tools, call transfer, guardrails and tracing. Local tunnelling and terminal-based call simulation shorten the feedback loop before a developer connects a production webhook.
What shipped
An MIT-licensed SDK with two language implementations and documented integrations across the voice stack. As of 2 October 2026, GitHub records 1,063 stars, 126 forks and 9 human contributors. Together with my 200+ discovery calls, these numbers capture both the conversations behind the product and the community participating in its development.
The SDK also offers a useful route from a local example to a deployed agent: choose a carrier and voice engine, supply the provider credentials, connect tools and observe the call lifecycle. The snippets below show the current public quickstart in both languages.
The project makes provider choice explicit. That flexibility also means the application owner is responsible for configuring credentials, deployment, observability and the behaviour of the agent in real calls. The repository and documentation are the source for current capabilities.
Architecture
- Phone network
- Twilio, Telnyx or Plivo
- Patter agent loop
- Voice engine + business tools
- Application
- Defines the agent, prompt, first message and business tools.
- Voice stack
- Runs a realtime, pipeline or hybrid voice configuration with chosen providers.
- Carrier
- Connects inbound and outbound phone calls through Twilio, Telnyx or Plivo.
- Development & tracing
- Supports local tunnels, call simulation and OpenTelemetry traces.
Python · TypeScript · Realtime voice · Telephony · OpenTelemetry
A concrete starting point
These examples follow the public SDK quickstart, reviewed on 3 October 2026. Install getpatter, configure the provider and carrier credentials, and replace the example number with your carrier number. The tunnel is for local development; production uses a stable webhook.
import { Patter, Twilio, OpenAIRealtime } from "getpatter";
const phone = new Patter({
carrier: new Twilio(),
phoneNumber: "+15550001234",
});
const agent = phone.agent({
engine: new OpenAIRealtime(),
systemPrompt: "You are a friendly receptionist for Acme Corp.",
firstMessage: "Hello! How can I help?",
});
await phone.serve({ agent, tunnel: true });TypeScript quickstart sourceimport asyncio
from getpatter import Patter, Twilio, OpenAIRealtime
async def main():
phone = Patter(carrier=Twilio(), phone_number="+15550001234")
agent = phone.agent(
engine=OpenAIRealtime(),
system_prompt="You are a friendly receptionist for Acme Corp.",
first_message="Hello! How can I help?",
)
await phone.serve(agent, tunnel=True)
asyncio.run(main())Python quickstart sourceExplore the project
Explore the project through its demo and available resources.