isol8
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseIsol8 Skill
Isol8 工具
Isol8 is a secure execution engine for running untrusted code inside Docker containers with strict resource limits, network controls, and output sanitization. Use this skill when you need to execute code, scripts, or system commands in a safe, isolated environment.
For 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.
Isol8 是一个安全执行引擎,可在带有严格资源限制、网络控制和输出清理的Docker容器中运行不可信代码。当你需要在安全、隔离的环境中执行代码、脚本或系统命令时,可以使用这个工具。
完整文档请查看 isol8 docs。本文档是AI Agent的快速参考指南——涵盖最常用操作,并链接到其他所有内容的详细文档。
Quick Reference
快速参考
CLI Commands
CLI 命令
| 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 |
| 命令 | 用途 | 完整文档 |
|---|---|---|
| 在隔离容器中执行代码 | CLI: run |
| 构建Docker镜像,可选择性预装包 | CLI: setup |
| 移除孤立的isol8容器 | CLI: cleanup |
| 启动HTTP服务器用于远程执行(需要Bun) | CLI: serve |
| 显示已解析的配置 | CLI: config |
Input Resolution (isol8 run
)
isol8 run输入解析(isol8 run
)
isol8 run- flag (inline code, defaults to
--evalruntime)python - File argument (runtime auto-detected from extension, or forced with )
--runtime - Stdin (defaults to runtime)
python
Extension mapping: → python, → node, → bun, → deno, → bash
.py.js.ts.mts.sh- 参数(单行代码,默认使用
--eval运行时)python - 文件参数(根据扩展名自动检测运行时,或使用强制指定)
--runtime - 标准输入(默认使用运行时)
python
扩展名映射: → python, → node, → bun, → deno, → bash
.py.js.ts.mts.shMost-Used Flags (isol8 run
)
isol8 run最常用参数(isol8 run
)
isol8 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 |
For the complete flag reference (20 flags total), see CLI: run.
| 参数 | 默认值 | 描述 |
|---|---|---|
| — | 执行单行代码 |
| 自动检测 | 强制指定: |
| | 在多次运行之间保持容器存活 |
| — | 执行前安装包(可重复使用) |
| | 网络模式: |
| | 执行超时时间 |
| | 内存限制 |
| — | 敏感环境变量,值在输出中会被掩码(可重复使用) |
| — | 将数据通过标准输入传入 |
完整参数参考(共20个参数)请查看 CLI: run。
CLI Examples
CLI 示例
bash
undefinedbash
undefinedPython inline
Python inline
isol8 run -e "print('Hello!')" --runtime python
isol8 run -e "print('Hello!')" --runtime python
Run a file (runtime auto-detected)
Run a file (runtime auto-detected)
isol8 run script.py
isol8 run script.py
With package installation
With package installation
isol8 run -e "import numpy; print(numpy.version)" --runtime python --install numpy
isol8 run -e "import numpy; print(numpy.version)" --runtime python --install numpy
Pipe via stdin
Pipe via stdin
echo "console.log(42)" | isol8 run --runtime node
echo "console.log(42)" | isol8 run --runtime node
Secrets (masked as *** in output)
Secrets (masked as *** in output)
isol8 run -e "import os; print(os.environ['KEY'])" --runtime python --secret KEY=sk-1234
isol8 run -e "import os; print(os.environ['KEY'])" --runtime python --secret KEY=sk-1234
Remote execution
Remote execution
isol8 run script.py --host http://server:3000 --key my-api-key
isol8 run script.py --host http://server:3000 --key my-api-key
Cleanup orphaned containers
Cleanup orphaned containers
isol8 cleanup # Interactive (prompts for confirmation)
isol8 cleanup --force # Skip confirmation
undefinedisol8 cleanup # Interactive (prompts for confirmation)
isol8 cleanup --force # Skip confirmation
undefinedLibrary API (Quick Reference)
库API(快速参考)
For full library documentation, see Library Overview.
完整库文档请查看 Library Overview。
DockerIsol8
DockerIsol8
typescript
import { 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();Full options reference: Execution Options
typescript
import { 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();完整参数参考:Execution Options
RemoteIsol8
RemoteIsol8
typescript
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();typescript
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();Streaming
流式执行
typescript
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);
}Full streaming docs: Streaming
typescript
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);
}完整流式执行文档:Streaming
File I/O (Persistent Mode)
文件I/O(持久化模式)
typescript
await isol8.putFile("/sandbox/data.csv", "col1,col2\n1,2");
const buf = await isol8.getFile("/sandbox/output.txt");Full file I/O docs: File I/O
typescript
await isol8.putFile("/sandbox/data.csv", "col1,col2\n1,2");
const buf = await isol8.getFile("/sandbox/output.txt");完整文件I/O文档:File I/O
HTTP Server API
HTTP服务器API
Full endpoint reference: Server Endpoints
| 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 |
完整端点参考:Server Endpoints
| 方法 | 路径 | 认证 | 描述 |
|---|---|---|---|
| | 否 | 健康检查 |
| | 是 | 执行代码,返回结果 |
| | 是 | 执行代码,使用SSE流式返回 |
| | 是 | 上传文件(base64格式) |
| | 是 | 下载文件(base64格式) |
| | 是 | 销毁持久化会话 |
Configuration
配置
Config is loaded from (first found): or . Partial configs are deep-merged with defaults.
./isol8.config.json~/.isol8/config.jsonFull configuration reference: Configuration
配置从以下位置加载(优先找到的第一个): 或 。部分配置会与默认配置深度合并。
./isol8.config.json~/.isol8/config.json完整配置参考:Configuration
Security Defaults
安全默认设置
| 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 |
Container Filesystem:
- (512MB): Working directory, packages installed here, execution allowed for
/sandboxfiles.so - (256MB): Temporary files, no execution allowed for security
/tmp
Full security model: Security
| 层级 | 默认值 |
|---|---|
| 文件系统 | 只读根目录, |
| 进程 | PID限制64,启用 |
| 资源 | 1核CPU,512MB内存,30秒超时 |
| 网络 | 禁用( |
| 输出 | 截断至1MB,敏感信息掩码 |
容器文件系统:
- (512MB):工作目录,包安装在此处,允许
/sandbox文件执行.so - (256MB):临时文件目录,为安全起见禁止执行
/tmp
完整安全模型:Security
Troubleshooting
故障排除
- "Docker not running": Run to check.
isol8 setup - Timeouts: Increase . Process is killed on timeout.
--timeout - OOM Killed: Increase .
--memory - "No space left on device": Increase (default 512MB) or
--sandbox-size(default 256MB).--tmp-size - "Operation not permitted" with numpy/packages: Packages need large enough for installation (512MB+ recommended).
--sandbox-size - files running with Bun instead of Deno:
.tsdefaults to Bun. Use.tsor--runtime denoextension..mts - Serve command failing: Requires Bun runtime. Run with .
bun run src/cli.ts serve
- "Docker not running":运行检查。
isol8 setup - 超时:增加参数。超时后进程会被终止。
--timeout - OOM被终止:增加参数。
--memory - "No space left on device":增加(默认512MB)或
--sandbox-size(默认256MB)。--tmp-size - 安装numpy/包时提示"Operation not permitted":包安装需要足够的(推荐512MB以上)。
--sandbox-size - 文件使用Bun而非Deno运行:
.ts默认使用Bun。使用.ts或--runtime deno扩展名。.mts - Serve命令失败:需要Bun运行时。使用启动。
bun run src/cli.ts serve