• English
  • Security

    By default, a local AIO Sandbox is intended for trusted local development. When exposing it to a network or another service, add authentication and limit access.

    JWT Authentication

    Set JWT_PUBLIC_KEY to enable Bearer token verification. Your application signs tokens with the private key, and the sandbox verifies them with the public key.

    Generate a key pair:

    openssl genrsa -out private_key.pem 2048
    openssl rsa -in private_key.pem -pubout -out public_key.pem

    Start the sandbox with the public key:

    docker run --security-opt seccomp=unconfined --rm -it \
      -p 127.0.0.1:8080:8080 \
      -e JWT_PUBLIC_KEY="$(base64 -w 0 public_key.pem)" \
      ghcr.io/agent-infra/sandbox:latest

    Call APIs with a Bearer token:

    curl "http://localhost:8080/v1/sandbox" \
      -H "Authorization: Bearer $SANDBOX_TOKEN"

    Short-Lived Tickets

    For browser access or temporary handoff flows, prefer short-lived tickets when supported by your deployment. Tickets should expire quickly and be scoped to the minimum required access.

    Network Boundaries

    • Bind the sandbox to localhost unless remote access is required.
    • Put a reverse proxy with TLS in front of the sandbox for shared environments.
    • Restrict inbound access by IP, network, or service identity.
    • Do not expose unauthenticated sandbox APIs on the public internet.

    Secret Handling

    • Pass secrets through runtime environment variables or a secret manager.
    • Do not bake secrets into custom images.
    • Do not write long-lived secrets to Skills, hooks, notebooks, or generated files.
    • Prefer short-lived credentials for task-specific access.