sandbox-sdk — скилл для Codex: что делает и как установить
Скилл описывает работу с Cloudflare Sandbox SDK: запуск команд и кода в изолированной среде, операции с файлами и preview URL. Пригодится для исполнения кода через Cloudflare Workers.
npx skills add openai/plugins --skill sandbox-sdk -a codexЧто делает sandbox-sdk
Скилл описывает работу с Cloudflare Sandbox SDK на Cloudflare Workers. В примерах есть запуск shell-команд через exec() и выполнение кода через runCode(). Он также показывает файловые операции. Интерпретатор поддерживает python, javascript и typescript; состояние сохраняется внутри контекста. Для задач с SDK скилл советует сначала сверяться с документацией Cloudflare.
Внутри разобраны настройки wrangler.jsonc и обязательный экспорт Sandbox из Worker. Есть и пример публикации порта. Для локальной разработки нужны пакет @cloudflare/sandbox и Docker; проверьте Docker командой docker info. В production для preview URL требуется собственный домен с wildcard DNS: поддомены workers.dev не поддерживаются. Ставьте скилл, если проекту нужно исполнять код в Cloudflare Sandbox; для задач вне этого SDK он не нужен.
Какие задачи решает
- Запустить Python-скрипт через
exec() - Выполнить код с сохранением состояния через
runCode() - Прочитать файл из
/workspace - Открыть preview URL для HTTP-сервиса в sandbox
- Проверить
wrangler.jsoncи экспортSandboxперед деплоем
Примеры запросов агенту
- Запусти `python script.py` в sandbox и покажи `stdout` и `exitCode`.
- Выполни этот Python-код через `runCode()` и верни результат.
- Проверь `wrangler.jsonc` и экспорт `Sandbox` в Worker перед деплоем.
Как установить sandbox-sdk
1Через Skills CLI (Vercel)
npx skills add openai/plugins --skill sandbox-sdk -a codex2Вручную: положить файлы
.agents/skills/sandbox-sdk/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add openai/plugins --skill sandbox-sdk -a claude-code2Вручную: положить файлы
~/.claude/skills/sandbox-sdk/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/sandbox-sdk/
Вручную: положить файлы
.cursor/skills/sandbox-sdk/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install openai/plugins sandbox-sdk2Вручную: положить файлы
.github/skills/sandbox-sdk/SKILL.mdКомандой платформы
gemini skills install https://github.com/openai/plugins --path plugins/cloudflare/skills/sandbox-sdkВручную: положить файлы
.devin/skills/sandbox-sdk/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Claude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
Из того же набора201
Весь набор →Похожие
Вопросы о sandbox-sdk
Как установить sandbox-sdk в Codex?
Выполните npx skills add openai/plugins --skill sandbox-sdk -a codex.
Что делает sandbox-sdk?
Он помогает работать с Cloudflare Sandbox SDK: выполнять команды и код в sandbox, работать с файлами и получать preview URL для сервиса.
Что нужно для локальной разработки с Cloudflare Sandbox SDK?
Установите пакет командой npm install @cloudflare/sandbox. Для локальной разработки нужен Docker, команда docker info должна завершиться успешно.
Исходный текст
SKILL.md · MIT
---
name: sandbox-sdk
description: Build sandboxed applications for secure code execution. Load when building AI code execution, code interpreters, CI/CD systems, interactive dev environments, or executing untrusted code. Covers Sandbox SDK lifecycle, commands, files, code interpreter, and preview URLs. Biases towards retrieval from Cloudflare docs over pre-trained knowledge.
---
# Cloudflare Sandbox SDK
Build secure, isolated code execution environments on Cloudflare Workers.
## FIRST: Verify Installation
```bash
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.
| Resource | URL |
|----------|-----|
| Docs | https://developers.cloudflare.com/sandbox/ |
| API Reference | https://developers.cloudflare.com/sandbox/api/ |
| Examples | https://github.com/cloudflare/sandbox-sdk/tree/main/examples |
| Get Started | https://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):
```jsonc
{
"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:
```typescript
import { getSandbox } from '@cloudflare/sandbox';
export { Sandbox } from '@cloudflare/sandbox'; // Required export
```
## Quick Reference
| Task | Method |
|------|--------|
| Get sandbox | `getSandbox(env.Sandbox, 'user-123')` |
| Run command | `await sandbox.exec('python script.py')` |
| Run code (interpreter) | `await sandbox.runCode(code, { language: 'python' })` |
| Write file | `await sandbox.writeFile('/workspace/app.py', content)` |
| Read file | `await sandbox.readFile('/workspace/app.py')` |
| Create directory | `await sandbox.mkdir('/workspace/src', { recursive: true })` |
| List files | `await sandbox.listFiles('/workspace')` |
| Expose port | `await sandbox.exposePort(8080)` |
| Destroy | `await sandbox.destroy()` |
## Core Patterns
### Execute Commands
```typescript
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:
```typescript
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
```typescript
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
| Need | Use | Why |
|------|-----|-----|
| Shell commands, scripts | `exec()` | Direct control, streaming |
| LLM-generated code | `runCode()` | Rich outputs, state persistence |
| Build/test pipelines | `exec()` | Exit codes, stderr capture |
| Data analysis | `runCode()` | 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:
```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:
```typescript
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`:
```typescript
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
- **[references/api-quick-ref.md](references/api-quick-ref.md)** - Full API with options and return types
- **[references/examples.md](references/examples.md)** - Example index with use cases
© Cloudflare · MIT · openai/plugins