sandbox-cli
sandbox studio

Your sandboxes, in a browser, from one command

Studio is a client of the same API as the CLI and the SDKs, served by sandbox-cli itself on a loopback port. It talks to whichever sandboxd your context points at — your Mac, your Linux box — and does the host-side work the CLI does, such as copying an agent's saved login in and back out.

$sandbox-cli studio
# Studio: http://127.0.0.1:7080/#token=cb0fbb4f…
# studio: context local · Ctrl-C to stop

Open the address it prints. --context picks another sandboxd, --port another port. Closing Studio leaves every sandbox it started running; the next Studio finds them again. Every screen, which ones a gateway key's scopes open, organizations and the hosted build are in the Studio docs.

a look

The same sandboxes, on a page

Taken from a real sandboxd: Firecracker microVMs on a Linux machine, run without root, which is why each network says none. Select one for full size.

Sandbox Studio, the Sandboxes screen
Sandboxes. Every sandbox on the server, wherever it was started, with what it was given and what the machine has left.
Sandbox Studio, the One sandbox screen
One sandbox. Its details, editable while it runs, beside a terminal, its desktop, its processes' output from the first byte, its files and its events.
Sandbox Studio, the Playground screen
Playground. An agent unattended, an agent's console, or a command, with the same run as CLI, curl, Python and TypeScript beside it.
Sandbox Studio, the Images screen
Images. What sandboxes start from: installed ahead of the first one, with size and use, and removed when nothing needs it.
Sandbox Studio, the Templates screen
Templates. Sizes by name, built in or saved, measured against what this endpoint allows.
Sandbox Studio, the Snapshots screen
Snapshots. A running sandbox captured whole, memory and disk, to start new ones from.
screens

Launch, watch, answer, inspect

Nothing here is a second implementation of the CLI: every screen is an API call or the same host-side code, so a rule the CLI keeps, Studio keeps.

Sandboxes

The home screen: every sandbox on the sandboxd, started from Studio, the CLI or an SDK, searched and filtered by state, with what each was given. With none yet, a first-run panel with the code to start one. Each sandbox has an overview, a real terminal, its processes' logs from the first byte, its files, and its audit events.

Playground

A command, an agent run unattended, or an agent's interactive console, in a fresh sandbox that starts in its own home directory — with the same config, profile, network policy, labels, volumes and agent login a sandbox-cli run would get. Beside the form, the same command run as CLI, curl, Python and TypeScript, to repeat it from a script.

Snapshots

Sandboxes captured whole — memory, processes and disk — to start new ones from, where the backend offers them.

Agents, Volumes, Settings

The agents Studio runs, each with a verified headless mode, and whose login is saved; named volumes and where each is mounted; the context and what its sandboxd can deliver.

Through a gateway

When the context is a sandbox-gateway, Studio asks who the API key is and adds what that key may use: Jobs, Services, Secrets (names only), SSH and Account — and for an admin key, Nodes, Lost sandboxes, Users & keys and Audit. Actions the key's scopes do not allow are not offered. A plain sandboxd shows exactly the screens above.

Organizations

On a gateway, a switcher at the top of the sidebar lists the organizations you belong to. Switching clears everything shown, so nothing of the last one stays on screen; Create organization (with org:create) makes one you own, and Members lets an owner add and remove people. On a plain sandboxd there is no switcher.

A hosted dashboard

Built with NEXT_PUBLIC_STUDIO_ADMIN=off, Studio leaves the admin screens out of the bundle entirely, for a dashboard served to many tenants. The gateway's refusal stays the control; the build only means they are not shipped.

who may use it

A local tool that can start sandboxes still needs a lock

Anything that can reach Studio's API can start sandboxes, and agents with your saved logins. These are the three reasons a web page you happen to have open cannot.

Loopback only, and a loopback Host

Studio listens on 127.0.0.1 and answers only Host headers naming loopback, so a page whose own name resolves to 127.0.0.1 — DNS rebinding — is refused: the name it dialled gives it away.

A token per launch

A loopback port is reachable by every user on the machine. Every request to Studio's API needs the token in the address sandbox-cli studio prints; it travels in the URL's fragment, which is never sent to a server, and is kept for the tab only.

The browser never holds sandboxd's token

Studio proxies sandbox calls to the context's sandboxd and adds that sandboxd's token itself. A cross-origin request is refused outright, and a body that is not JSON — the shape of a request that skips a browser's preflight — is refused too.