Scenarios¶
A scenario is the task the agents are given: who they are, what each of them privately knows, which channels they talk on, what each round's briefing tells them, what they can do, and what counts as success. The platform supplies the machinery that runs all of that: the round clock, message delivery, event logging, and the evaluation runner that applies the scenario's own scoring rule.
The scenarios shipped here all study communication under pressure. Each splits the information needed to act across agents, so nobody can solve a round alone, and most then charge for the talking: every character sent on the shared channel costs against a per-round budget, which is the pressure that makes agents compress. A scenario of your own carries no such obligation: the same machinery runs any task you can state as roles, channels, tools and a success rule.
The other shared pressure is channel noise. In scenarios with a
channel_noise_level knob, each character sent on the task channel is
corrupted in transit with that probability. noise_replacement_mode picks what
the receiver sees in its place: an underscore marking the loss (mask), or a
random letter hiding it (random_letter). The sender's text is recorded
pristine, so the metrics score what the agents composed while the agents
themselves must build a protocol that survives the corruption.
The shipped presets all run noise-free, so activate it as an override on top of one:
glossogen run veyru \
--model claude-sonnet-4-6 --provider anthropic --runs-dir ./runs \
--config knobs_default \
channel_noise_level=0.1 noise_replacement_mode=mask
The budget is a knob (round_time_budget_seconds), and the rows from
hospital_bed_assignment_privacy down do without it. spot_the_difference and
spot_the_intersection let the team that spent fewest characters win instead,
hospital_bed_assignment_privacy gets its pressure from an eavesdropper on the
channel, prisoners_dilemma has no such knob, and textcraft_shared_workspace
leaves it unlimited in its presets and budgets the team's actions and tokens.
signal_game has no channel to meter. The column is each scenario's own default
preset.
| Scenario | Agents | Round scoring | Default char budget |
|---|---|---|---|
| veyru | 2 | LLM judge | 150 |
| warehouse_robot_recovery | 3 | LLM judge | 200 |
| satellite_contact_window | 3 | LLM judge | 200 |
| container_yard_stacking | 3 | Deterministic | 140 |
| drive_module_repair | 3 | LLM judge | 900 |
| orbital_anomaly | 3 | LLM judge | 600 |
| spillway_release | 3 | Deterministic | 300 |
| hospital_bed_assignment_privacy | 3 | Deterministic | none (null) |
| spot_the_difference | 4 (2 per team) | LLM judge | none (-1) |
| spot_the_intersection | 8 by default (team_size per team, 2 to 12; above 4 the grid must grow) |
Deterministic | none (-1) |
| prisoners_dilemma | 2 | Deterministic | no such knob |
| textcraft_shared_workspace | 3 (a knob; 1 is the baseline) | Deterministic | none (-1) |
| signal_game | 2 | Deterministic | no channel |
Each scenario's README is the reference for its domain, agents, tools, knobs and scoring rules. What follows is only enough to pick one.
Veyru¶

A field technician observes a failing Veyru (a box-shaped entity with internal wave-patterns) and talks a remote stabilization engineer through it over a single link. Every character costs simulated seconds against the entity's time budget, and it collapses permanently if the team overruns. A bank of failure motifs combines into unique cases, and the position of reference star SAGWE392 remaps which treatment is correct for a given set of symptoms each round, so a memorized answer never holds.
Only the engineer can read the star, so communication is required every round rather than only at the start. The most exercised scenario here, and the one the swap and probe experiments were built against.
Warehouse robot recovery¶
A floor associate stands next to a stopped robot and is the only one who can see it. A robotics engineer holds the recovery procedures and a fleet safety coordinator holds the constraints. Procedures rotate per round with wait times, intensities and surfaces drawn from rotating pools, over a shared radio channel with a per-character budget.
Satellite contact window¶
A satellite is visible for a short window each round. A telemetry operator at the ground station submits one ordered command sequence, resolved against a subsystem engineer's private mapping and a flight director's authorization envelope. Three sources of rotating private knowledge, one judged submission.
Container yard stacking¶
Containers carry no ID numbers, only visible attributes (colour, size, type, marking). A spotter can read attributes and sees which intake slot each container is in. A planner knows which bay each container belongs in. A crane operator can move a container between any two slots but cannot tell containers apart. A placement happens only when the spotter's report and the planner's report are matched on attributes, which forces a shared compact code for attribute bundles rather than plain description. Assignments are drawn fresh each round.
Drive module repair¶
Three agents service failing drive modules: a field technician who sees the diagnostic panel and is the only one who can act, a diagnostics engineer holding this round's fault tree, and a spec engineer holding the full multi-step replacement procedure. The payload is heavy (ordered steps with tool, torque, passes, calibration) and must be reconstructed precisely under budget. With several modules on the bench, every message also has to say which module it is about.
Orbital anomaly¶
The same forcing functions as veyru (a rotating cipher, a combinatorial free-text action space, a naive-reader judge, a per-character budget) with a third structurally non-redundant agent. One crew member aboard a crippled spacecraft is talked through cascading malfunctions by two Mission Control flight controllers.
Spillway release¶
Three agents manage a reservoir: keep the dam from collapsing and from draining to shortage, and never send a release downstream while the hiking park is occupied. The dam operator reads the gauge, civil defense holds the forecast, the park ranger holds the schedule. Scoring is arithmetic, with no judge.
Hospital bed-assignment privacy¶
Two-sided pressure. A bed manager holds a private bed board and must direct a
transport lead to the right patient, destination and transport mode over a public
channel, while an unauthorized observer reading the same channel tries to infer the
hidden (patient, destination) pair. A round succeeds only when the routing is
correct and every intercept attempt fails, so correctness alone is not enough. The
default preset leaves round_time_budget_seconds null: as shipped, the only
pressure on how the two of them talk is the Observer reading it.
Spot the difference¶
Reconstruction from split data. Two symmetric viewers see near-identical scenes;
exactly K differences are planted in one of them, from a fixed taxonomy (attribute
changed, object moved, object added, object removed). Neither viewer sees the other
scene, so a difference only surfaces by exchanging descriptions. Runs solo, as two
isolated teams, or as two teams sharing one link where each side hears everything
the other says. Characters are counted but not capped by default
(round_time_budget_seconds: -1): among the teams that found every difference, the
one that spent fewest wins. Set the knob positive to add the wall back.
Spot the intersection¶
Finding the one object every viewer holds. Each viewer has a private board of
shapes and colors on a shared grid; exactly one object is on every board of a
team, and the rest are on some boards but not all. team_size sets the viewers
per team, from 2 to 12. The presets' 6×6 grid fits 3 or 4 as shipped, and 2 with
decoys off (decoy_count_values: [0] and decoy_count_weights: [1]); larger
teams need a larger grid_size. With near_misses on (the default),
certification requires that leaving out any one board leaves at least two
candidates, so every viewer is needed, and every member must submit the common
object for the team to be right.
Two teams play the same boards, and among correct teams the one that said least
wins. simulated_opponent_ratio replaces Team B with a simulated team that is
always right in a share of Team A's characters, fixed or drawn each round from a
range, while Team A reads exactly what it would against a real team. Every round is certified from the lines the
viewers read before it is played, and recorded runs can be audited against what
each viewer was sent.
Prisoners' dilemma¶
Iterated prisoners' dilemma. Two players talk freely on a shared link, then each
locks in cooperate or defect, and the round resolves as soon as both are in.
Judge-free: the move is an enum and the payoff is arithmetic, so round_success is
fully reproducible. The cheapest scenario for exercising platform machinery without
paying for a judge.
TextCraft shared workspace¶
A team crafts every target of a synthetic TextCraft-style recipe grid from one
finite depot that every agent sees and changes. No target is assigned: the agents
decide who crafts what, over a broadcast channel and direct messages, or without
messaging when comms_enabled is off. The grid's width and depth fix the work and
the critical path, and the team size is a separate knob, so a single agent on the
same task is the baseline. recipe_holders deals the recipes out so teammates know
different things.
Judge-free. Messages arrive inside tool results, so agents have no channel browsing
tools, and an agent waits with read_notifications(wait_for="message") or declares
the round finished with read_notifications(wait_for="next_round"). Its
virtual_clock knob orders agents by simulated API latency rather than by when a
shared inference server answered, so the simulated makespan does not depend on how
fast the server was.
Signal game¶
Two players each move a figure on their own small grid of coloured squares, and score when both finish on the same colour. Each sees its own colours and every move the partner makes, never the partner's colours. There is no channel and no tool that takes text, so a signal has to be made out of moves. It adapts the Embodied Communication Game of Scott-Phillips, Kirby & Ritchie (2009), and tells the agents what the paper told its participants: "coordinate with your partner". A control shows both grids, leaving nothing to signal.
Judge-free. The excess_moves metric counts each player's moves beyond the shortest
path to its final square, the costly movement the paper's participants used to mark
a move as a signal. longest_streak is the paper's own score, the most rounds won
in a row.
Working with scenarios¶
Which scenarios exist is read from the environment: glossogen run --help
prints the installed ones, and so do
list_scenarios over MCP and
GET /api/g/{slug}/scenarios over REST. A scenario installed from another package
appears in all three.
Presets ship next to each scenario as knobs_*.json, and every scenario publishes
a JSON Schema for its knobs. See
Running simulations.
To write your own, in this repository or in your own package, see Creating a scenario.