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.
![]()
How It Connects: The 5-Step Workflow
Cohorts are step 4 — the final assembly before learners can run attempts:
- Create Personas — Define AI student characters with temperaments and behaviors.
- Assign to Scenarios — Attach personas and documents to scenarios.
- Add to Simulations — Group scenarios into simulations.
- Add to Cohorts — Assign profiles and simulations to a cohort. Configure profile personas to tell the AI who each learner is.
- 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.
![]()
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.
Filtering and search
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
| Task | CLI | API Endpoint |
|---|---|---|
| List all cohorts | glow cohorts list | POST /cohort/search |
| Get a cohort | glow cohorts get --body '{...}' | POST /cohort/get |
| Create cohorts | glow cohorts create --body '{...}' | POST /cohort/create |
| Update cohorts | glow cohorts update --body '{...}' | POST /cohort/update |
| Duplicate a cohort | — | POST /cohort/duplicate |
| Delete cohorts | glow cohorts delete --body '{...}' | POST /cohort/delete |
| Bulk delete (filter) | glow cohorts delete --body '{"all": true, "filter_…": "…"}' | POST /cohort/delete |
| Export to CSV | glow cohorts export | POST /cohort/export |
| Save a draft | glow cohorts draft --body '{...}' | PATCH /cohort/draft |
| List drafts | — | POST /cohort/drafts |
Related
- Cohorts API
- Cohorts CLI
- Profiles Guide — the people assigned to cohorts
- Departments Guide — cohorts are scoped to departments