Scenarios
Scenarios are the training situations that learners encounter — they combine personas, documents, objectives, and context into a single interactive exercise.
What is a Scenario?
A scenario defines a specific training situation. It pairs one or more Personas with contextual information — reference documents, problem statements, learning objectives, questions, and parameter values — to create a focused interaction that tests a particular skill.
A scenario contains:
- Name — a descriptive title (e.g., “Academic Integrity Training”)
- Description — what the scenario covers and why it matters
- Problem Statement — the situation the learner faces (e.g., “A student was caught cheating on the CS-251 midterm exam”)
- Personas — the AI characters the learner will interact with (linked via junction table)
- Documents — reference materials available during the simulation (e.g., Academic Integrity Policy, FERPA Policy)
- Objectives — specific learning goals the scenario is designed to address
- Parameters — runtime values like class, location, intensity that fill persona
{{placeholders}} - Parameter Fields — the parameter definitions available for this scenario
- Questions & Options — structured prompts and multiple-choice options (for video-based or quiz-style scenarios)
- Images & Videos — media assets used as scenario context
- Departments — organizational groupings for access control and filtering
- Flags — boolean configuration settings
Scenarios are added to Simulations, which are then assigned to Cohorts for learner access.
![]()
How Scenarios Connect to the Workflow
Scenarios are step 2 in the Glow content pipeline:
| Step | Resource | Description |
|---|---|---|
| 1. Create Personas | Personas | Define AI characters with instructions and parameter fields |
| 2. Assign to Scenarios | Scenarios | Build training situations and attach personas, documents, and objectives |
| 3. Add Scenarios to Simulations | Simulations | Bundle scenarios into a complete training session with rubrics and time limits |
| 4. Add Simulations to Cohorts | Cohorts | Assign simulations to groups of learners |
| 5. Run Attempts | Attempts | Learners start attempts and interact with AI in Chats |
Create a scenario
Via the CLI
Create an “Academic Integrity Training” scenario:
Calls below use
$GLOW_INSTANCE_URL+$GLOW_TOKEN— see Authentication to export them once.
glow scenarios create --body '{
"scenarios": [{
"name": "Academic Integrity Training",
"description": "Practice handling a student caught cheating on an exam",
"problem_statement": "A student in CS-251 was caught cheating on the midterm exam. You are meeting with the student during office hours to discuss the incident.",
"objectives": [
"Apply the academic integrity policy correctly",
"Maintain a professional and empathetic tone",
"Document the conversation outcome"
],
"persona_ids": ["confused-student-uuid"],
"document_ids": ["academic-integrity-policy-uuid"]
}]
}'Via the API
curl -X POST $GLOW_INSTANCE_URL/scenario/create \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $GLOW_TOKEN" \
-d '{
"scenarios": [{
"name": "Academic Integrity Training",
"description": "Practice handling a student caught cheating on an exam",
"problem_statement": "A student in CS-251 was caught cheating on the midterm exam.",
"objectives": [
"Apply the academic integrity policy correctly",
"Maintain a professional and empathetic tone"
],
"persona_ids": ["confused-student-uuid"],
"document_ids": ["academic-integrity-policy-uuid"]
}]
}'![]()
Attaching personas, documents, and objectives
![]()
Personas are linked to scenarios through a junction relationship. A single scenario can have multiple personas (e.g., an “Upset Student” and a “Professor” in the same training). The scenario determines which persona(s) the learner interacts with.
Add personas when creating or updating a scenario:
glow scenarios draft --body '{
"input_draft_id": "scenario-draft-uuid",
"persona_ids": ["confused-student-uuid", "aggressive-student-uuid"]
}'Via API:
curl -X PATCH $GLOW_INSTANCE_URL/scenario/draft \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $GLOW_TOKEN" \
-d '{
"input_draft_id": "scenario-draft-uuid",
"persona_ids": ["confused-student-uuid", "aggressive-student-uuid"]
}'Example: FERPA Training scenario
glow scenarios create --body '{
"scenarios": [{
"name": "FERPA Training",
"description": "Practice responding to a FERPA violation where a grade sheet was left visible",
"problem_statement": "A grade sheet with student names and scores was left visible on a desk in a shared office. Another student noticed it and reported the issue.",
"objectives": [
"Identify the FERPA violation",
"Explain the correct procedure for handling grade information",
"Reassure the reporting student"
],
"persona_ids": ["concerned-student-uuid"],
"document_ids": ["ferpa-policy-uuid"]
}]
}'![]()
Working with Parameters
Scenarios supply the parameter values that fill persona {{placeholders}}. If a persona’s instructions reference {{class}} and {{location}}, the scenario provides the actual values (e.g., CS-251, Lawson).
When editing a scenario draft, associate parameter fields and their values:
glow scenarios draft --body '{
"input_draft_id": "scenario-draft-uuid",
"parameter_field_ids": ["class-param-uuid", "location-param-uuid", "intensity-param-uuid"]
}'This makes the scenario supply concrete values for each parameter when the simulation runs, allowing the same persona to behave differently across scenarios.
Generate scenarios from a prompt
The scenario artifact has a generate sub-operation that produces draft scenarios from a natural-language prompt — useful for bulk authoring or templating off an existing situation.
curl -X POST $GLOW_INSTANCE_URL/scenario/generate \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $GLOW_TOKEN" \
-d '{
"prompt": "Three office-hours scenarios with the same Confused persona, escalating intensity 3 → 6 → 9",
"persona_ids": ["confused-student-uuid"]
}'The response streams generated scenario drafts that you can then edit and publish the same way as hand-authored ones.
Scenario Types in Practice
The university seed data illustrates two common patterns:
Structured training scenarios focus on a specific policy or skill:
- Academic Integrity Training — student caught cheating on CS-251 midterm
- FERPA Training — grade sheet left visible in shared office
- Upset Student Training — student upset about a grade during office hours
Open practice scenarios provide general practice with a particular personality type:
- Confused Practice — practice with a student who asks many questions
- Happy Practice — practice with a positive, encouraging student
- Passive Practice — practice with a disengaged, minimal-response student
- Aggressive Practice — practice with a confrontational student
- General Practice — open-ended practice
Working with Drafts
Scenarios use the same draft system as other Glow resources. Edit through the draft endpoint and publish when ready. The draft endpoint enforces optimistic concurrency via expected_version.
# Create or update a draft
glow scenarios draft --body '{
"name": "Updated FERPA Training",
"description": "Updated description with new policy references",
"problem_statement": "A grade sheet was left visible...",
"objectives": ["Identify the violation", "Apply correct procedure"],
"persona_ids": ["concerned-student-uuid"],
"document_ids": ["ferpa-policy-uuid"]
}'# Via API
curl -X PATCH $GLOW_INSTANCE_URL/scenario/draft \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $GLOW_TOKEN" \
-d '{
"name": "Updated FERPA Training",
"description": "Updated description with new policy references"
}'List your drafts:
# CLI
glow scenarios list
# API
curl -X POST $GLOW_INSTANCE_URL/scenario/drafts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $GLOW_TOKEN"Search and filter
Scenario search supports full-text plus facet filters across persona, document, parameter, and department.
glow scenarios search --body '{"persona_ids": ["confused-student-uuid"]}'curl -X POST $GLOW_INSTANCE_URL/scenario/search \
-H "Authorization: Bearer $GLOW_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"search": "FERPA",
"page_size": 25
}'Bulk operations
Bulk delete and update follow the canonical all-matching shape — pass either explicit IDs, or all: true with flat filter fields + optional excluded_ids + a patch for updates.
# Delete every scenario referencing a deprecated persona, except the canonical examples
glow scenarios delete --body '{
"all": true,
"persona_ids": ["deprecated-persona-uuid"],
"excluded_ids": ["scenario-keep-1", "scenario-keep-2"]
}'
# Bulk update via patch
glow scenarios update --body '{
"all": true,
"filter_department_ids": ["dept-archive"],
"patch": { "archived": true }
}'See the Personas guide for the canonical write-up of this pattern.
Common Operations
| Task | CLI | API |
|---|---|---|
| List all scenarios | glow scenarios search | POST /scenario/search |
| Get one scenario | glow scenarios get --body '{"scenario_id": "..."}' | POST /scenario/get |
| Create scenarios | glow scenarios create --body '{"scenarios": [...]}' | POST /scenario/create |
| Update scenarios | glow scenarios update --body '{"scenarios": [...]}' | POST /scenario/update |
| Duplicate a scenario | — | POST /scenario/duplicate |
| Delete scenarios | glow scenarios delete --body '{"scenario_ids": [...]}' | POST /scenario/delete |
| Bulk delete (filter) | glow scenarios delete --body '{"all": true, "filter_…": "…"}' | POST /scenario/delete |
| Generate scenarios | — | POST /scenario/generate |
| Save a draft | glow scenarios draft --body '{...}' | PATCH /scenario/draft |
| List drafts | glow scenarios list | POST /scenario/drafts |
| Export to CSV | glow scenarios export | POST /scenario/export |
| Import from CSV | — | POST /scenario/csv |
| Upload media | glow scenarios image upload | POST /scenario/upload |
Related
- Scenarios API Reference — full endpoint schemas and field definitions
- Scenarios CLI Reference — all CLI commands and flags
- Personas Guide — creating the AI characters that scenarios use
- Simulations Guide — bundling scenarios into complete training sessions
- Attempts Guide — how learners run through scenarios