← Files Tough Tongue AIARCHIVED FILE
references/scenario-fields.md
8.89 KB · Sep 30, 2026 · 22:56 UTC
# Scenario Field Reference
Field schema, valid enum values, and config defaults for `ttai:create_scenario`
/ `ttai:update_scenario` payloads. Load the MCP tool schema before calling —
this file explains what to put in each field; the tool schema is the source of
truth for types.
## Contents
- Top-level fields
- ai_model_config (providers, models, voice quick-reference)
- strategy (auto-start, welcome, silence, conductor, defaults by type)
- appearance (voice, language codes)
- tools_config (two-axis control, defaults by scenario type)
- session_analysis (auto-analysis, extraction)
- rubrik patterns (cold call, sales, coaching)
- Dynamic variables and missing-value fallbacks
---
## Top-Level Fields
| Field | Required | Notes |
|---|---|---|
| `id` | update only | Omit for `create_scenario`; required for `update_scenario` |
| `name` | create | Short display title |
| `type` | | `"default"` (almost always), `"super"` (multi-stage), `"composite"`. Never write `super_agent` — the schema rejects it |
| `user_friendly_description` | recommended | 1-2 public-facing sentences |
| `ai_instructions` | create | The AI system prompt — the most important field |
| `user_instructions` | recommended | Pre-session guidance for the human |
| `rubrik` | recommended | Evaluation criteria for session analysis |
| `pdf_context` | | Extra context document text |
| `is_public` | | Default `true`. `false` = only accessible via access token |
| `is_recording` | | Always `true` for voice scenarios |
| `passcode` | | Optional passcode gate |
| `analysis_access` | | `"default"` (run page only), `"always"`, `"never"` |
| `user_metadata` | | Filterable key-value metadata |
---
## ai_model_config
Two pipeline architectures exist. **Always set `ai_model_config` explicitly** —
do not omit it.
### Cascade pipeline (Landmass)
External STT → LLM → TTS. Best for outbound calls where the AI initiates and
low latency matters. Requires all six fields:
```json
{
"provider": "Landmass",
"model": "cascade-01",
"tts_provider": "cartesia",
"tts_voice_id": "f786b574-daa5-4673-aa0c-cbe3e8534c02",
"llm_provider": "google_vertex",
"llm_model": "gemini-3.1-flash-lite",
"stt_provider": "deepgram"
}
```
When using cascade, also load [cascade-tts.md](cascade-tts.md) and include
the voice-pipeline blocks in `ai_instructions`.
### Native voice pipeline (Galaxy / Ocean)
Gemini handles voice end-to-end. Best for scenarios where the user speaks
first or turn-taking is more conversational. Only `provider` and `model`
are needed:
```json
{
"provider": "Galaxy",
"model": "medium"
}
```
### Valid values
- `provider`: `Ocean` | `Galaxy` | `Landmass`
- `model`: `medium` | `medium-super` | `medium-stable` | `cascade-01`
- `tts_provider` (cascade only): `cartesia` | `openai` | `elevenlabs`
- `llm_provider` (cascade only): `google` | `google_vertex` | `openai` | `cerebras`
- `stt_provider` (cascade only): `deepgram` | `cartesia`
### When to use which
| Scenario type | provider | model | Pipeline | Notes |
|---|---|---|---|---|
| Cold call (AI calls) | Landmass | cascade-01 | Cascade | Cartesia TTS + Deepgram STT + Gemini Flash Lite |
| Sales roleplay (AI is prospect) | Galaxy | medium | Native voice | Human initiates; natural turn-taking |
| Coaching (AI is trainer) | Ocean | medium-stable | Native voice | Multi-step sessions; stability matters |
| Demo — browser navigation | Ocean | medium-stable | Native voice | Standard voice for interactive demos |
| Demo — slide-based | Landmass | cascade-01 | Cascade | Polished TTS delivery for presentations |
| Text-only | Ocean | medium | — | No voice pipeline |
| High-quality text | Ocean | medium-super | — | Longer, richer text generation |
### Voice quick-reference (Cartesia `tts_voice_id`)
| Persona | Gender | Locale | Voice ID |
|---|---|---|---|
| Indian female | F | en-IN | `343e5d21-9db1-4efa-a1bc-196777cce1bb` |
| American female | F | en-US | `f786b574-daa5-4673-aa0c-cbe3e8534c02` |
| American male | M | en-US | `a167e0f3-df7e-4d52-a9c3-f949145f52ef` |
| German male | M | de-DE | `384b625b-da5a-4b3a-8c5d-b9e1a5f30497` |
Gemini native voices (Galaxy/Ocean — set in `appearance.voice`): `Aoede`
(American English, default), `Puck` (American English, male).
---
## strategy
```json
{
"skip_auto_start": false,
"system_instructions_template": "minimal",
"welcome_instructions": "Start with: Hi [name]! This is [Agent] from [Company]. [Reason]. [Permission ask]. Then STOP and wait.",
"filler_words": "hmm, right, okay, sure, mm, got it",
"silence": {
"silence_threshold": 5000,
"end_session": false,
"force_agent_to_speak": true
},
"conductor": {
"enabled": true,
"prefix": "CONDUCTOR:",
"messages": [
{
"time_seconds": 300,
"message": "Wrap up the call — confirm next step, end warmly. Use end_session tool.",
"end_turn": true
}
]
}
}
```
| Field | Effect |
|---|---|
| `skip_auto_start` | `false` = AI speaks first; `true` = user speaks first |
| `welcome_instructions` | The AI's exact first beat. Directive form, never quoted speech |
| `system_instructions_template` | `"minimal"` keeps the compiled prompt lean (recommended) |
| `silence.silence_threshold` | ms of silence before action (4000-8000 typical) |
| `silence.end_session` | `true` = disconnect on silence; `false` = nudge and continue |
| `silence.force_agent_to_speak` | `true` = AI re-engages on silence |
| `conductor.messages[]` | Timed mid-call directives (wrap-up timers) |
| `filler_words` | Comma-separated TTS filler phrases — cascade models only |
### Strategy defaults by type
| Type | skip_auto_start | conductor wrap-up | welcome_instructions |
|---|---|---|---|
| Cold call (AI calls) | `false` | 300-450s | Beat 1 directive |
| Sales roleplay (AI is prospect) | `true` | 600-900s | Opening line as prospect |
| Coaching | `false` | 900-1200s | Greeting + session intro |
---
## appearance
```json
{
"voice": "Aoede",
"language_code": "en-US",
"avatar_url": null
}
```
`language_code` (BCP 47) must match the scenario locale. Supported:
`en-US en-GB en-IN en-AU de-DE es-US es-ES fr-FR fr-CA hi-IN pt-BR ar-XA id-ID
it-IT ja-JP tr-TR vi-VN bn-IN gu-IN kn-IN ml-IN mr-IN ta-IN te-IN nl-NL ko-KR
cmn-CN pl-PL ru-RU th-TH`
---
## tools_config
Every tool has two booleans: `should_register` (AI can call it) and
`add_to_system_prompt` (AI is told when/how to use it).
```json
{
"tools": {
"end_session": {
"should_register": true,
"add_to_system_prompt": true,
"tool_settings": { "disconnectDelaySeconds": 5 }
}
}
}
```
### Tool defaults by scenario type
| Tool | Cold call | Sales | Coaching |
|---|---|---|---|
| `end_session` | **yes** | **yes** | **yes** |
| `card` | no | no | **yes** (Pattern A/B) |
| `mcq` | no | no | **yes** |
| `emoji_reaction` | no | no | yes |
| `slide_generation` | no | no | Pattern C only |
| `image_generation` | no | no | optional (visual scenes) |
| `memory_search` | no | no | if memory enabled |
| `knowledge_base_search` | no | no | optional |
`end_session` is required for every scenario with termination rules. Use
`disconnectDelaySeconds: 8` for emotional or sensitive calls.
---
## session_analysis
```json
{
"is_auto_analysis": true,
"is_auto_submit": true,
"enable_extraction": false,
"evaluation_target": null
}
```
- Always set `is_auto_analysis: true` and `is_auto_submit: true` — this is what
makes sessions analyzable by the session-analyst skill.
- `evaluation_target`: set for multi-participant sessions (e.g. `"Sales Rep"`).
- `enable_extraction` + `extraction_vars`: structured data capture, e.g.
`[{"name": "sentiment", "description": "...", "type": "text"}]`.
Types: `text`, `number`, `boolean`, `list`, `date`.
---
## rubrik patterns
Structure: 4-6 categories with weights summing to 100%, observable criteria,
performance thresholds.
**Cold call / SDR — evaluates the LEAD (the human playing the prospect):**
```
# [Company] — Lead Qualification Report
Evaluate the LEAD (the prospect) — not the AI caller.
## Qualification Score (1-10) [criteria per band]
## Structured Data [fields the team needs]
## Follow-Up Recommendation
```
**Sales roleplay — evaluates the REP (the human user):**
```
# [Company] — Sales Performance Report
Evaluate the SALES REP (the human user) — not the AI prospect.
## Score (1-10) [performance criteria]
## Skills Assessment [discovery, objection handling, closing]
## Improvement Areas
```
**Coaching — engagement-weighted:**
```
## Evaluation Dimensions
### Practice Execution (35%)
### Concept Understanding (25%)
### Situation Handling (25%)
### Feedback Absorption (15%)
```
---
## Dynamic variables
`{{ var_name }}` placeholders in `ai_instructions` are filled per session from
URL parameters (`?t_company=Acme`). Every variable MUST have a documented
missing-value fallback in the instructions ("If `lead_name` is blank, open
with 'Hi, am I speaking with the homeowner?'") — otherwise the agent speaks
the raw placeholder aloud.
SHA-256: 7b484769824f3e81c9e956d064f7df8a46f71f85e33274e589587095fe62a577