Scenario Maker
One workflow for new, edit, and refine. Load ttai-agent
for datastore + scenario shape; load ttai-agent/features/mcp/ before any
ttai: call. Do not invent fields; load the tool schema.
| Job |
Signal |
Tool |
| Create |
No live scenario, or "build / make / rehearse" |
ttai:create_scenario (no id) |
| Edit |
Named scenario, "change X to Y", no failure evidence |
ttai:get_scenario → ttai:update_scenario |
| Refine |
Complaint, transcript, low scores, "too early / robotic" |
Evidence → surgical ttai:update_scenario |
If ambiguous: create when nothing exists to fetch; otherwise fetch first.
1. Account context
Load ttai-agent/kb/operating-model.md. Reuse a current, verified workspace
context when supplied by the consumer; otherwise call ttai:list_organizations
and use org_id for team work. The public MCP cannot fetch a user profile or
effective platform plan—do not treat list_subscriptions as either.
2. Create
Classify → situation file → draft → validate → create.
| Type |
AI plays |
Load from ttai-agent |
| Cold call / SDR / outbound phone |
Outbound caller |
kb/scenario-recipes/cold-call.md |
| Sales roleplay |
Prospect |
kb/scenario-recipes/sales-roleplay.md |
| Coaching |
Trainer / mentor |
kb/scenario-recipes/coaching.md |
| Demo |
Product demo agent |
kb/scenario-recipes/demo.md |
| Other |
Interview, support, negotiation, clone, observer |
model-selection.md + control.md + ai-instructions.md |
Signals: "AI calls the customer" / SDR / SIP → cold call. "Practice selling"
→ sales roleplay. "Coach my team" → coaching. "Demo my product" → demo.
Always load kb/scenario-authoring.md, model-selection.md, control.md, and
ai-instructions.md. Load kb/scenario-recipes/cascade-tts.md only when the
selected stamp is full Cascade.
Scripted browser walkthroughs: create first, then browser-demo-builder.
Gather + defaults
URLs, transcripts, and other MCP tools beat invented facts. Ask only when
the brief is silent:
| Question |
Default |
| Language |
en-US |
| External TTS voice |
Use a user-supplied or provider-returned ID; never invent one |
| Cold-call sub-type |
Warm lead |
| Coaching pattern |
A (Situation-First) |
| Public or private |
is_public: true |
Draft (ttai:create_scenario, no id)
name
ai_model_config — stamp from the ttai-agent
kb/entities/scenario/model-selection.md situation table (cold call / slides →
Landmass cascade + Cartesia; sales → Galaxy medium-stable; coaching /
browser demo → Ocean medium-stable). Never author cascade-01 or invent
a tts_voice_id. Super-agent requires Landmass.
ai_instructions — shape from kb/entities/scenario/ai-instructions.md;
content from the recipe. Specify the full role, reality model, flow,
tools, and constraints without padding. Two-beat opening:
identity/reason → STOP and wait. One question per turn.
user_instructions, rubrik (correct party), user_friendly_description
strategy, tools_config, session_analysis, appearance
is_recording: true for voice
Fast path: ttai:generate_scenario then create. Prefer full authoring for
team-run scenarios.
Create checklist
ttai:create_scenario → return https://app.toughtongueai.com/run/<id>.
Private: mention ttai:create_scenario_access_token.
3. Edit (no failure evidence)
ttai:get_scenario (resolve id via ttai:list_scenarios if they gave a
name). Change only what they asked. Partial ttai:update_scenario: id +
changed fields. Re-fetch to confirm.
4. Refine (from evidence)
Diagnose → plan → surgical edit → verify. Replace or tighten before adding.
Flag the user if ai_instructions grows more than ~50 tokens. One issue =
one edit.
Read references/runtime-behavior.md before
blaming prompt assembly, tools, conductor, or silence.
- Fetch the scenario (
ttai:get_scenario). Read all of ai_instructions,
plus strategy, tools_config, session_analysis.
- Evidence: pasted transcript/complaint, or
ttai:list_sessions →
ttai:get_sessions_batch → transcript_url. Quote the prescribed turn
vs what the agent did. Do not translate Hindi/Hinglish.
- Classify:
| Symptom |
Fix |
end_session too early / late / never |
End-of-call block or tools_config.tools.end_session |
| Wrong branch / skipped step |
FLOW triggers; NEVER skip |
| Two questions in one turn / robotic |
STYLE — bold one rule; do not add a section |
| Revealed AI or spoke a tool name |
GUARDRAILS |
| ~2 min silence then hang up |
Talkative strategy.silence |
| Wrap-up mid-call |
strategy.conductor.messages |
| Wrong voice / locale |
Cascade: tts_voice_id. Native: appearance.voice. Match language_code |
Spoke {{ firstname }} |
CONTEXT fallback |
| Browser click misses |
browser-demo-builder selector guide |
| Robotic / restarting opening |
FLOW as a directive |
- Imperative voice. Bind rules to triggers. Send only
id + changed
fields. For ai_instructions, send the full updated string.
- Re-fetch. Report: Diagnosis, Change, Token delta, reminder
that new sessions only pick up the edit.
Pitfalls
- Stamp from
model-selection.md (cold call / slides → Cascade; sales →
Galaxy; coaching / browser → Ocean). Do not freestyle from channel alone.
- Cold-call rubrics score the lead; sales rubrics score the rep.
- Missing
end_session timing → never hangs up, or hangs up mid-sentence.
- Never embed
TTAI_PAT in anything you generate.
Key Files
1---2name: scenario-maker3description: Create, edit, or refine Tough Tongue AI scenarios via the ttai MCP server — outbound callers, demo agents, screeners, and practice roleplay. Classifies the job, loads ttai-agent, then calls ttai:create_scenario or ttai:update_scenario. Use when the user says "create a scenario", "create a voice agent", "build a practice scenario", "edit the scenario", "refine the scenario", "fix the scenario", "the agent said X instead of Y", "it ended the call too early", "make it sound more natural", "I have a call in 30 minutes, help me rehearse", or pastes a brief, transcript, or complaint.4---56# Scenario Maker78One workflow for **new**, **edit**, and **refine**. Load **ttai-agent**9for datastore + scenario shape; load `ttai-agent/features/mcp/` before any10`ttai:` call. Do not invent fields; load the tool schema.1112| Job | Signal | Tool |13| ---------- | -------------------------------------------------------- | -------------------------------------------- |14| **Create** | No live scenario, or "build / make / rehearse" | `ttai:create_scenario` (no `id`) |15| **Edit** | Named scenario, "change X to Y", no failure evidence | `ttai:get_scenario` → `ttai:update_scenario` |16| **Refine** | Complaint, transcript, low scores, "too early / robotic" | Evidence → surgical `ttai:update_scenario` |1718If ambiguous: create when nothing exists to fetch; otherwise fetch first.1920## 1. Account context2122Load `ttai-agent/kb/operating-model.md`. Reuse a current, verified workspace23context when supplied by the consumer; otherwise call `ttai:list_organizations`24and use `org_id` for team work. The public MCP cannot fetch a user profile or25effective platform plan—do not treat `list_subscriptions` as either.2627## 2. Create2829Classify → situation file → draft → validate → create.3031| Type | AI plays | Load from **ttai-agent** |32| -------------------------------- | ------------------------------------------------ | ---------------------------------------------------------- |33| Cold call / SDR / outbound phone | Outbound caller | `kb/scenario-recipes/cold-call.md` |34| Sales roleplay | Prospect | `kb/scenario-recipes/sales-roleplay.md` |35| Coaching | Trainer / mentor | `kb/scenario-recipes/coaching.md` |36| Demo | Product demo agent | `kb/scenario-recipes/demo.md` |37| Other | Interview, support, negotiation, clone, observer | `model-selection.md` + `control.md` + `ai-instructions.md` |3839Signals: "AI calls the customer" / SDR / SIP → cold call. "Practice selling"40→ sales roleplay. "Coach my team" → coaching. "Demo my product" → demo.4142Always load `kb/scenario-authoring.md`, `model-selection.md`, `control.md`, and43`ai-instructions.md`. Load `kb/scenario-recipes/cascade-tts.md` only when the44selected stamp is full Cascade.4546Scripted browser walkthroughs: create first, then **browser-demo-builder**.4748### Gather + defaults4950URLs, transcripts, and other MCP tools beat invented facts. Ask only when51the brief is silent:5253| Question | Default |54| ------------------ | ------------------------------------------------------------- |55| Language | `en-US` |56| External TTS voice | Use a user-supplied or provider-returned ID; never invent one |57| Cold-call sub-type | Warm lead |58| Coaching pattern | A (Situation-First) |59| Public or private | `is_public: true` |6061### Draft (`ttai:create_scenario`, no `id`)62631. `name`642. `ai_model_config` — stamp from the **ttai-agent**65 `kb/entities/scenario/model-selection.md` situation table (cold call / slides →66 Landmass `cascade` + Cartesia; sales → Galaxy `medium-stable`; coaching /67 browser demo → Ocean `medium-stable`). Never author `cascade-01` or invent68 a `tts_voice_id`. Super-agent requires Landmass.693. `ai_instructions` — shape from `kb/entities/scenario/ai-instructions.md`;70 content from the recipe. Specify the full role, reality model, flow,71 tools, and constraints without padding. Two-beat opening:72 identity/reason → STOP and wait. One question per turn.734. `user_instructions`, `rubrik` (correct party), `user_friendly_description`745. `strategy`, `tools_config`, `session_analysis`, `appearance`756. `is_recording: true` for voice7677Fast path: `ttai:generate_scenario` then create. Prefer full authoring for78team-run scenarios.7980### Create checklist8182- [ ] `name`, `ai_instructions`; `user_friendly_description` for humans83- [ ] `ai_model_config` matches the voice, interaction, and channel contract84- [ ] `##` sections; `{{ vars }}` have fallbacks85- [ ] Opening lives in FLOW (directive, never quoted). No `welcome_instructions`86- [ ] `end_session` registered with `add_to_system_prompt: true`87- [ ] Talkative `strategy.silence` (omit = 120s hang up)88- [ ] Auto-analysis + auto-submit on89- [ ] Rubric evaluates the correct party90- [ ] Full Cascade: voice-pipeline + STT blocks. Separate-TTS realtime:91 `tts_*` only. Native realtime: no TTS/STT sub-fields9293`ttai:create_scenario` → return `https://app.toughtongueai.com/run/<id>`.94Private: mention `ttai:create_scenario_access_token`.9596## 3. Edit (no failure evidence)9798`ttai:get_scenario` (resolve id via `ttai:list_scenarios` if they gave a99name). Change only what they asked. Partial `ttai:update_scenario`: `id` +100changed fields. Re-fetch to confirm.101102## 4. Refine (from evidence)103104Diagnose → plan → surgical edit → verify. Replace or tighten before adding.105Flag the user if `ai_instructions` grows more than ~50 tokens. One issue =106one edit.107108Read [references/runtime-behavior.md](references/runtime-behavior.md) before109blaming prompt assembly, tools, conductor, or silence.1101111. Fetch the scenario (`ttai:get_scenario`). Read all of `ai_instructions`,112 plus `strategy`, `tools_config`, `session_analysis`.1132. Evidence: pasted transcript/complaint, or `ttai:list_sessions` →114 `ttai:get_sessions_batch` → `transcript_url`. Quote the prescribed turn115 vs what the agent did. Do not translate Hindi/Hinglish.1163. Classify:117118| Symptom | Fix |119| -------------------------------------- | -------------------------------------------------------------------------- |120| `end_session` too early / late / never | End-of-call block or `tools_config.tools.end_session` |121| Wrong branch / skipped step | FLOW triggers; NEVER skip |122| Two questions in one turn / robotic | STYLE — bold one rule; do not add a section |123| Revealed AI or spoke a tool name | GUARDRAILS |124| ~2 min silence then hang up | Talkative `strategy.silence` |125| Wrap-up mid-call | `strategy.conductor.messages` |126| Wrong voice / locale | Cascade: `tts_voice_id`. Native: `appearance.voice`. Match `language_code` |127| Spoke `{{ firstname }}` | CONTEXT fallback |128| Browser click misses | **browser-demo-builder** selector guide |129| Robotic / restarting opening | FLOW as a directive |1301314. Imperative voice. Bind rules to triggers. Send only `id` + changed132 fields. For `ai_instructions`, send the full updated string.1335. Re-fetch. Report: **Diagnosis**, **Change**, **Token delta**, reminder134 that **new sessions only** pick up the edit.135136## Pitfalls137138- Stamp from `model-selection.md` (cold call / slides → Cascade; sales →139 Galaxy; coaching / browser → Ocean). Do not freestyle from channel alone.140- Cold-call rubrics score the **lead**; sales rubrics score the **rep**.141- Missing `end_session` timing → never hangs up, or hangs up mid-sentence.142- Never embed `TTAI_PAT` in anything you generate.143144## Key Files145146- [../ttai-agent/SKILL.md](../ttai-agent/SKILL.md) — intelligence-layer entry147- [../ttai-agent/kb/entities/scenario/model-selection.md](../ttai-agent/kb/entities/scenario/model-selection.md) — stamps148- [../ttai-agent/kb/scenario-authoring.md](../ttai-agent/kb/scenario-authoring.md) — quality principles149- [references/runtime-behavior.md](references/runtime-behavior.md) — refine from evidence