This is compute isolation, which is different from validating a model. The gateway keeps doing guardrails, spend, and RBAC; OpenSandbox only contains the compute. Agent Runtime is admin-only
Two independent choices
When you spawn an instance you pick two things that do not affect each other, so any profile pairs with any isolation:
Practical pairings:
ephemeral-task with an isolated sandbox gives a fresh box per task that is hard-killed on completion, which is the safest choice for untrusted code. session with an isolated sandbox keeps one box across a user’s session, which suits a coding agent iterating on the same workspace. pooled with an isolated sandbox keeps boxes warm for latency at the cost of reusing a box across tasks
Turn the substrate on
The OpenSandbox server ships off by default. In the local stack it is an opt-in compose profile:forceai/runtime-runner:local is a placeholder, so point it at a real base until you build your own runner:
gateway, the sandbox server is not reachable and the dashboard will not show the choice:
Create one from the dashboard
1
Open Agent Runtime
Go to Agentic -> Agent Runtime and click Spawn instance
2
Pick the profile
Runtime profile sets the lifecycle.
ephemeral-task is the safest default for code you do not trust: one task, then hard-killed3
Choose Isolated sandbox
Set Isolation to
Isolated sandbox (opensandbox). This is the field that puts the agent’s code in a box; leaving it on Governed only means the agent makes governed model calls but executes nothing4
Set the model and task
Pick the model the agent runs its tasks against, optionally give it a first task, and click Spawn
ready once the box is up. Run executes a task inside it, Details shows the endpoint and task history, and Kill destroys the box and revokes the key
Create one over the API
The same thing for automation.substrate is what makes it isolated; omit it and you get the deployment default:
What ForceAI does for you
Spawning an isolated agent is a governed operation, not just a container start. ForceAI mints a scoped, budget-capped key for that one instance, then creates the sandbox with a deny-by-default network policy whose only allow rule is the gateway, so a prompt-injected or buggy agent cannot reach an arbitrary endpoint. When the Credential Vault is enabled the scoped key is registered outside the box and injected into the agent’s outbound calls by the egress sidecar, so the model calls are authenticated without the workload ever being able to read the secret. Every model call still passes the guardrail, spend, and budget checks at the gateway, and killing the instance tears down the box and revokes the keyCheck it is really isolated
The dashboard tag is the quick check; the containers are the proof. Each instance runs as its own box plus an egress sidecar:Before you rely on it
Two things are worth knowing up front. The sandbox is created from whatever runner image you configured, so an agent that should reason and call models from inside the box needs a runner image that does that; a plain base image likepython:3.11 only executes commands you send it. And Credential Vault injection needs the gateway reachable by FQDN on a transparent-intercept port (443 by default) plus the egress sidecar in dns+nft mode on a privileged or secure runtime, so on a local stack where the gateway is forceai-gateway:4000 you get the egress pin but not the key injection