Sandboxes
Create, run, and manage isolated sandboxes from the terminal. Sandboxes are powered by CreateOS — spin up a VM in seconds, run commands, sync files, open shells, and tear down when you're done.
Alias: createos sb
Quick start
Bash1createos login23# See available sizes4createos sandbox shapes56# Create a sandbox7createos sandbox create --shape s-1vcpu-256mb --name my-box89# Run a command inside it10createos sandbox exec my-box -- uname -a1112# Open an interactive shell13createos sandbox shell my-box1415# Delete when done16createos sandbox rm my-box --force
Run createos sandbox create with no flags on a terminal to walk through an interactive setup wizard.
Lifecycle
Create
Bash1createos sandbox create --shape s-1vcpu-1gb --name my-box
| Flag | Description |
|---|---|
--shape <id> | Size (run createos sandbox shapes to list options) |
--name <name> | Friendly name (auto-generated if omitted) |
--rootfs <image> | Base OS image (run createos sandbox rootfs to list) |
--disk-mib <n> | Disk size in MiB |
--ssh-key <path> | SSH public key file (repeatable) |
--env KEY=VALUE | Environment variable for exec (repeatable) |
--ingress | Enable a public HTTPS URL for HTTP services |
--network <name|id> | Join a private network at creation (repeatable) |
--disk <name>:/mount/path | Mount an S3 disk at creation (repeatable) |
--egress <host> | Outbound allowlist at creation (repeatable) |
--auto-pause <duration> | Auto-pause after inactivity (e.g. 10m, 1h) |
Examples:
Bash1# Smallest sandbox2createos sandbox create --shape s-1vcpu-256mb34# With SSH key and public URL5createos sandbox create --shape s-1vcpu-1gb \6 --name demo --ssh-key ~/.ssh/id_ed25519.pub --ingress78# Attach S3 disk and private network9createos sandbox create --shape s-1vcpu-1gb \10 --disk my-bucket:/mnt/data --network my-net
List
Bash1createos sandbox list2createos sandbox list --all3createos sandbox list --status paused4createos sandbox list --quiet # IDs only — useful for scripting
Get details
Bash1createos sandbox get my-box
Shows status, size, IP, public URL, firewall rules, bandwidth usage, and timestamps.
Edit settings
Bash1createos sandbox edit my-box --ingress on2createos sandbox edit my-box --add-ssh-key ~/.ssh/id_ed25519.pub3createos sandbox edit my-box --auto-pause 30m4createos sandbox edit my-box --auto-pause off
Run createos sandbox edit my-box with no flags for an interactive menu.
Pause and resume
Pause snapshots the sandbox to durable storage and tears down the live VM:
Bash1createos sandbox pause my-box2createos sandbox resume my-box
Paused sandboxes keep their name, ID, disks, networks, and environment variables.
Fork
Clone a paused sandbox into a new one:
Bash1createos sandbox fork my-box2createos sandbox fork my-box --paused
Delete
Bash1createos sandbox rm my-box2createos sandbox rm sb-01k... sb-01k... --force
Use --force in scripts and CI to skip the confirmation prompt.
Run commands
One-shot exec
Bash1createos sandbox exec my-box -- uname -a2createos sandbox exec my-box -- python3 -c 'print("hi")'3createos sandbox exec my-box --stream -- pip install requests
Anything after -- is the command. The sandbox's exit code is preserved.
| Flag | Description |
|---|---|
--stream, -s | Stream stdout/stderr live |
--env KEY=VALUE | Override an env var for this exec (repeatable) |
Interactive shell
Bash1createos sandbox shell my-box2createos sandbox shell my-box --ssh3createos sandbox shell my-box -i ~/.ssh/id_ed25519
By default, shell opens a keyless PTY through the control plane — your API token is the only auth. Pass --ssh to use the SSH path instead.
Files
Push (upload)
Bash1createos sandbox push my-box ./main.py /workspace/main.py2tar -c mydir | createos sandbox push my-box - /tmp/bundle.tar
Max 500 MB per file. Remote paths must be absolute.
Pull (download)
Bash1createos sandbox pull my-box /workspace/result.csv ./result.csv2createos sandbox pull my-box /workspace/result.csv - | head -5
Sync (bidirectional)
Two-way directory sync between your laptop and a sandbox (uses Mutagen over SSH):
Bash1createos sandbox sync my-box --local ~/work/project --remote /root/work
Press Ctrl+C to stop. Refuses to sync sensitive paths like $HOME, .ssh, and system directories by default.
Networking
Port tunnel
Forward a local port to a port inside the sandbox — no SSH key required:
Bash1createos sandbox tunnel my-box --local 8080 --remote 80002createos sandbox tunnel my-box --remote 54323createos sandbox tunnel my-box --remote 80 --bind 0.0.0.0
Press Ctrl+C to stop the tunnel.
Private networks
Sandboxes on the same network can reach each other by name:
Bash1createos sandbox network create my-net2createos sandbox network ls3createos sandbox network attach my-box my-net4createos sandbox network detach my-box my-net5createos sandbox network rm my-net
Attach at creation with --network, or live-attach later with network attach.
Firewall (egress)
Control outbound internet access:
Bash1createos sandbox firewall show my-box2createos sandbox firewall set my-box pypi.org github.com3createos sandbox firewall clear my-box
When no rules are set, all outbound traffic is allowed.
S3 disks
Register S3-compatible buckets and mount them into sandboxes:
Bash1createos sandbox disk create my-disk \2 --bucket my-bucket \3 --endpoint https://s3.amazonaws.com \4 --access-key AKIA... \5 --secret-key ...67createos sandbox disk ls8createos sandbox disk attach my-box my-disk:/mnt/data9createos sandbox disk detach my-box my-disk10createos sandbox disk rm my-disk
Mount at creation with --disk my-disk:/mnt/data.
Custom images
Build your own sandbox rootfs from a Dockerfile:
Bash1createos sandbox template submit my-rails -f Dockerfile2createos sandbox template ls3createos sandbox template show my-rails4createos sandbox template logs my-rails5createos sandbox template rm my-rails
Use a built template as --rootfs when creating a sandbox.
Catalog
Bash1createos sandbox shapes # Available sizes (vCPU / RAM / disk)2createos sandbox rootfs # Built-in OS images
Non-interactive / CI usage
Sandboxes work in scripts with explicit arguments and --force where needed:
Bash1# Create headlessly2createos sandbox create --shape s-1vcpu-256mb --name ci-box34# Run a command and capture output5createos sandbox exec ci-box -- npm test67# JSON output8createos sandbox list --output json | jq '.[].id'910# Delete without prompt11createos sandbox rm ci-box --force
Global flags
| Flag | Description |
|---|---|
--sandbox-api-url | Override the API base URL |
--sandbox-gateway | SSH gateway for sandbox shell --ssh |
--output json | Machine-readable output |