Skip to main content
A fresh clone is empty. Seeding puts it into a known starting state so your agent run begins from the same place every time. asymmetric has two ways to seed, and you can use both.

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.
asymmetric seed slack-a1b2 --fixture acme-corp
Or seed on spin in one step:
asymmetric spin slack --seed acme-corp
Available fixtures come from the template’s 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.
asymmetric seed slack-a1b2 --ai
The generator produces a Slack-shaped workspace (workspaces, channels, messages) and drives the Slack API to create it — so AI seeding targets the Slack clone today. For the other templates, use fixtures. Set 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:
1

Generate

Claude returns a dataset: a workspace, users, channels, and messages.
2

Sign up + create

The first user signs up and creates the workspace; remaining users sign up and join.
3

Channels + messages

Channels are created and joined, then messages are posted as their authors.
4

Count

Written and rejected records are tallied. Rejections are best-effort — a few bad records don’t fail the whole seed; up to five warnings are shown.
  ✓ seeded slack-a1b2  (ai: 20 (0 rejected))
    ! signup alice-0: 409 conflict

Default volumes

The default brief is “a small, fast-moving software startup.” The generation volume sets the size — medium is the default:
VolumeUsersChannelsMessages
small4312
medium (default)6420
large8530

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.
You can combine them: load a fixture for the deterministic backbone, then layer AI data on top.

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>.