Skip to Content
Simulations

Simulations

Simulations are complete training sessions that bundle one or more scenarios together with rubrics, time limits, and ordering — they are what learners actually launch to begin practicing.

What is a Simulation?

A simulation is a runnable training package. It wraps one or more Scenarios and adds session-level configuration: which rubrics to evaluate against, how much time the learner has per scenario, the order scenarios appear, and behavioral flags.

A simulation contains:

  • Name — a descriptive title (e.g., “Academic Integrity Training”, “Aggressive Practice”)
  • Description — what the simulation covers and its purpose
  • Scenarios — the training situations included in this simulation, each with per-scenario configuration:
    • Rubrics — evaluation criteria applied to that scenario (e.g., Communication Skills, Policy Knowledge, De-escalation)
    • Flags — per-scenario boolean settings
    • Time Limits — maximum duration for the learner on that scenario
    • Positions — the order in which scenarios are presented
  • Departments — organizational groupings for filtering and access control
  • Flags — simulation-level boolean settings

Simulations are assigned to Cohorts, which control which learners have access. When a learner starts a simulation, Glow creates an Attempt with one Chat per scenario.

Simulations list showing simulation cards with name, scenario count, and active status

How Simulations Connect to the Workflow

Simulations are step 3 in the Glow content pipeline:

StepResourceDescription
1. Create PersonasPersonasDefine AI characters with instructions and parameter fields
2. Assign to ScenariosScenariosBuild training situations and attach personas, documents, and objectives
3. Add Scenarios to SimulationsSimulationsBundle scenarios into a complete training session with rubrics and time limits
4. Add Simulations to CohortsCohortsAssign simulations to groups of learners
5. Run AttemptsAttemptsLearners start attempts and interact with AI in Chats

Create a simulation

Via the CLI

Create an “Academic Integrity Training” simulation:

Calls below use $GLOW_INSTANCE_URL + $GLOW_TOKEN — see Authentication to export them once.

glow simulations create --body '{ "simulations": [{ "name": "Academic Integrity Training", "description": "Structured training for handling academic integrity violations" }] }'

Via the API

curl -X POST $GLOW_INSTANCE_URL/simulation/create \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $GLOW_TOKEN" \ -d '{ "simulations": [{ "name": "Academic Integrity Training", "description": "Structured training for handling academic integrity violations" }] }'

Simulation creation form showing name, description, and scenario selection


Assigning scenarios and per-scenario configuration

Each scenario added to a simulation gets its own per-scenario configuration: rubrics, time limits, positions, and flags. This is managed through the simulation draft endpoint.

Simulation detail showing scenario list with ordering, time limits, and rubric assignments

glow simulations draft --body '{ "input_draft_id": "simulation-draft-uuid", "scenario_ids": ["academic-integrity-scenario-uuid"], "scenario_rubrics": [ {"scenario_id": "academic-integrity-scenario-uuid", "rubric_id": "communication-skills-rubric-uuid"}, {"scenario_id": "academic-integrity-scenario-uuid", "rubric_id": "policy-knowledge-rubric-uuid"} ], "scenario_time_limits": [ {"scenario_id": "academic-integrity-scenario-uuid", "time_limit": 600} ] }'

Rubrics

Rubrics define how the learner’s performance is evaluated for each scenario. Available rubrics in the university seed data include:

  • Communication Skills — evaluates clarity, empathy, and professionalism
  • Policy Knowledge — evaluates correct application of relevant policies
  • De-escalation — evaluates ability to reduce tension in confrontational situations

Assign rubrics per scenario:

glow simulations draft --body '{ "input_draft_id": "simulation-draft-uuid", "scenario_rubrics": [ {"scenario_id": "scenario-uuid-1", "rubric_id": "communication-skills-uuid"}, {"scenario_id": "scenario-uuid-1", "rubric_id": "de-escalation-uuid"}, {"scenario_id": "scenario-uuid-2", "rubric_id": "policy-knowledge-uuid"} ] }'

Time Limits

Set maximum durations per scenario to simulate real-world time pressure:

glow simulations draft --body '{ "input_draft_id": "simulation-draft-uuid", "scenario_time_limits": [ {"scenario_id": "scenario-uuid-1", "time_limit": 600}, {"scenario_id": "scenario-uuid-2", "time_limit": 300} ] }'

Positions

Control the order in which scenarios are presented to the learner:

glow simulations draft --body '{ "input_draft_id": "simulation-draft-uuid", "scenario_positions": [ {"scenario_id": "scenario-uuid-1", "position": 0}, {"scenario_id": "scenario-uuid-2", "position": 1} ] }'

Simulation Patterns

The university seed data demonstrates two common simulation patterns:

Structured Training Simulations

Multi-scenario simulations designed to train a specific skill. Scenarios are presented in a fixed order and each has rubrics attached:

  • Academic Integrity Training — a complete training session on handling cheating incidents
  • FERPA Training — end-to-end practice with FERPA violation procedures
  • Upset Student Training — structured practice for de-escalation in office hours

Open Practice Simulations

Single-scenario simulations designed for free-form practice with a specific personality type. These are lower-stakes and let the learner experiment:

  • Confused Practice — practice with a student who asks clarifying questions
  • Happy Practice — practice with a positive, uplifting student
  • Passive Practice — practice with a disengaged student
  • Aggressive Practice — practice with a confrontational student
  • General Practice — open-ended interaction practice

Working with Drafts

Simulations use the draft system for all edits. The draft endpoint supports optimistic concurrency via expected_version.

# Create or update a draft glow simulations draft --body '{ "input_draft_id": "existing-draft-uuid", "expected_version": 2, "name": "Updated Academic Integrity Training", "description": "Revised training with new de-escalation scenarios", "scenario_ids": ["scenario-uuid-1", "scenario-uuid-2"] }'
# Via API curl -X PATCH $GLOW_INSTANCE_URL/simulation/draft \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $GLOW_TOKEN" \ -d '{ "input_draft_id": "existing-draft-uuid", "expected_version": 2, "name": "Updated Academic Integrity Training" }'

List your drafts:

# CLI glow simulations list # API curl -X POST $GLOW_INSTANCE_URL/simulation/drafts \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $GLOW_TOKEN"

Search and filter

Simulation search supports full-text plus facet filters across scenario, department, and flag.

glow simulations search --body '{ "search": "training", "filter_department_ids": ["dept-cs"], "page_size": 25 }'
curl -X POST $GLOW_INSTANCE_URL/simulation/search \ -H "Authorization: Bearer $GLOW_TOKEN" \ -H "Content-Type: application/json" \ -d '{"search": "training", "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 simulation in a sunset department, except a manual keeplist glow simulations delete --body '{ "all": true, "filter_department_ids": ["dept-sunset"], "excluded_ids": ["sim-keep-1", "sim-keep-2"] }' # Bulk update via patch glow simulations 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

TaskCLIAPI
List all simulationsglow simulations searchPOST /simulation/search
Get one simulationglow simulations get --body '{"simulation_id": "..."}'POST /simulation/get
Create simulationsglow simulations create --body '{"simulations": [...]}'POST /simulation/create
Update simulationsglow simulations update --body '{"simulations": [...]}'POST /simulation/update
Duplicate a simulationPOST /simulation/duplicate
Delete simulationsglow simulations delete --body '{"simulation_ids": [...]}'POST /simulation/delete
Bulk delete (filter)glow simulations delete --body '{"all": true, "filter_…": "…"}'POST /simulation/delete
Save a draftglow simulations draft --body '{...}'PATCH /simulation/draft
List draftsglow simulations listPOST /simulation/drafts
Export to CSVglow simulations exportPOST /simulation/export
Import from CSVPOST /simulation/csv
Last updated on