Skip to main content
Accessed via sandbox.exec.

sandbox.exec.run(command, opts?)

Run a command synchronously. HTTP API →
command
string
required
Shell command
timeout
number
default:"60"
Timeout in seconds
env
Record<string, string>
Environment variables
cwd
string
Working directory
Returns: Promise<ProcessResult>
const result = await sandbox.exec.run("npm test", { cwd: "/app" });

sandbox.exec.start(command, opts?)

Start a long-running command with streaming. HTTP API →
command
string
required
Command
args
string[]
Arguments
env
Record<string, string>
Environment variables
cwd
string
Working directory
timeout
number
Timeout in seconds
maxRunAfterDisconnect
number
Seconds to keep running after disconnect
onStdout
(data: Uint8Array) => void
Stdout callback
onStderr
(data: Uint8Array) => void
Stderr callback
onExit
(exitCode: number) => void
Exit callback
Returns: Promise<ExecSession>
const session = await sandbox.exec.start("node server.js", {
  onStdout: (data) => process.stdout.write(data),
});

sandbox.exec.attach(sessionId, opts?)

Reconnect to a running exec session.
sessionId
string
required
Session ID
onStdout
(data: Uint8Array) => void
Stdout callback
onStderr
(data: Uint8Array) => void
Stderr callback
onExit
(exitCode: number) => void
Exit callback
onScrollbackEnd
() => void
Scrollback replay done
Returns: Promise<ExecSession>

sandbox.exec.list()

List all exec sessions. HTTP API → Returns: Promise<ExecSessionInfo[]>

sandbox.exec.kill(sessionId, signal?)

Kill an exec session. Default signal: 9 (SIGKILL). HTTP API → Returns: Promise<void>

ExecSession

MemberTypeDescription
sessionIdstringSession ID
donePromise<number>Resolves with exit code
sendStdin(data)methodSend input (string or Uint8Array)
kill(signal?)Promise<void>Kill process
close()methodClose WebSocket

Types

interface ProcessResult {
  exitCode: number;
  stdout: string;
  stderr: string;
}
interface ExecSessionInfo {
  sessionID: string;
  sandboxID: string;
  command: string;
  args: string[];
  running: boolean;
  exitCode?: number;
  startedAt: string;
  attachedClients: number;
}