What exists in the sandbox
Scripts run with
TZ=UTC and the en-US locale, so Intl output does not depend on the host.
What a script can import
Nothing else: no npm packages, no relative imports, no dynamic
import(). See the
script reference.
What type-checks is what exists
Before a run starts, its script is type-checked in strict mode by the TypeScript 7 compiler against exactly these globals and the toolset’s declarations. A name a model reaches for by habit but that does not exist (fetch without the
http tool, require, process, Buffer) is refused with a hint that says what to use instead. Rewind also flags two
mistakes the compiler does not catch:
Diagnostics are written for a model: location, message and a short code frame.
Limits
The CPU budget applies to each call into the script, not to a whole activation, so replaying a long history never
exhausts it. CPU time is also counted per end user each month, for quotas.
Security
- Credentials never enter the sandbox. They are injected by the dispatcher into the connection to your MCP server, and never appear in the journal, a cassette or a trace.
- No network of its own. The
httptool sends requests from the dispatcher, only to the toolset’s allowed hosts, and refuses private, loopback, link-local and cloud-metadata addresses, at every redirect. - Your permission gates stay yours. A tool with the
approvalpolicy is not sent until your harness approves that exact call. - Workers are sandboxed too. In production, the workers that run scripts reach the network only through an egress proxy, and can run under gVisor.