Sandbox Cheat Sheet
Core Entry Points
Sandbox::fromPolicy(ExecutionPolicy $policy): SandboxSandbox::host(ExecutionPolicy $policy): CanExecuteCommandSandbox::docker(ExecutionPolicy $policy, ?string $image = null, ?string $dockerBin = null): CanExecuteCommandSandbox::podman(ExecutionPolicy $policy, ?string $image = null, ?string $podmanBin = null): CanExecuteCommandSandbox::firejail(ExecutionPolicy $policy, ?string $firejailBin = null): CanExecuteCommandSandbox::bubblewrap(ExecutionPolicy $policy, ?string $bubblewrapBin = null): CanExecuteCommand
using(string|SandboxDriver $driver): CanExecuteCommand(uses default image/binary for container drivers)
Driver Enum
SandboxDriver values:
SandboxDriver::Host(host)SandboxDriver::Docker(docker)SandboxDriver::Podman(podman)SandboxDriver::Firejail(firejail)SandboxDriver::Bubblewrap(bubblewrap)
ExecutionPolicy
Create policy:ExecutionPolicy::default(): ExecutionPolicy(baseDir:/tmp)ExecutionPolicy::in(string $baseDir): ExecutionPolicy
128M, no idle timeout, no network, no env inheritance, 1MB output caps.
Accessors:
baseDir(): stringtimeoutSeconds(): intidleTimeoutSeconds(): ?intmemoryLimit(): stringreadablePaths(): arraywritablePaths(): arrayenv(): arrayinheritEnv(): boolnetworkEnabled(): boolstdoutLimitBytes(): intstderrLimitBytes(): int
withTimeout(int $seconds): selfwithIdleTimeout(?int $seconds): selfwithMemory(string $limit): selfwithReadablePaths(string ...$paths): selfwithWritablePaths(string ...$paths): selfwithEnv(array $env, ?bool $inherit = null): selfinheritEnvironment(bool $inherit = true): selfwithNetwork(bool $enabled): selfwithOutputCaps(int $stdoutBytes, int $stderrBytes): selfwith(?string $baseDir, ?int $timeoutSeconds, ?int $idleTimeoutSeconds, ?string $memoryLimit, ?array $readablePaths, ?array $writablePaths, ?array $env, ?bool $inheritEnv, ?bool $networkEnabled, ?int $stdoutLimitBytes, ?int $stderrLimitBytes): self(all params nullable, unset params keep current values)
Command Execution API
Contract (CanExecuteCommand):
- Signature:
fn(string $type, string $chunk): void $typeis'out'or'err'
ExecResult
Constructor:stdout(): stringstderr(): stringexitCode(): intduration(): floattimedOut(): booltruncatedStdout(): booltruncatedStderr(): boolsuccess(): boolcombinedOutput(): stringtoArray(): array
Value Objects
Argv:
Argv::of(array $items): Argvwith(string $value): ArgvtoArray(): array
CommandSpec:
new CommandSpec(Argv $argv, ?string $stdin = null)argv(): Argvstdin(): ?string
Testing
FakeSandbox (implements CanExecuteCommand):
new FakeSandbox(ExecutionPolicy $policy, array $responses = [], ?ExecResult $defaultResponse = null)FakeSandbox::fromResponses(array $responses, ?ExecResult $defaultResponse = null): FakeSandbox
array<string, list<ExecResult|array>> — each entry can be an ExecResult or an associative array with keys: stdout, stderr, exit_code, duration, timed_out, truncated_stdout, truncated_stderr.
policy(): ExecutionPolicycommands(): array(recorded argv calls)enqueue(string $commandKey, ExecResult $result): voidexecute(array $argv, ?string $stdin = null, ?callable $onOutput = null): ExecResult
'cmd arg1 arg2'(joined with spaces)
Mount (container drivers)
Mount (used by Docker/Podman drivers for volume binds):
new Mount(string $host, string $container, string $options)host(): stringcontainer(): stringoptions(): stringtoVolumeArg(): string(returnshost:container:options)
TimeoutReason Enum
TimeoutReason values:
TimeoutReason::WALL(wall) — wall-clock timeout exceededTimeoutReason::IDLE(idle) — idle timeout exceeded
Exit Code Constants
ExitCodes:
ExitCodes::TIMEOUT=124(GNU timeout convention)
Useful Environment Variables
Driver binary overrides:DOCKER_BINPODMAN_BINFIREJAIL_BINBWRAP_BIN