Skip to content

PatterAI/Patter

Repository files navigation

Patter SDK

Patter SDK

PyPI npm MIT License Python 3.11+ TypeScript 5+

AboutHow It WorksDocumentationQuickstartSkillsTemplates


About

Patter is the open-source SDK that gives your AI agent a phone number. You build the agent; Patter handles everything between it and the phone network — the agent loop, the language model, speech-to-text, text-to-speech, real-time voice, audio processing, and the telephony carrier.

  • Build with one API in Python or TypeScript — same surface, same hooks, same events, at full parity.
  • Choose the provider for every layer — LLM, STT, TTS, realtime engine, carrier — and swap any of them with one line.
  • Run locally with a built-in tunnel and dashboard, or simulate a whole call from your terminal — no phone required.

How It Works

Patter is the full voice stack between your application and the phone network — not just glue between an LLM and a carrier. It runs the agent loop and owns every layer of the call, and you pick the provider for each one. Compose them in Realtime, Pipeline, or Hybrid mode.

27+ provider integrations across the voice stack · 3 voice modes · 2 SDKs (Python & TypeScript) at parity.

Layer Choose from
LLM — text generation OpenAI · Anthropic · Google Gemini · Groq · Cerebras
STT — speech-to-text Deepgram · AssemblyAI · Cartesia · Soniox · Speechmatics · Whisper
TTS — text-to-speech ElevenLabs · OpenAI · Cartesia · LMNT · Rime · Telnyx
Realtime — all-in-one voice OpenAI Realtime · Gemini Live · Ultravox · ElevenLabs ConvAI
Telephony — phone carriers Twilio · Telnyx · Plivo
Audio — VAD & suppression Silero VAD · Krisp · DeepFilterNet

On top of the stack: an automatic LLM fallback chain (provider failover mid-call), built-in tools / call transfer / guardrails that behave identically on every carrier, and a vendor-neutral OpenTelemetry trace of each call.

Documentation

Visit the docs, or jump straight to a quickstart: TypeScript · Python.

Skills for Coding Agents

Using Claude Code, Claude Desktop, OpenClaw, Hermes, Cursor, Codex, or another AI coding agent?

Install Patter skills for voice agents →

npx skills add patterai/skills

The bundle works in ~55 agent harnesses that consume the Anthropic Agent Skills standard. Install once; every agent on your machine learns the SDK. Skills live in their own repository: PatterAI/skills.

Quickstart

Provider and carrier credentials are read from environment variables (e.g. TWILIO_ACCOUNT_SID, OPENAI_API_KEY) — the docs list the full catalog. Swap Twilio for Telnyx or Plivo to change carrier.

TypeScript

npm install getpatter
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 });

Python

pip install getpatter
from getpatter import Patter, Twilio, OpenAIRealtime

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)

tunnel: true spawns a Cloudflare quick tunnel and points your number at it — ideal for local dev. For production, use a static webhook_url (or ngrok); see Tunneling.

Anonymous Telemetry

Patter collects completely anonymous, opt-out usage telemetry so the maintainers can see how the SDK is used in aggregate — which engines, providers, models, and carriers people choose — and prioritise accordingly. It is on by default, following the open-source norm (Next.js, Astro, Homebrew). No data we collect is personally identifiable, and none of it ever contains call content.

What we collect (coarse and bucketed):

  • SDK version, language (Python/TS), OS family, CPU arch, and runtime version.
  • A random anonymous install id (a UUID, not tied to you) and a per-run id, plus the upgrade funnel (previous → current version) and a first-run activation marker.
  • Deploy shape: container / serverless / cloud / package-manager presence, and whether an AI coding agent invoked the SDK.
  • The composed stack — provider vendor and a sanitized model token per layer (e.g. anthropic-claude-haiku-4-5, deepgram-nova-3).
  • Agent shape: bucketed tool counts, integration category, and which coarse features are enabled.
  • CLI commands invoked (the command name only) and per-call facts: inbound vs outbound, outcome, error code (the code, never the message), duration, latency, cost, and a bucketed turn count.

What we never collect: phone numbers, transcripts, audio, prompts, tool arguments, API keys, customer identifiers, IPs (dropped at the collector), hostnames, file paths, or any free text. Custom or self-hosted model names and custom tool names are structurally impossible to send — they collapse to a vendor bucket or other before anything leaves the process.

Opt out anytime — any one of:

  • Patter(telemetry=False) / new Patter({ telemetry: false })
  • getpatter telemetry disable (persisted; re-enable with getpatter telemetry enable)
  • PATTER_TELEMETRY_DISABLED=1, or the cross-tool standard DO_NOT_TRACK=1

It is auto-disabled in CI and test runs. Inspect exactly what would be sent, without sending it: set PATTER_TELEMETRY_DEBUG=1 (prints each event to stderr and sends nothing), or run getpatter telemetry status. Full details: Telemetry.

Templates

Each template is a self-contained repo — clone, add your .env, and run. Python and TypeScript both included.

Template Description Repo
Inbound Agent Answer calls as a restaurant booking assistant patter-inbound-agent
Outbound Calls Place calls with AMD and voicemail drop patter-outbound-calls
Tool Calling CRM lookup + ticket creation via webhook tools patter-tool-calling
Custom Voice Pipeline mode: Deepgram STT + ElevenLabs TTS patter-custom-voice
Dynamic Variables Personalize prompts per caller using CRM data patter-dynamic-variables
Custom LLM Bring your own model patter-custom-llm
Dashboard Real-time monitoring with cost + latency tracking patter-dashboard
Production Setup Everything enabled: tools, guardrails, recording, dashboard patter-production
git clone https://github.com/PatterAI/patter-inbound-agent
cd patter-inbound-agent
cp .env.example .env    # fill in your keys
cd python && pip install -r requirements.txt && python main.py

Star History

Star History Chart

Contributors

Thanks to all our amazing contributors!

License

MIT — see LICENSE.

About

Open-source voice-AI SDK. The Vapi/Retell alternative for builders who want to own the stack. Give your AI agent a phone number in 4 lines — Python and TypeScript, MIT licensed, Twilio, Telnyx, and Plivo.

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors