lifecycle — start, stop, reset, destroy
Move a clone through its lifecycle without rebuilding it.
Four verbs control a clone after it's been spun. All take a clone id and fail
with CLONE_NOT_FOUND if it doesn't exist.
reset
hone env reset <id>Returns a clone to a clean, seeded state without a rebuild — the fastest way to start the next trial from identical input.
It drops the database (terminating live connections), recreates it, re-runs all migrations, restarts the backend to rebind its connection pool, waits for health (90s), and re-applies the clone's last seed if it had one.
✓ reset slack-a1b2 (dropped, re-migrated, re-seeded)| Error | Cause |
|---|---|
CLONE_NOT_FOUND | No clone with that id. |
HEALTH_TIMEOUT | The backend didn't come back healthy in 90s. |
CLONE_START_FAILED | A drop/recreate/migrate/restart step failed. |
start
hone env start <id>Starts a previously stopped clone. Runs docker compose up -d with the
clone's saved ports and marks it running. Silent on success.
| Error | Cause |
|---|---|
CLONE_NOT_FOUND | No clone with that id. |
CLONE_START_FAILED | compose up failed. |
stop
hone env stop <id>Stops a running clone without destroying its data. Runs docker compose stop
(volumes preserved) and marks it stopped. Silent on success. Bring it back with
start.
| Error | Cause |
|---|---|
CLONE_NOT_FOUND | No clone with that id. |
CLONE_START_FAILED | compose stop failed. |
destroy
hone env destroy <id>Tears a clone down completely: docker compose down -v (containers + volumes),
drops the database, frees its ports, and removes it from the registry.
✓ destroyed slack-a1b2| Error | Cause |
|---|---|
CLONE_NOT_FOUND | No clone with that id. |
How they relate
spin ──▶ [running] ──stop──▶ [stopped] ──start──▶ [running]
│ │
│◀───────────────── reset ─────────────────┤ (clean + re-seed)
│ │
└──────────────── destroy ────────────────┘ (gone)