sandbox-migrate-to-next
Skill1 starsChanged 48 days agoMITView on GitHub
Use when porting a Cloudflare Sandbox app from stable @cloudflare/sandbox to @cloudflare/sandbox@next (Sandbox SDK 1.0 preview), or when the user asks to migrate or upgrade to Sandbox 1.0 / @next. Not for day-to-day stable work (sandbox-stable) or new @next apps (sandbox-next).
- Installs packages
13 other projects use a version of this, 7 of them edited.
Adopted by
Most recently taken up by
- artivilla/agent-skillsedited, first seen Nov 8, 2026
- 1stANUNNAKI/majlisedited, first seen Nov 8, 2026
- adrienlupo/Claude-code-configedited, first seen Nov 1, 2026
- jjsizemore/jjskillstheir own version, first seen Nov 1, 2026
- cloudflare/skillsedited, first seen Oct 27, 2026
- luke-h1/skillsword for word, first seen Oct 25, 2026
Other versions13 projects use a version of this.
Word for word · 5
- ElyzeSolutions/skills★ 1100% same
- davidanthonyn/claude-skills★ 0100% same
- iberi22/skills★ 0100% same
- luke-h1/skills★ 0100% same
- mppyxx/claude-power-pack★ 0100% same
Edited · 7
- cloudflare/skills★ 3.3k87% same
- adrienlupo/Claude-code-config★ 389% same
- 1stANUNNAKI/majlis★ 298% same
- Hahuyphananh/GRYND★ 289% same
- artivilla/agent-skills★ 089% same
- hencter/hencte.top★ 089% same
- kschiavo-beep/claude-skills★ 089% same
Wrote their own version · 1
- jjsizemore/jjskills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository81 other files it gives its agents.
- accessibility-action-planSkill
- accessibility-auditSkill
- accessibility-finding-explainerSkill
- accessibility-report-summarySkill
- agent-config-authoringSkill
- agents-sdkSkill
- ai-ux-patternsSkill
- alt-text-generatorSkill
- anti-ai-copySkill
- aria-usage-reviewSkill
- astro-architectureSkill
- astro-client-scriptsSkill
- astro-component-a11y-reviewSkill
- before-after-accessibility-commsSkill
- bfsg-risk-language-softenerSkill
- biomeSkill
- blog-from-transcriptSkill
- brand-voice-dnaSkill
- case-study-from-auditSkill
- client-email-after-auditSkill
- cloudflare-email-serviceSkill
- cloudflare-one-migrationsSkill
- cloudflare-oneSkill
- cloudflareSkill
- complexity-judgmentSkill
- component-doc-writerSkill
- content-clarity-a11y-checkSkill
- content-qaSkill
- conversation-retrospectiveSkill
- darkmodeSkill
- deep-researchSkill
- design-directionsSkill
- design-systemsSkill
- durable-objectsSkill
- faq-from-issuesSkill
- form-accessibility-reviewSkill
- frontend-designSkill
- handoffSkill
- i18nSkill
- image-to-webpSkill
- keyboard-navigation-reviewSkill
- knowledge-baseSkill
- landing-and-site-builderSkill
- landingpage-from-briefingSkill
- lighthouse-axe-result-explainerSkill
- linkedin-post-from-contentSkill
- llm-councilSkill
- local-business-seoSkill
- mcp-builderSkill
- mdx-contentSkill
- motion-designSkill
- native-html-uiSkill
- newsletter-from-auditSkill
- overlay-tool-risk-explainerSkill
- playwrightSkill
- post-auditSkill
- remotionSkill
- sandbox-nextSkill
- sandbox-sdkSkill
- sandbox-stableSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
9 rules. 5 are common, 0 are distinctive, and 4 are very specific to this project.
5
Common
Most of the 8 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
New projects: should start on @next (sandbox-next), not this skill.
- Common: line 26
Stop after any step that needs a user decision.
- Very specific: line 32
After cutover, await sandbox.exec(...) means process started, not command finished.
- Common: line 36
No single retry loop for every error.
- Very specific: line 37
Do not invent APIs (gitCheckout on core, process stdin, string-exec completion helper).
- Common: line 70
Call sites not covered by the map?
- Common: line 150
Delete transport settings entirely.
- Very specific: line 160
Leave rollout_active_grace_period at default 0 (or set 0 if raised).
- Common: line 169
No live secrets in sandbox env
“Common” is measured: kept by at least 6 in 10 of the 8 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Migrate stable → Sandbox SDK 1.0 preview (@next)
Perform the port. Follow the steps in order. Depth lives in docs—fetch the linked page when a step needs detail.
Human guide: Migrate · 1.0 preview
New projects should start on @next (sandbox-next), not this skill. Day-to-day stable work → sandbox-stable. Deprecated-API cleanup without moving to @next → 2026 deprecation guide first if needed.
Existing apps should migrate when you can, so you are ready when 1.0 becomes the stable release. Do not force production cutover without the user agreeing.
Prefer installed @next types and the migrate doc over memory.
Workflow
- Review hard rules and the replacement map
- Audit the codebase; list hits and target shapes
- Clarify with the user (cutover, bridge, Python image, unclear sites)
- Upgrade package, image, and code
- Validate
Stop after any step that needs a user decision.
Hard rules
- Worker package and container image must be the same
@nextline. - Production cutover uses immediate container rollout. Stable and
@nextcontrol protocols are incompatible both ways; gradual rollout leaves a broken mixed window. In-flight container work can stop. - After cutover,
await sandbox.exec(...)means process started, not command finished. - Argv is as-is (no implicit shell). Shell syntax needs an explicit shell binary.
- Process handles have no stdin → terminals for interactive input.
- Observation
timeout/AbortSignalcancel the wait only, not the process. - No single retry loop for every error.
- Do not invent APIs (
gitCheckouton core, process stdin, string-exec completion helper). - Self-deployed bridge stays on stable (not part of the preview line yet).
Replacement map
| Stable | @next |
SANDBOX_TRANSPORT / transport / setTransport | Remove — RPC only |
await sandbox.exec("cmd") → buffered result | await sandbox.exec(argv) → handle, then output / waits |
execStream / startProcess | Same handle: logs, waitFor*, kill |
| Default / named sessions | Gone — cwd/env per launch, or one shell script |
sandbox.terminal(request) / session terminal | createTerminal + terminal.connect(request) |
xterm sessionId | terminalId |
Interpreter methods on Sandbox | withInterpreter → sandbox.interpreter.* |
gitCheckout | argv git via exec |
| String kill signals | Numeric only |
Files, mounts, backups, ports, tunnels, proxyToSandbox | Mostly unchanged (ignore session/transport bits on stable pages) |
Depth: Migrate · after port, day-to-day → sandbox-next
Audit
rg 'SANDBOX_TRANSPORT|transport:|setTransport|enableDefaultSession|createSession|getSession|deleteSession|execStream\(|startProcess\(|killProcess\(|sandbox\.terminal\(|sessionId|gitCheckout\(|SandboxTransport|ExecutionSession'Also: string exec(, cd then a later exec, bare createCodeContext / runCode on Sandbox.
Clarify (ask when needed)
- OK to cut production with
--containers-rollout=immediate(live processes/terminals/streams may stop)? - Self-deployed bridge? Leave on stable.
- Python interpreter →
-pythonimage variant? - Call sites not covered by the map?
Upgrade
Package and image
npm install @cloudflare/sandbox@nextFROM cloudflare/sandbox:next
# Python: cloudflare/sandbox:next-pythonSame prerelease tag on Worker and image when not on floating next.
Code by area
Apply replacements from the map. For each area, implement from the doc—not from stable habits:
| Area | Doc |
| Commands / handles / waits | Processes · Processes API |
cwd / env / secrets | Environment · Outbound traffic |
| Drop sessions | Migrate · Lifecycle |
| Terminals | Terminals |
| Interpreter | Interpreter |
| Errors | Errors |
| Durable job across requests | Process execution — lifetime / durability |
Commands (shape):
// Before (stable)
const result = await sandbox.exec("npm test");
// After (@next)
const process = await sandbox.exec(["/bin/bash", "-lc", "npm test"]);
const result = await process.output({ encoding: "utf8" });const server = await sandbox.exec(["/bin/bash", "-lc", "npm run dev"], {
cwd: "/workspace/app",
});
await server.waitForPort(3000, { timeout: 60_000 });
await server.kill(); // numeric; default 15Terminals (shape):
const terminal = await sandbox.createTerminal({ command: ["bash"], cwd: "/workspace" });
const t = await sandbox.getTerminal(terminal.id);
if (!t) return new Response("terminal gone", { status: 410 });
return t.connect(request, { cursor, cols, rows });Interpreter (shape):
import { Sandbox as BaseSandbox } from "@cloudflare/sandbox";
import { withInterpreter } from "@cloudflare/sandbox/interpreter";
export class Sandbox extends BaseSandbox<Env> {
interpreter = withInterpreter(this);
}Git (shape):
const clone = await sandbox.exec(
["git", "clone", "--depth", "1", "--", repoUrl, "/workspace/repo"],
{ cwd: "/workspace" },
);
const result = await clone.output({ encoding: "utf8" });Delete transport settings entirely. Remove session APIs. Isolate users with separate sandbox IDs.
Deploy cutover
Staging/branch first. Production is one deploy of matching Worker + image:
npx wrangler deploy --containers-rollout=immediateLeave rollout_active_grace_period at default 0 (or set 0 if raised). After cutover, pre-deploy process/terminal IDs are invalid. Details: Migrate · Container rollouts
Validate
- Lockfile + Dockerfile on the same
@nextline - Typecheck against
@next - Smoke argv
exec+output({ encoding: "utf8" }) - Smoke long process / terminal / interpreter if used
- Errors distinguished: unavailable / interrupted-RPC / stale / local wait
- No live secrets in sandbox env
- Grep again for removed APIs
- Production used
--containers-rollout=immediate
Then day-to-day work uses sandbox-next.
Red flags — stop and fix
- Mixing
@nextWorker with stable image (or reverse) - Gradual container rollout for this cutover
- Treating
await execas command completion - Assuming
cd/ exports persist acrossexeccalls - One retry wrapper for every error
- Inventing
gitCheckout, process stdin, or undocumented APIs - Keeping pre-cutover process/terminal IDs after deploy
- Forcing production cutover without user agreement
- Putting live secrets in
setEnvVars/ launchenv
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

