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:
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.
Default volumes
The default brief is “a small, fast-moving software startup.” The generation volume sets the size —medium is the default:
Fixtures vs AI: which to use
You can combine them: load a fixture for the deterministic backbone, then layer
AI data on top.
Reset replays the seed
hone env 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
hone env reset <name>.