Back to selected work

    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
    Patter · Project demonstration

    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

    From a phone call to an agent response
    1. Phone network
    2. Twilio, Telnyx or Plivo
    3. Patter agent loop
    4. 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.

    A realtime agent in TypeScript
    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 source
    The same setup in Python
    import 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 source

    Explore the project

    Explore the project through its demo and available resources.