Skip to main content
Scripts run in a V8 isolate that Rewind controls entirely. Every way the script could observe the world goes through the journal, so the same script, input and journal always give the same execution.

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 http tool 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 approval policy 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.