Skip to main content
This page is for teams that run Boat sandboxes from the CLI, scripts, or GitHub Actions and want the same work on InstaBox. Most commands map one to one. The CI change is one line per job.

What maps to what

Move a dev machine

1

Sign in and create a machine

./dev.env holds the plain KEY=VALUE lines that your Boat environment set. Put API keys, secret variables, and secret files in Secrets instead (step 4).
2

Copy your files in and run a command

push copies into the machine’s home directory. In a git repository it copies only tracked files; add --all for the rest.
3

Open a port

The CLI prints https://3000-<machine id without m_>.<domain>/. Add --private to get a link that only its holder can open. See Public and private ports.
4

Move your secrets

For an API key sent in HTTPS headers, save a proxy Secret. The machine sees a placeholder, and the outbound proxy adds the real value to requests to api.example.com:
For a model provider key, use --ai anthropic (or openai, gemini, openrouter) instead of --host.For a value the proxy cannot carry, such as a secret file, an SSH key, or a database URL, save a direct Secret and give it to dev. The machine gets the real value as a variable, a file, or both:
These flags replace the machine’s direct references and keep the proxy Secrets selected above. A new machine takes the same flags at create, such as instabox create --name worker --secret-env DATABASE_URL=PROD_PG.The file is on tmpfs, linked from the path in the home directory, so it is not on the machine’s disk. To save a Secret, you need to be an org owner or admin. If the CLI says the site does not take direct Secret files or renamed variables yet, use a variable with the Secret’s own name: --secret-env PROD_PG. See Put the real value in the machine with a direct Secret.
5

Pause, stop, and delete

A machine also pauses itself after idle minutes, and a visit to a published port wakes it. When you no longer need the machine, delete it:

Move CI jobs

1

Connect GitHub

On the dashboard’s CI page, click Connect GitHub. This replaces boat ci connect.
2

Change runs-on

Before:
After:
Each job gets a fresh Ubuntu 24.04 machine with the tools of GitHub’s ubuntu-24.04 image.
3

Map the other labels

A snapshot label needs a snapshot saved from a ci machine, in a private repository. See Start jobs from a snapshot. The plans each label needs are in CI.
4

Watch the jobs

instabox ci and the dashboard’s CI page list your jobs. They replace boat ci, boat ci job, and boat ci logs.
If your workflow calls the Boat CLI from a step instead, replace the Boat steps with one instabox run:
instabox run creates the machine, runs the command, and deletes the machine, also on failure. Store the key with instabox keys create --name github-ci --expires-in-days 90 --json | jq -r .key | gh secret set INSTABOX_API_KEY.

What works differently

InstaBox has no named, reusable environments. Keep the variables in an env file and pass --env-file at create, run setup with --setup-file, and save a prepared machine as a snapshot to start new machines from it.
You cannot change a machine’s variables after create. Set one for a single command with instabox exec dev --env KEY=VALUE -- <cmd>, or create the machine again.
Boat keeps secret variables and files in an environment. InstaBox keeps them as Secrets of the org, and each machine references the ones it needs. Proxy Secrets keep the real value out of the machine. Direct Secrets (--direct) put it in, as a variable or a tmpfs file, and any code in the machine can read and copy them, as with Boat’s environment secrets.
Boat’s stop saves the disk and frees the machine, so it maps to instabox stop, and Boat’s resume after a stop maps to instabox start. InstaBox also has a pause: suspend keeps memory and running processes, and resume continues where the machine left off.
  • The CI debug option, which keeps a failed job’s sandbox. To look at a failure, run the command with instabox run --keep, which keeps the machine and prints its name.
  • Nested virtualization (/dev/kvm).
  • Raw UDP ports. Raw TCP ports are in preview. See Public and private ports.
  • Coding agents other than Claude Code and Codex in instabox agent prompt. Install another agent in the machine and run it with instabox exec.

Let your coding agent do the migration

Paste this prompt into your coding agent in the repository you want to move.

Troubleshooting

instabox ci says why a job waits or was refused. Check that the GitHub App is connected to the repository and that your plan includes the label’s size.
Every plan has a limit on machines, paused ones included. instabox usage shows the count and the limit. Delete machines you no longer need with instabox rm.
The free plan creates machines from only. A snapshot is not limited.
Nothing listens on the port, or the server listens on 127.0.0.1 only. Start the server on 0.0.0.0 or check it with instabox exec dev -- 'curl -sI localhost:3000'.

CLI reference

Every command and flag.

CI

Runner labels, snapshots, and the GitHub App.