Create a Project
The setup wizard scaffolds a complete, runnable inbound voice agent — entry file, environment template, dependency manifest,.gitignore, and a README — so you go from nothing to a project you can run in under a minute. It is the fastest way to start a new Patter project, and it works the same on both SDKs.
TypeScript
Python
Run it
TypeScript
npm create getpatter fetches the matching SDK release and launches the wizard. No global install required.
Python
getpatter init is a subcommand of the getpatter CLI. If you have not installed the SDK, uv can run the wizard one-off with uvx:
pip install getpatter), call it directly:
The two voice modes
The wizard’s central choice is the voice mode. Patter has exactly two, and they trade latency for control.Realtime
One end-to-end engine owns the entire turn — it hears the caller and speaks back in a single model. Lowest latency, fewest moving parts.
Pipeline
Compose three providers yourself — speech-to-text, then an LLM, then text-to-speech. Maximum control over each stage.
Realtime
In realtime mode you choose a single engine. ElevenLabs ConvAI is itself a realtime engine — it is not a separate mode.| Engine | Notes | Required env |
|---|---|---|
OpenAIRealtime2 (default) | OpenAI Realtime 2, model gpt-realtime-2 | OPENAI_API_KEY |
OpenAIRealtime | Legacy gpt-realtime-mini | OPENAI_API_KEY |
ElevenLabsConvAI | Needs a pre-built ConvAI agent | ELEVENLABS_API_KEY, ELEVENLABS_AGENT_ID |
Pipeline
In pipeline mode you pick one provider for each of the three stages. Sensible defaults are pre-selected.| Stage | Default | Other options |
|---|---|---|
| STT (speech-to-text) | Deepgram | AssemblyAI, Cartesia, Soniox, Speechmatics, OpenAI Whisper, OpenAI Transcribe |
| LLM | Cerebras (gpt-oss-120b) | OpenAI, Anthropic Claude, Groq, Google Gemini |
| TTS (text-to-speech) | ElevenLabs | OpenAI, Cartesia, Rime, LMNT, Inworld |
On the Python SDK, providers outside the base set install via a pip extra (for example
getpatter[anthropic,cartesia]). The wizard works out which extras you need and pins them in requirements.txt automatically. The TypeScript SDK bundles every provider, so no extras are needed.What the wizard asks
The prompts are identical across both SDKs (only naming idioms differ —snake_case in Python, camelCase in TypeScript). Each step has a matching flag for non-interactive runs.
| Step | Prompt | Flag | Default |
|---|---|---|---|
| 1 | Project name (becomes the target directory) | --name <dir> | my-patter-agent |
| 2 | SDK runtime | --runtime python|typescript | prefilled to the CLI you ran |
| 3 | Voice mode | --mode realtime|pipeline | realtime |
| 4a | Realtime engine (realtime mode only) | --engine <name> | OpenAIRealtime2 |
| 4b | STT / LLM / TTS (pipeline mode only) | --stt, --llm, --tts | Deepgram / Cerebras / ElevenLabs |
| 5 | Telephony carrier | --carrier twilio|telnyx|plivo | twilio |
| 6 | API keys (written to .env) | --skip-keys | prompted, skippable |
| 7 | IDE skills to install | --ide <list>, --no-skills | prompted multi-select |
| 8 | Initialize a git repository | --no-git | yes (interactive) |
| 9 | Allow a non-empty target directory | --force | off |
--phone (E.164, for example +15550001234); leave it blank to fill in later. The wizard also reads the carrier’s phone-number env var (TWILIO_PHONE_NUMBER, TELNYX_PHONE_NUMBER, or PLIVO_PHONE_NUMBER) at runtime.
Non-interactive mode
Pass--yes (or -y) to skip every prompt and accept the defaults. Combine it with the flags above to fully script project creation:
--yes mode the wizard never prompts for API keys; it writes blank placeholders to .env for you to fill in. --skip-keys does the same in interactive mode.
What gets scaffolded
The wizard writes a small, focused project. For a TypeScript realtime project on Twilio it produces:new and an options object):
engine= for the three composed providers:
.env.
IDE skills
Optionally, the wizard installs Patter’s editor “skills” — reference material your AI coding assistant can use while you build. It is a multi-select step supportingclaude-code, cursor, copilot, and codex:
npx skills add under the hood. If Node (npx) is not available — common on Python-only machines — the step is skipped gracefully and the rest of the scaffold still completes. Use --no-skills to skip it entirely.
Next steps
Once the project is created:cdinto the new directory.- Fill in your API keys in
.env. - Install dependencies —
npm install(TypeScript) orpip install -r requirements.txt(Python). - Run it —
npm start(TypeScript) orpython main.py(Python).
tunnel=True) so your carrier can reach your local server during development.
Python Quickstart
The four-line walkthrough, credentials, and your first call.
TypeScript Quickstart
The same first call, in TypeScript.
Core Concepts
Agents, voice modes, and the audio pipeline.
Tunneling
How the dev tunnel exposes your local server to the carrier.

