Sandboxes

Start with Docker; choose a cloud backend only when needed.

Edit on GitHubllms.txt

BenchFlow needs an isolated place to install an agent, expose the task workspace, and run the verifier. For local development, that place is Docker. Cloud sandboxes are optional scaling backends.

Which sandbox should I use?

SandboxUse it whenSetup
DockerYou are learning BenchFlow, developing a task, debugging a run, or running a small batch locallyDocker daemon; included in the base install
Apple ContainerYou are on a supported Apple Silicon Mac and want Apple's native container runtimeApple container CLI; no BenchFlow extra
DaytonaYou need many independent cloud VMs for a light, highly parallel batchOptional extra plus DAYTONA_API_KEY
ModalYou need serverless or GPU-backed remote executionOptional extra plus Modal auth
AgentCoreYour deployment is built around AWS Bedrock AgentCore RuntimeOptional extra plus AWS configuration

Docker is the CLI default. If your tasks and model calls fit on one machine, there is no reason to configure Daytona.

Local Docker

docker info >/dev/null

bench eval run \
  --tasks-dir tasks/my-task \
  --agent codex \
  --model gpt-5.5 \
  --sandbox docker

Start with --concurrency 1 or 2, then raise it while watching local CPU, memory, disk, Docker build pressure, and provider rate limits. Docker uses host disk capacity and supports multi-container task environments.

Apple Container

On supported Apple Silicon Macs:

bench eval run \
  --tasks-dir tasks/my-task \
  --agent codex \
  --model gpt-5.5 \
  --sandbox apple-container

Apple Container is a single-container backend and currently cannot enforce a task's no-network policy. Use Docker for multi-service or strict no-network tasks.

Daytona

Install Daytona support only when you need it:

uv tool install --python 3.12 --upgrade 'benchflow[sandbox-daytona]'
export DAYTONA_API_KEY='...'

bench eval run \
  --tasks-dir tasks \
  --agent gemini \
  --model gemini-3.1-pro-preview \
  --sandbox daytona \
  --concurrency 32

Daytona is useful for parallel experiments because each rollout gets a remote VM. It is not a prerequisite for a single evaluation. Daytona also caps each sandbox at 10 GB of storage, so tasks with large model snapshots, Playwright, LaTeX, or other heavy images may fail during bootstrap. Run those tasks with Docker when local host disk is available.

uv tool install --python 3.12 --upgrade 'benchflow[sandbox-modal]'
uv tool install --python 3.12 --upgrade 'benchflow[sandbox-agentcore]'

Select them with --sandbox modal or --sandbox agentcore after configuring the provider's authentication. Both are deployment choices for specific remote workloads, not part of the local quickstart. They are single-container backends; AgentCore also cannot enforce no-network tasks.

Keep the task portable

The sandbox flag selects where a task runs; it should not change what the task means. Develop and debug with Docker first, then run a small parity check on the intended cloud backend before starting a batch. If a task requires a backend-specific capability, document that requirement in the task rather than silently assuming Daytona.