Run a sandbox

September 18, 2026 ยท View on GitHub

A sandbox is a short-lived computer that Celesto creates for code or an agent. Give it a name so you can use the same name in later commands.

Create and use one

celesto sandbox create --name demo

Open a shell in the sandbox:

celesto sandbox shell demo

When you are finished, stop or delete it:

celesto sandbox stop demo
celesto sandbox delete demo

Use celesto sandbox list to see your sandboxes, including their current state. celesto sandbox info demo shows one sandbox in detail.

Keep work on your machine

Mount a host directory when an agent needs the files in it. Mounts are read-only by default, so sandbox changes stay in the sandbox.

celesto sandbox create --name project --mount "$PWD:/workspace"

Allow the sandbox to write back only when you intend to share those changes:

celesto sandbox create --name project --mount "$PWD:/workspace" --writable-mounts

Move files and settings

Copy a file into the sandbox:

celesto sandbox file upload demo ./input.txt /tmp/input.txt

Set an environment variable that later sandbox commands can use:

celesto sandbox env set demo API_URL=https://example.com

Share a service running on sandbox port 3000 with your machine. Without a host port, Celesto selects one:

celesto sandbox port expose demo 3000
celesto sandbox port list demo

Python

The same basic lifecycle is available from Python:

from celesto import Celesto

with Celesto() as vm:
    result = vm.run("echo hello")
    print(result.stdout)

Limits and implementation notes

Workspace mounts currently use QEMU; when mounts are requested without an explicit backend, Celesto selects QEMU. The default disk mode is isolated, which gives each sandbox its own writable disk. See src/celesto/facade.py, src/celesto/types.py, and the behavior tests in tests/test_workspace.py, tests/test_facade.py, and tests/test_cli.py.