Skip to Content
Cohorts

Cohorts

Cohorts bring everything together. A cohort is a group of profiles (learners) assigned to a set of simulations. It is the final assembly step before learners can run simulation attempts.

What is a Cohort?

A cohort is a named group that links profiles to simulations. When a learner logs in, they see the simulations available in their assigned cohorts. Cohorts also carry profile personas, which tell the AI who each learner is so the AI student character can adapt its behavior.

University example: A “Practice Cohort” might include Professor Smith and TA Johnson with access to practice simulations for rehearsing classroom scenarios. A “Training Cohort” might include the University Admin, Professor Smith, and TA Johnson with access to training simulations for onboarding.

Cohorts list showing cohort cards with name, member count, and simulation count

How It Connects: The 5-Step Workflow

Cohorts are step 4 — the final assembly before learners can run attempts:

  1. Create Personas — Define AI student characters with temperaments and behaviors.
  2. Assign to Scenarios — Attach personas and documents to scenarios.
  3. Add to Simulations — Group scenarios into simulations.
  4. Add to Cohorts — Assign profiles and simulations to a cohort. Configure profile personas to tell the AI who each learner is.
  5. Run Attempts — Learners launch simulations from their cohort.

A cohort requires at least one profile and one simulation. Once both are assigned, the profiles in that cohort can begin running simulation attempts.


Create a cohort

Via the CLI

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

glow cohorts create --body '{ "cohorts": [ { "name": "Practice Cohort", "description": "Practice simulations for CS instructional staff" } ] }'

Via the API

All endpoints use POST and require an Authorization: Bearer header.

curl -X POST $GLOW_INSTANCE_URL/cohort/create \ -H "Authorization: Bearer $GLOW_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "cohorts": [ { "name": "Training Cohort", "description": "Training simulations for new CS department staff" } ] }'

Cohort composition

A cohort contains several key sections that you configure together on the detail page.

Cohort detail showing member list, assigned simulations, and persona override configuration

Profiles

The profiles assigned to a cohort determine who can access its simulations. You can search and filter profiles when adding them.

Example: The Practice Cohort includes Professor Smith and TA Johnson. Both can access the practice simulations assigned to this cohort.

Simulations

The simulations assigned to a cohort determine what learners can practice. A simulation can belong to multiple cohorts.

Example: The Practice Cohort has practice simulations for office-hours scenarios, while the Training Cohort has training simulations for onboarding new instructors.

Simulation positions and availability

Cohorts support simulation positions (ordering how simulations appear) and simulation availability (controlling when simulations are accessible). These are managed through simulation_position_ids / simulation_positions and simulation_availability_ids / simulation_availability on the draft endpoint.

Profile personas

Profile personas tell the AI who the learner is, so the AI student character can adapt its behavior accordingly. For example, a Confused student persona might use more technical language when speaking to a graduate-level TA and simpler language when speaking to an introductory TA — because the profile persona gives the AI context about the learner’s background.

Profile personas are configured at the cohort level. Each profile in a cohort can have a persona assigned that describes the learner’s role, experience level, and background. This is not about changing which AI character the learner faces — it is about giving the AI enough context to interact realistically with different types of learners.

Example: In the Training Cohort:

  • TA Johnson has a profile persona describing them as a first-year graduate TA for CS-180 with limited teaching experience. The AI student character might use simpler questions and be more patient.
  • Professor Smith has a profile persona describing them as a tenured professor with 15 years of teaching experience. The AI student character might ask more challenging questions and push back more.

The persona affects the AI’s behavior, not the learner’s identity. The same “Confused” student character adapts how it expresses confusion based on whether it is speaking with a new TA or a seasoned professor.

Profile personas are managed through profile_persona_ids (existing personas) and profile_personas (new persona values) on the cohort draft endpoint.


Drafts

Cohorts support the draft workflow. Changes are saved as a draft before being published, with optimistic concurrency via expected_version so two editors don’t silently clobber each other.

# Save a cohort draft glow cohorts draft --body '{ "name": "Practice Cohort", "description": "Practice simulations for CS instructional staff" }'

Via the API, use PATCH /cohort/draft with fields like input_draft_id, expected_version, name, description, flag_id, department_ids, simulation_ids, profile_ids, simulation_position_ids, simulation_positions, simulation_availability_ids, simulation_availability, profile_persona_ids, and profile_personas.


Cohorts support rich search and filtering.

  • Profile — Find cohorts containing specific profiles (filter_profile_ids, profile_search)
  • Simulation — Find cohorts containing specific simulations (filter_simulation_ids, simulation_search)
  • Department — Scope to a department (filter_department_ids, department_search)
  • Flag — Filter by cohort flags (flag_search)
# Search cohorts by profile curl -X POST $GLOW_INSTANCE_URL/cohort/search \ -H "Authorization: Bearer $GLOW_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "profile_search": "Johnson", "page_size": 20 }'

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 by explicit IDs:

glow cohorts delete --body '{ "cohort_ids": ["cohort-1", "cohort-2", "cohort-3"] }'

Delete all matching a filter (with exclusions):

glow cohorts delete --body '{ "all": true, "filter_department_ids": ["dept-sunset"], "excluded_ids": ["cohort-keep-this-one"] }'

Bulk update via patch:

glow cohorts update --body '{ "all": true, "filter_department_ids": ["dept-archive"], "patch": { "archived": true } }'

See the Personas guide for the canonical write-up of this pattern — it applies the same way across artifacts that have adopted it.

Common Operations

TaskCLIAPI Endpoint
List all cohortsglow cohorts listPOST /cohort/search
Get a cohortglow cohorts get --body '{...}'POST /cohort/get
Create cohortsglow cohorts create --body '{...}'POST /cohort/create
Update cohortsglow cohorts update --body '{...}'POST /cohort/update
Duplicate a cohortPOST /cohort/duplicate
Delete cohortsglow cohorts delete --body '{...}'POST /cohort/delete
Bulk delete (filter)glow cohorts delete --body '{"all": true, "filter_…": "…"}'POST /cohort/delete
Export to CSVglow cohorts exportPOST /cohort/export
Save a draftglow cohorts draft --body '{...}'PATCH /cohort/draft
List draftsPOST /cohort/drafts
Last updated on