Assistants

Each directory directly under the repository root that contains config.yaml defines an assistant. Its directory name identifies it across syncs.

.
├── reception/
│   ├── config.yaml
│   ├── base.md
│   ├── default.md
│   ├── functions.yaml          # optional
│   └── workflows/             # optional
└── sales/
    ├── config.yaml
    ├── base.md
    └── default.md

Assistant directory names must start with a letter or digit, contain only letters, digits, ., _, or -, and be at most 100 characters long. Put assistants directly at the root: assistants/reception/config.yaml is not discovered as an assistant. A repository-level config.yaml is also ignored.

Configuration

reception/config.yaml
name: Reception
spokenName: Reception
timeout:
  firstNotice: 30
  final: 60
languages: [en, nl]
timezone: Europe/Amsterdam
opening:
  en: "Hello, you are speaking with {{assistant_name}} at {{organization_name}}. How can I help?"
  nl: "Hallo, u spreekt met {{assistant_name}} van {{organization_name}}. Waarmee kan ik u helpen?"
faq:
  hours:
    en:
      question: "When are you open?"
      answer: "Monday to Friday, from 9am to 5pm."
    nl:
      question: "Wanneer zijn jullie open?"
      answer: "Van maandag tot vrijdag, van 9 tot 17 uur."
FieldRequiredMeaning and constraints
nameYesDashboard name, 1–120 characters.
spokenNameNoSpoken assistant name, 1–80 characters. Defaults to name; set this explicitly if name exceeds 80 characters.
timeout.firstNoticeYesSeconds of silence before the first notice; an integer from 5 to 300.
timeout.finalYesAdditional silence timeout after the first notice, in seconds; an integer from 5 to 300.
languagesYesNonempty list of en and/or nl. The first entry is the default language.
timezoneYesOne of the supported timezones below.
modelsNoAI model, speech model, and voices. Defaults to Telnyx Kimi K2.6 and the configured ElevenLabs v3 voices.
openingNoOpening text by language. Omitted languages use the shared standard introduction.
faqNoUp to 100 FAQ entries, each containing answers by language. Defaults to an empty object.

Unknown fields are rejected. Keep prompts in Markdown files and functions in functions.yaml.

Models and voices

Set models to choose the same approved options shown in the dashboard's Models & voice page. Changes apply to new calls. Speech recognition stays on Deepgram Nova-3.

reception/config.yaml
name: Reception
timeout: { firstNotice: 30, final: 60 }
languages: [en, nl]
timezone: Europe/Amsterdam
models:
  llm: openai/gpt-4.1-mini
  voices:
    en:
      tts: gradium/default
      voice: 4SZHfMpw-p46Ywgs
    nl:
      tts: cartesia/sonic-3.6
      voice: 9626c31c-bec5-4cca-baa8-f8ba9e84c8bc

When models is provided, llm and both voices language entries are required. Each language has its own tts model and voice ID, with an optional name for display. Providers only need to support the language they are selected for.

AI modelmodels.llm
Telnyx Kimi K2.6 (default)telnyx/kimi-k2.6
Gemma 4 31Bgoogle/gemma-4-31b-it
GPT-4.1 miniopenai/gpt-4.1-mini
Gemini 3.8 Flashgoogle/gemini-3.8-flash
Gemini 3.5 Flash Litegoogle/gemini-3.5-flash-lite
GPT-5.4 miniopenai/gpt-5.4-mini
GPT-5.4 nanoopenai/gpt-5.4-nano
Speech model (models.voices.<language>.tts)Voice IDsLanguages in this app
elevenlabs/eleven_v3_conversational (default)default or an accessible ElevenLabs voice IDEnglish, Dutch
elevenlabs/eleven_flash_v2_5default or an accessible ElevenLabs voice IDEnglish, Dutch
elevenlabs/eleven_multilingual_v2default or an accessible ElevenLabs voice IDEnglish, Dutch
cartesia/sonic-3.6Public Cartesia voice ID, such as Jacqueline in the example aboveEnglish, Dutch
gradium/defaultGradium catalog voice ID, such as 4SZHfMpw-p46Ywgs (Harper)English only

An explicit ElevenLabs default voice is resolved to the configured voice ID for that language when syncing. Omit models to initialize a new assistant with the default AI model and concrete voice IDs. Later syncs with models omitted preserve the saved selections, even if the platform defaults have changed. The dashboard library searches current provider catalogs by name, ID, or descriptive keywords. Copy IDs from that library and preview them before using them in Git. Sync checks model names, voice ID syntax, and model language support. ElevenLabs voice IDs must already be accessible to the platform account and pass its standard-rate filter before the configuration is saved. Calls reuse that approval; pricing is checked again when the configuration is saved or synced with a new commit. Gradium can handle English while another provider handles Dutch, as shown above.

Supported timezones

RegionValues
EuropeEurope/London, Europe/Amsterdam, Europe/Paris, Europe/Berlin, Europe/Moscow
AmericasAmerica/New_York, America/Chicago, America/Denver, America/Los_Angeles, America/Toronto, America/Sao_Paulo
AsiaAsia/Dubai, Asia/Kolkata, Asia/Shanghai, Asia/Singapore, Asia/Hong_Kong, Asia/Tokyo, Asia/Seoul
OceaniaAustralia/Sydney, Pacific/Auckland
AfricaAfrica/Cairo, Africa/Johannesburg

Opening messages and FAQ

Every language used in opening or faq must also appear in languages. Opening messages support {{organization_name}} and {{assistant_name}}; see Prompt variables.

The example above uses a stable key, hours, with a translated question and answer for each language. If the question is shared across languages, a FAQ entry can instead use the question itself as the key:

faq:
  "Wi-Fi?":
    en: "Ask reception for the guest network password."
    nl: "Vraag de receptie naar het wachtwoord van het gastnetwerk."

FAQ keys and questions must be nonempty and at most 500 characters. Answers must be nonempty and at most 10,000 characters. FAQ supplies knowledge for the assistant to use during the conversation.

Configuration ownership

Managed in GitHubManaged or retained in the dashboard
Assistant name, spoken name, type at creation, languages, timezone, and silence timeoutsAssistant identity and phone assignments
Base, default, and step promptsHuman transfer settings and SMS sender settings
Opening messages and FAQIntegration connections and credentials
Functions, workflows, and stepsCall history

GitHub-managed fields are read-only in the dashboard while the repository is connected. Each import replaces those fields completely: removing an optional functions.yaml, workflows/, or FAQ entry removes it from the next imported configuration. Integration connections themselves remain in place; see Integration functions for connection instructions.

Multiple assistants and identity

Add another root directory with its own config.yaml, base.md, and default.md to create another assistant. Each assistant has its own prompts, functions, workflows, and dashboard integration connections.

ChangeResult
Edit name in the same directoryUpdate the display name and keep the assistant's identity.
Add a new assistant directoryCreate a new assistant. Assign phone numbers and connect integrations for it in the dashboard.
Rename an assistant directoryCreate a new assistant and mark the previous one as removed from the repository. Phone assignments stay with the previous assistant.
Delete the directory or its config.yamlKeep the last configuration and mark the assistant as removed. Assigned phone numbers continue to work.
Restore the same directory while still connectedUpdate the retained assistant and clear its removed status.

An assistant can be assigned to incoming calls, outgoing calls, or both on a phone number. See Import limits for repository limits.

On this page