by PatterAI
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.
# Add to your Claude Code skills
git clone https://github.com/PatterAI/PatterLast scanned: 5/30/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-30T15:06:28.207Z",
"npmAuditRan": true,
"pipAuditRan": true
}Patter is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by PatterAI. 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. It has 952 GitHub stars.
Yes. Patter passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/PatterAI/Patter" and add it to your Claude Code skills directory (see the Installation section above).
Patter is primarily written in Python. It is open-source under PatterAI on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh Patter against similar tools.
No comments yet. Be the first to share your thoughts!
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.
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.
Visit the docs, or jump straight to a quickstart: TypeScript · Python.
Using Claude Code, Claude Desktop, OpenClaw, Hermes, Cursor, Codex, or another AI coding agent?
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.
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.
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 });
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.
Note Patter collects anonymous, opt-out usage data (SDK version, bucketed provider/model and call facts) to help us prioritise — never call content, prompts, phone numbers, keys, or free text.
Opt out any time:
Patter(telemetry=False)(new Patter({ telemetry: false })),getpatter telemetry disable, orPATTER_TELEMETRY_DISABLED=1(also honoursDO_NOT_TRACK=1); auto-off in CI/tests. Inspect without sending:PATTER_TELEMETRY_DEBUG=1. Full details: Telemetry.
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
Thanks to all our amazing contributors!
MIT — see LICENSE.