Skip to main content

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

The wizard asks a short series of questions, then writes the project to disk. Every question has a flag, so you can also run it fully non-interactively in CI or a script.

Run it

TypeScript

npm create getpatter fetches the matching SDK release and launches the wizard. No global install required.
You can pass flags straight through:
Equivalently, if you already have the package installed, the same wizard is exposed on the SDK CLI:

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:
If the SDK is already installed (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.
The mode you pick determines which providers the wizard offers next.

Realtime

In realtime mode you choose a single engine. ElevenLabs ConvAI is itself a realtime engine — it is not a separate mode.
EngineNotesRequired env
OpenAIRealtime2 (default)OpenAI Realtime 2, model gpt-realtime-2OPENAI_API_KEY
OpenAIRealtimeLegacy gpt-realtime-miniOPENAI_API_KEY
ElevenLabsConvAINeeds a pre-built ConvAI agentELEVENLABS_API_KEY, ELEVENLABS_AGENT_ID

Pipeline

In pipeline mode you pick one provider for each of the three stages. Sensible defaults are pre-selected.
StageDefaultOther options
STT (speech-to-text)DeepgramAssemblyAI, Cartesia, Soniox, Speechmatics, OpenAI Whisper, OpenAI Transcribe
LLMCerebras (gpt-oss-120b)OpenAI, Anthropic Claude, Groq, Google Gemini
TTS (text-to-speech)ElevenLabsOpenAI, 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.
StepPromptFlagDefault
1Project name (becomes the target directory)--name <dir>my-patter-agent
2SDK runtime--runtime python|typescriptprefilled to the CLI you ran
3Voice mode--mode realtime|pipelinerealtime
4aRealtime engine (realtime mode only)--engine <name>OpenAIRealtime2
4bSTT / LLM / TTS (pipeline mode only)--stt, --llm, --ttsDeepgram / Cerebras / ElevenLabs
5Telephony carrier--carrier twilio|telnyx|plivotwilio
6API keys (written to .env)--skip-keysprompted, skippable
7IDE skills to install--ide <list>, --no-skillsprompted multi-select
8Initialize a git repository--no-gityes (interactive)
9Allow a non-empty target directory--forceoff
A phone number for your agent can be supplied with --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:
In --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:
A Python project mirrors it exactly:
The generated entry file is a minimal inbound agent. A realtime project looks like this (Python shown; TypeScript mirrors it with new and an options object):
A pipeline project swaps the single engine= for the three composed providers:
Every provider and carrier reads its credentials from the environment when constructed with no arguments, so the generated code stays clean and your secrets live only in .env.
Your API keys are written to .env with file mode 0600 (owner read/write only) and .env is listed in .gitignore. The wizard never prints or logs the values you enter. Keep .env out of version control — commit .env.example instead.

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 supporting claude-code, cursor, copilot, and codex:
This shells out to 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:
  1. cd into the new directory.
  2. Fill in your API keys in .env.
  3. Install dependencies — npm install (TypeScript) or pip install -r requirements.txt (Python).
  4. Run it — npm start (TypeScript) or python main.py (Python).
The agent answers inbound calls and starts a Cloudflare Quick Tunnel (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.