The sandbox catches the input you forgot to declare
A cache is only correct if the declared inputs are every file the task reads. Instead of guessing that set, vx runs a task with the declared paths as the only workspace files it can touch, and fails the run on an undeclared one of its own.
correctness
correctness
Forget to declare an input and the cache can serve a stale hit. The
sandbox fails the task instead, and prints the fix.
sandbox: {} reads nothing in the workspace, writes only its TMPDIR
and has no network. Most tasks start with sandbox: { allow: { read: ['.'] } }.
~/.ssh and ~/.npmrc stay closed unless a grant names them.
Grant
What it opens
read
paths or globs: project-relative, absolute or ~
write
the same; a write grant is readable too (.tsbuildinfo)
network
true, or domains with wildcards, through one proxy per run
localBinding
ports a test server listens on
unixSockets
unix sockets
systemInfo
named system values
gitConfig
writing .git/config, for this task only
machLookup
macOS services
pty
a terminal, on macOS
Those are the keys of allow. deny blocks network domains for the whole run. ignore hides a known,
harmless denial. Each task lists its own grants, with no defaults.
flowchart LR
I["inputs: what reruns the task"]
A["sandbox.allow: what it may touch"]
A --> D{read outside the grant?}
D -->|inside the project| F[task fails, fix printed]
D -->|outside the project| Q[blocked quietly]
vx links neither to the other, so the violation is judged against the
grants alone. Grant read: ['src', '.eslintrc'] and every failure is an
input you missed.
xychart-beta horizontal
title "One task, cat of two files, vx run --force (ms, min of 20)"
x-axis ["no sandbox", "sandboxed"]
y-axis "ms" 0 --> 400
bar [130.7, 377.7]
linux x64, 4 cores, root in a container · vx 0be0367 · 2026-10-23
Turn it on where inputs matter: in CI, and before a task goes to
remote execution.
A sandboxed task can read the outputs of the tasks it depends on, in any project, and never their sources. With hermetic: true it reads nothing of the machine you did not name.
correctness
Turborepo, Nx and Vite Task undo your commit on a cache hit
Commit a file that sits in a task’s output folder. On the next cache hit, Turborepo, Nx and Vite Task write the old copy back over it, and the run reports success.
correctness
One test suite, six task runners, the same 993 cases
993 task-runner cases, compiled from the test suites of Nx, Turborepo, Vite Task, moon, Nix and vx, run sandboxed against all six. Every result is on one page.
Turborepo, Nx and other product names are trademarks of their owners. vx is not affiliated with or endorsed by them.