Loading...
Loading...
Securely execute untrusted Python, Node.js, Bun, Deno, and Bash code in sandboxed Docker containers.
npx skill4agent add illusion47586/isol8 isol8For full documentation, see the isol8 docs. This file is a quick-reference for AI agents — it covers the most common operations and links to detailed docs for everything else.
| Command | Purpose | Full Docs |
|---|---|---|
| Execute code in an isolated container | CLI: run |
| Build Docker images, optionally bake in packages | CLI: setup |
| Remove orphaned isol8 containers | CLI: cleanup |
| Start HTTP server for remote execution (requires Bun) | CLI: serve |
| Display resolved configuration | CLI: config |
isol8 run--evalpython--runtimepython.py.js.ts.mts.shisol8 run| Flag | Default | Description |
|---|---|---|
| — | Execute inline code |
| auto-detect | Force: |
| | Keep container alive between runs |
| — | Install package before execution (repeatable) |
| | Network: |
| | Execution timeout |
| | Memory limit |
| — | Secret env var, value masked in output (repeatable) |
| — | Pipe data to stdin |
# Python inline
isol8 run -e "print('Hello!')" --runtime python
# Run a file (runtime auto-detected)
isol8 run script.py
# With package installation
isol8 run -e "import numpy; print(numpy.__version__)" --runtime python --install numpy
# Pipe via stdin
echo "console.log(42)" | isol8 run --runtime node
# Secrets (masked as *** in output)
isol8 run -e "import os; print(os.environ['KEY'])" --runtime python --secret KEY=sk-1234
# Remote execution
isol8 run script.py --host http://server:3000 --key my-api-key
# Cleanup orphaned containers
isol8 cleanup # Interactive (prompts for confirmation)
isol8 cleanup --force # Skip confirmationimport { DockerIsol8 } from "isol8";
const isol8 = new DockerIsol8({
mode: "ephemeral", // or "persistent"
network: "none", // or "host" or "filtered"
memoryLimit: "512m",
cpuLimit: 1.0,
timeoutMs: 30000,
secrets: {}, // values masked in output
});
await isol8.start();
const result = await isol8.execute({
code: 'print("hello")',
runtime: "python",
installPackages: ["numpy"], // optional
});
console.log(result.stdout); // captured output
console.log(result.exitCode); // 0 = success
console.log(result.durationMs);
await isol8.stop();import { RemoteIsol8 } from "isol8";
const isol8 = new RemoteIsol8(
{ host: "http://localhost:3000", apiKey: "secret" },
{ network: "none" }
);
await isol8.start();
const result = await isol8.execute({ code: "print(1)", runtime: "python" });
await isol8.stop();for await (const event of isol8.executeStream({
code: 'for i in range(5): print(i)',
runtime: "python",
})) {
if (event.type === "stdout") process.stdout.write(event.data);
if (event.type === "exit") console.log("Exit code:", event.data);
}await isol8.putFile("/sandbox/data.csv", "col1,col2\n1,2");
const buf = await isol8.getFile("/sandbox/output.txt");| Method | Path | Auth | Description |
|---|---|---|---|
| | No | Health check |
| | Yes | Execute code, return result |
| | Yes | Execute code, SSE stream |
| | Yes | Upload file (base64) |
| | Yes | Download file (base64) |
| | Yes | Destroy persistent session |
./isol8.config.json~/.isol8/config.json| Layer | Default |
|---|---|
| Filesystem | Read-only root, |
| Processes | PID limit 64, |
| Resources | 1 CPU, 512MB memory, 30s timeout |
| Network | Disabled ( |
| Output | Truncated at 1MB, secrets masked |
/sandbox.so/tmpisol8 setup--timeout--memory--sandbox-size--tmp-size--sandbox-size.ts.ts--runtime deno.mtsbun run src/cli.ts serve