Use a Backend
The Docker backend is the local development path:SandboxConfig,
and call remote directly on the returned live sandbox handle.
provider.session(...) creates the sandbox on entry, closes the runtime
connection, and deletes the container on exit.
For manual lifecycle control, create and delete the sandbox yourself:
from agentix import providers; providers().all() returns {name: ProviderClass} for every
registered backend.
If the bundle was built for a non-default architecture, pass the same
Docker/OCI platform so the task image and runtime overlay match:
Backend Plugins
SandboxProvider packages register classes in theagentix.provider entry
point group.
pyproject.toml
Backend Protocol
Backends subclassSandboxProvider, implement three async methods, and
inherit session().
my_provider/__init__.py
DockerProvider(DockerProviderConfig(container_engine="podman"))
selects the container runtime, network, GPU args, and so on.
Backend-neutral settings (image, bundle, env, resource) belong
in SandboxConfig, not the backend.
Configuration
| Variable | Used by | Purpose |
|---|---|---|
AGENTIX_BIND_PORT | runtime server | Sandbox-side bind port, default 8000 |
DAYTONA_API_KEY | daytona backend | API authentication |
E2B_API_KEY / E2B_TEMPLATE_ID | e2b backend | API authentication and template selection |
daytona and e2b backends are placeholders today: they validate
configuration but their lifecycle methods raise NotImplementedError
pending integration. docker/podman, apptainer, and uv are the
working backends. The uv backend materializes the runtime from a local
uv venv with no container — no isolation, but the fastest path to run the
runtime/RPC stack on a bare host for local dev, CI, or trusted eval (see
plugins/providers/uv/README.md).
Fail fast in __init__ when required configuration is missing. The
error should surface before the backend starts creating infrastructure.