Tensile Docs

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:

  1. Spin a real Slack clone and confirm it's healthy.
  2. Seed it to a known starting state.
  3. Inspect its database to score what happened.
  4. 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 quickstart

It 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-corp

The 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 slack

The 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 ls
slack-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-corp

For realistic, varied data, generate it with an LLM (needs ANTHROPIC_API_KEY):

hone env seed slack-a1b2 --ai

AI 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/health

Use 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" --json

Need an interactive shell? db prints the exact psql command to run:

hone env db slack-a1b2

Watch the backend live while your agent runs:

hone env logs slack-a1b2 -f

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

This 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
TemplateWhat it clones
slackSlack — RPC Web API, the {ok} envelope, MCP server
stripeStripe — payments, customers, invoices
notionNotion — pages, blocks, databases
hubspotHubSpot — CRM contacts, deals, companies
githubGitHub — repos, issues, pull requests
linearLinear — 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.

Where to go next

On this page