Fixtures — deterministic and reproducible
A fixture is a named pack of SQL applied directly to the clone’s database. Same fixture, same rows, every time. This is what you want for scored, repeatable evals.seed.fixtures glob (./seeds/*.sql).
acme-corp is the bundled Slack example. Every template supports fixtures.
AI seeding — realistic and varied
AI seeding asks an LLM for a dataset, then creates it through the clone’s REST API — not by injecting SQL. That means every record goes through real signup, real auth, and real validation, so the data is referentially sound the same way a human using the product would produce.ANTHROPIC_API_KEY to enable it; without the key, --ai is skipped with a
warning rather than failing. The model is claude-haiku-4-5.
What it does, in order:
Sign up + create
The first user signs up and creates the workspace; remaining users sign up
and join.
Default volumes
The default brief is “a small, fast-moving software startup.” The generation volume sets the size —medium is the default:
| Volume | Users | Channels | Messages |
|---|---|---|---|
small | 4 | 3 | 12 |
medium (default) | 6 | 4 | 20 |
large | 8 | 5 | 30 |
Fixtures vs AI: which to use
| Use fixtures when… | Use AI when… |
|---|---|
| You’re scoring a repeatable eval and need identical input every run. | You want realistic, varied data that looks human. |
| You’re in CI and can’t depend on an API key or model availability. | You’re exploring agent behavior, not measuring it to the row. |
| You want speed and zero external calls. | A few rejected records are acceptable. |
Reset replays the seed
asymmetric reset <id> drops the database, re-runs migrations, and re-applies
the clone’s last seed. So once a clone is seeded, getting back to that exact
starting state for the next trial is one command — no rebuild. To reset every
clone in an environment at once, use
asymmetric env reset <name>.