A population of synthetic learners, each an agent with six parameters grounded in learning-science research — prior knowledge, learning rate, slip, guessing, hint-seeking and forgetting. Shape the cohort, save named populations, and reuse them across tests. Everything is deterministic from the seed.
Cohort
Parameter distributions
Export this cohort
Describe your app or game as a sequence of skills, each with its own difficulty, and run the whole population through it — no code. See where they master, stall, guess, and need help, and how often the adaptive triggers would fire. The default is a Pythagorean-theorem unit.
Activity — skills & difficulty
| Skill | guess | slip | learn |
|---|
Adaptive engine
Per-skill mastery
Final mastery distribution
The population is live on this page as SyntheticPersonas. Write the real scoring or
difficulty logic of your app against it and run the whole cohort through it. Your code runs in this page; nothing leaves
the browser.
Your code
Output
Run your code to see output.
API
Load a web game and drive it with persona players. The game and the lab talk over a tiny
postMessage protocol: the game asks the lab how a given persona would answer an item, and reports
each player's outcome. A working demo game is loaded below.
Game under test
persona-test:init with its players, then for each item it
posts persona-test:item {playerId, item:{guess,slip,learn}} and the
lab replies persona-test:response {correct, latencyMs, usedHint}.
The game posts persona-test:result per player. A game only runs if it includes the
adapter and allows being framed; otherwise it just loads for viewing.
Live from the game
Run the players to see the game report back.