BetaPrivate beta is open. Teams are onboarded in stages.

A machine your agent can come back to.

Every dock follows one lifecycle: create, work, archive, resume, branch. Each step is a single API call, and every change of state is async, idempotent, and reconciled.

  1. 1Create

    Launch an isolated Ubuntu machine with root and Docker.

  2. 2Work

    The agent clones repos, installs packages, and runs services.

  3. 3Archive

    The disk is saved as a snapshot. Compute billing stops.

  4. 4Resume

    Same dock, same ID, same files. Pick up where it stopped.

  5. 5Branch

    Copy any snapshot into new docks that change independently.

Step 1 / Create

Ask for a machine. Get an ID right away.

Creating a dock returns immediately with its ID and a starting state. Pick a size (small, default, large, xlarge), a tier, an Environment, and an optional setup script that runs in the background without delaying ready. Send an Idempotency-Key and a retried request returns the same dock instead of a second one.

dk_7f3a91ReadyPOST /v1/docks
curl -X POST https://api.usedock.io/v1/docks \
  -H "Authorization: Bearer $DOCK_KEY" \
  -H "Idempotency-Key: task-4812" \
  -d '{ "type": "default", "environment": "staging" }'
Step 2 / Work

The agent gets a whole computer.

Root, systemd, Docker, package managers, a browser, and the agent CLIs. Connect over SSH, run commands through the API, or let your harness drive it. Docks auto-stop after an hour by default; set ttlSeconds to change that, or null to keep it running.

$ git clone$ bun install$ docker compose upbun test 42 passed
dock ssh dk_7f3a91
# or poll state while your harness works
curl https://api.usedock.io/v1/docks/dk_7f3a91 \
  -H "Authorization: Bearer $DOCK_KEY"
Step 3 / Archive

Stop paying, keep the disk.

Stopping saves the dock as a snapshot and moves it to archived. No compute is billed while archived; snapshot storage is listed separately. If the final snapshot fails, Dock refuses the stop, keeps the dock running, retries on its own, and pauses billing. Nothing is thrown away unless you explicitly force it.

snapshotcomputeBilling stoppedDisk kept as a snapshot
curl -X POST https://api.usedock.io/v1/docks/dk_7f3a91/stop \
  -H "Authorization: Bearer $DOCK_KEY"
# 202: archiving, then archived
Step 4 / Resume

Same dock, same ID, same files.

Resume restores the dock from its snapshot on fresh hardware in the same tier. Repositories, packages, caches, and browser profiles are exactly as the agent left them. You can resize on resume, as long as the new size can hold the data.

sn_2c80e4before archivedk_7f3a91after resumedk_7f3a91same
curl -X POST https://api.usedock.io/v1/docks/dk_7f3a91/resume \
  -H "Authorization: Bearer $DOCK_KEY" \
  -d '{ "type": "large" }'
Step 5 / Branch

One setup, many independent copies.

Branch creates a new dock from a snapshot. It gets its own ID and changes independently of the source and every sibling, while recording which snapshot it came from. Use it to run several agents on the same task, compare approaches, or move a dock to another tier.

sn_2c80e4dk_b41d07dk_c9e2a5dk_e07f13
curl -X POST https://api.usedock.io/v1/docks/dk_7f3a91/branch \
  -H "Authorization: Bearer $DOCK_KEY"

Lifecycle calls return before the work is done. Poll the dock or the operation, and the state you read is the state Dock is converging to, even after a crash.

Tell us what your agents need to run.

Private beta is open. Describe your workload and we will reply about access.