sandbox-sdk

作者: Cloudflare

為安全程式碼執行建置沙盒應用程式。在建立AI程式碼執行、程式碼直譯器、CI/CD系統、互動式開發環境或執行不受信任的程式碼時載入。涵蓋Sandbox SDK生命週期、指令、檔案、程式碼直譯器及預覽URL。

npx skills add https://github.com/cloudflare/skills --skill sandbox-sdk

Cloudflare Sandbox SDK

Build secure, isolated code execution environments on Cloudflare Workers.

FIRST: Verify Installation

npm install @cloudflare/sandbox
docker info  # Must succeed - Docker required for local dev

Retrieval Sources

Your knowledge of the Sandbox SDK may be outdated. Prefer retrieval over pre-training for any Sandbox SDK task.

ResourceURL
Docshttps://developers.cloudflare.com/sandbox/
API Referencehttps://developers.cloudflare.com/sandbox/api/
Exampleshttps://github.com/cloudflare/sandbox-sdk/tree/main/examples
Get Startedhttps://developers.cloudflare.com/sandbox/get-started/

When implementing features, fetch the relevant doc page or example first.

Required Configuration

wrangler.jsonc (exact - do not modify structure):

{
  "containers": [{
    "class_name": "Sandbox",
    "image": "./Dockerfile",
    "instance_type": "lite",
    "max_instances": 1
  }],
  "durable_objects": {
    "bindings": [{ "class_name": "Sandbox", "name": "Sandbox" }]
  },
  "migrations": [{ "new_sqlite_classes": ["Sandbox"], "tag": "v1" }]
}

Worker entry - must re-export Sandbox class:

import { getSandbox } from '@cloudflare/sandbox';
export { Sandbox } from '@cloudflare/sandbox';  // Required export

Quick Reference

TaskMethod
Get sandboxgetSandbox(env.Sandbox, 'user-123')
Run commandawait sandbox.exec('python script.py')
Run code (interpreter)await sandbox.runCode(code, { language: 'python' })
Write fileawait sandbox.writeFile('/workspace/app.py', content)
Read fileawait sandbox.readFile('/workspace/app.py')
Create directoryawait sandbox.mkdir('/workspace/src', { recursive: true })
List filesawait sandbox.listFiles('/workspace')
Expose portawait sandbox.exposePort(8080)
Destroyawait sandbox.destroy()

Core Patterns

Execute Commands

const sandbox = getSandbox(env.Sandbox, 'user-123');
const result = await sandbox.exec('python --version');
// result: { stdout, stderr, exitCode, success }

Code Interpreter (Recommended for AI)

Use runCode() for executing LLM-generated code with rich outputs:

const ctx = await sandbox.createCodeContext({ language: 'python' });

await sandbox.runCode('import pandas as pd; data = [1,2,3]', { context: ctx });
const result = await sandbox.runCode('sum(data)', { context: ctx });
// result.results[0].text = "6"

Languages: python, javascript, typescript

State persists within context. Create explicit contexts for production.

File Operations

await sandbox.mkdir('/workspace/project', { recursive: true });
await sandbox.writeFile('/workspace/project/main.py', code);
const file = await sandbox.readFile('/workspace/project/main.py');
const files = await sandbox.listFiles('/workspace/project');

When to Use What

NeedUseWhy
Shell commands, scriptsexec()Direct control, streaming
LLM-generated coderunCode()Rich outputs, state persistence
Build/test pipelinesexec()Exit codes, stderr capture
Data analysisrunCode()Charts, tables, pandas

Extending the Dockerfile

Base image (docker.io/cloudflare/sandbox:0.7.0) includes Python 3.11, Node.js 20, and common tools.

Add dependencies by extending the Dockerfile:

FROM docker.io/cloudflare/sandbox:0.7.0

# Python packages
RUN pip install requests beautifulsoup4

# Node packages (global)
RUN npm install -g typescript

# System packages
RUN apt-get update && apt-get install -y ffmpeg && rm -rf /var/lib/apt/lists/*

EXPOSE 8080  # Required for local dev port exposure

Keep images lean - affects cold start time.

Preview URLs (Port Exposure)

Expose HTTP services running in sandboxes:

const { url } = await sandbox.exposePort(8080);
// Returns preview URL for the service

Production requirement: Preview URLs need a custom domain with wildcard DNS (*.yourdomain.com). The .workers.dev domain does not support preview URL subdomains.

See: https://developers.cloudflare.com/sandbox/guides/expose-services/

OpenAI Agents SDK Integration

The SDK provides helpers for OpenAI Agents at @cloudflare/sandbox/openai:

import { Shell, Editor } from '@cloudflare/sandbox/openai';

See examples/openai-agents for complete integration pattern.

Sandbox Lifecycle

  • getSandbox() returns immediately - container starts lazily on first operation
  • Containers sleep after 10 minutes of inactivity (configurable via sleepAfter)
  • Use destroy() to immediately free resources
  • Same sandboxId always returns same sandbox instance

Anti-Patterns

  • Don't use internal clients (CommandClient, FileClient) - use sandbox.* methods
  • Don't skip the Sandbox export - Worker won't deploy without export { Sandbox }
  • Don't hardcode sandbox IDs for multi-user - use user/session identifiers
  • Don't forget cleanup - call destroy() for temporary sandboxes

Detailed References

來自 Cloudflare 的更多技能

agents-sdk
Cloudflare
在 Cloudflare Workers 上使用 Agents SDK 建置 AI 代理。建立有狀態代理、持久化工作流程、即時 WebSocket 應用程式、排程任務、MCP 伺服器或聊天應用程式時載入。涵蓋 Agent 類別、狀態管理、可呼叫 RPC、Workflows 整合及 React hooks。
official
building-ai-agent-on-cloudflare
Cloudflare
在 Cloudflare 上使用 Agents SDK 建置 AI 代理,具備狀態管理、即時 WebSocket、排程任務、工具整合及聊天功能。產生可部署至 Workers 的正式環境代理程式碼。 適用時機:使用者想「建置代理」、「AI 代理」、「聊天代理」、「有狀態代理」,提及「Agents SDK」,需要「即時 AI」、「WebSocket AI」,或詢問代理的「狀態管理」、「排程任務」或「工具呼叫」。
developmentofficial
building-mcp-server-on-cloudflare
Cloudflare
在 Cloudflare Workers 上建置遠端 MCP(模型上下文協定)伺服器,包含工具、OAuth 驗證與正式環境部署。可產生伺服器程式碼、設定驗證提供者,並部署至 Workers。 使用時機:使用者提及「建置 MCP 伺服器」、「建立 MCP 工具」、「遠端 MCP」、「部署 MCP」、為 MCP 加入「OAuth」,或提到 Cloudflare 上的模型上下文協定。亦會觸發於「MCP 驗證」或「MCP 部署」。
developmentofficial
cloudflare
Cloudflare
涵蓋 Cloudflare 平台的完整技能,包括 Workers、Pages、儲存(KV、D1、R2)、AI(Workers AI、Vectorize、Agents SDK)、網路(Tunnel、Spectrum)、安全(WAF、DDoS)以及基礎設施即程式碼(Terraform、Pulumi)。適用於任何 Cloudflare 開發任務。
official
durable-objects
Cloudflare
建立與審查 Cloudflare Durable Objects。適用於建構有狀態的協調機制(聊天室、多人遊戲、預訂系統)、實作 RPC 方法、SQLite 儲存、警報、WebSocket,或審查 DO 程式碼以符合最佳實務。涵蓋 Workers 整合、wrangler 設定,以及使用 Vitest 進行測試。
official
web-perf
Cloudflare
使用 Chrome DevTools MCP 分析網頁效能。測量核心網頁指標(FCP、LCP、TBT、CLS、速度指數),識別渲染阻塞資源、網路依賴鏈、版面位移、快取問題及無障礙缺口。當被要求稽核、剖析、除錯或優化頁面載入效能、Lighthouse 分數或網站速度時使用。
official
workers-best-practices
Cloudflare
審查並指導 Cloudflare Workers 程式碼遵循生產最佳實踐。在撰寫新的 Workers、審查 Worker 程式碼、設定 wrangler.jsonc,或檢查常見的 Workers 反模式(串流、懸浮承諾、全域狀態、機密、綁定、可觀測性)時載入。傾向從 Cloudflare 文件檢索,而非依賴預先訓練的知識。
official
wrangler
Cloudflare
Cloudflare Workers CLI,用於部署、開發及管理 Workers、KV、R2、D1、Vectorize、Hyperdrive、Workers AI、Containers、Queues、Workflows、Pipelines 與 Secrets Store。在執行 wrangler 指令前載入,以確保正確語法與最佳實踐。
official