Quickstart
Spin a Slack clone, seed it, point an agent at it, and tear it down.
This walks you from nothing to a running, seeded clone you can point an agent at. It takes about five minutes, most of which is Docker pulling the image on the first spin.
By the end you'll have done the whole loop by hand:
- Spin a real Slack clone and confirm it's healthy.
- Seed it to a known starting state.
- Inspect its database to score what happened.
- Reset it for the next trial, then destroy it.
Each is one command. The one-command path does all of it for you; the rest of the page is the same thing, step by step, so you understand each piece.
Prerequisites
Docker installed and running (docker ps should work).
Node.js >= 18.
The CLI available — npx @asymmetric-ai/hone-cli or npm i -g @asymmetric-ai/hone-cli (see Installation).
Optional: ANTHROPIC_API_KEY in your environment, for AI seeding.
The one-command path
If you just want the magic, run:
hone env quickstartIt preflights Docker, spins a Slack clone, seeds the acme-corp fixture, and
prints a ready-to-run curl plus the hone env query to read the clone's state:
✓ slack-a1b2 ready in 38.2s
API: http://127.0.0.1:3001/api · seeded: acme-corpThe steps below do the same thing by hand so you understand each piece. (Slack is
the default; pass --template <name> to quickstart a different one — see
all templates.)
1. Spin a clone
hone env spin slackThe first spin pulls the image and starts shared Postgres + Redis, so give it a minute. When it's healthy you get a card with the clone id, its endpoint, and the programmatic-access tokens it auto-provisions:
✓ slack-a1b2 (api) http://127.0.0.1:3001/api ready in 38.2s
db clone_slack_a1b2 · env -
bot token xoxb-…
user token xoxp-…slack-a1b2 is the clone id — you'll pass it to every other command. The
short suffix is random, so yours will differ. The bot/user tokens are the
fastest way to point an agent at the clone; reprint them later with
hone env tokens slack-a1b2. See Connect your agent.
2. Confirm it's running
hone env lsslack-a1b2 slack api running -3. Seed a known starting state
For a reproducible run, load a deterministic fixture:
hone env seed slack-a1b2 --fixture acme-corpFor realistic, varied data, generate it with an LLM (needs
ANTHROPIC_API_KEY):
hone env seed slack-a1b2 --aiAI seeding asks Claude for a dataset, then creates it through the clone's own HTTP API — real signups, workspace/channel creation, and message posts (the clone's REST control-plane routes), each performed as the right user so auth and referential integrity stay intact:
✓ seeded slack-a1b2 (ai: 20 (0 rejected))4. Point your agent at it
Your agent talks to the clone exactly like real Slack, over the endpoint from step 1. A quick liveness check:
curl http://127.0.0.1:3001/api/healthUse that base URL (or the clone's MCP server) as your agent's target, with a bot or user token as the bearer — everything it does lands in the clone's own database. The full wiring, with auth and a worked example, is in Connect your agent.
5. Inspect what happened
Read the database directly to score the run. Queries are read-only by default, so you can't corrupt the clone:
hone env query slack-a1b2 "select count(*) from messages"Get JSON for programmatic scoring:
hone env query slack-a1b2 "select id, name from channels" --jsonNeed an interactive shell? db prints the exact psql command to run:
hone env db slack-a1b2Watch the backend live while your agent runs:
hone env logs slack-a1b2 -f6. Reset for the next trial
reset drops the database, re-runs migrations, and re-applies the last seed —
back to an identical starting state, no rebuild:
hone env reset slack-a1b2 ✓ reset slack-a1b2 (dropped, re-migrated, re-seeded)7. Tear it down
hone env destroy slack-a1b2 ✓ destroyed slack-a1b2This removes the containers, drops the database, frees the ports, and deletes the clone from your registry.
More templates
Slack is one of six templates that ship today. List them all:
hone env ls --templates| Template | What it clones |
|---|---|
slack | Slack — RPC Web API, the {ok} envelope, MCP server |
stripe | Stripe — payments, customers, invoices |
notion | Notion — pages, blocks, databases |
hubspot | HubSpot — CRM contacts, deals, companies |
github | GitHub — repos, issues, pull requests |
linear | Linear — issues, projects, cycles |
hone env spin <template> works the same for every one. Browse the
Templates section for each one's API shape and fidelity.