sandbox-v2-lifecycle

$npx mdskill add vercel-labs/vercel-openclaw/sandbox-v2-lifecycle

Manage persistent OpenClaw sandboxes with Vercel SDK v2 semantics.

  • Automate sandbox creation, resumption, and lifecycle control.
  • Integrates with Vercel Sandbox v2 and OpenClaw runtime.
  • Executes SDK commands based on persistent auto-save state.
  • Delivers sandbox status and diagnostic snapshots to agents.
SKILL.md
.github/skills/sandbox-v2-lifecycleView on GitHub ↗
---
name: sandbox-v2-lifecycle
description: "Vercel Sandbox v2 lifecycle expertise for vercel-openclaw: named persistent OpenClaw sandbox create/resume/stop/delete, persistent auto-save truth, manual snapshot diagnostics, short-lived worker sandboxes, hot spares, and SDK v2 semantics."
---

# Sandbox v2 Lifecycle

Use this skill for `vercel-openclaw` sandbox lifecycle, restore, stop, reset, hot-spare, worker sandbox, and debug timing work.

## Source Of Truth

Official Vercel Sandbox v2 docs are authoritative. Repo docs or agent guidance that assumes v1/manual snapshot restore is stale unless already updated.

Load references only as needed:

- `references/vercel-sandbox-v2-persistent.md` — persistent sandbox auto-save/resume/name/session model.
- `references/vercel-sandbox-v2-sdk.md` — SDK calls, resume flags, delete, command behavior, and network policy notes.
- `references/vercel-sandbox-v2-snapshots.md` — manual Snapshot API semantics.
- `references/vercel-openclaw-lifecycle-map.md` — repo-specific invariants and owner files.

## Core Model

- Main OpenClaw runtime is one named persistent sandbox.
- Persistent `stop()` auto-saves filesystem state; no manual `snapshot()` is needed for normal stop.
- Normal wake resumes by name with `Sandbox.get({ name, resume: true })` through the repo controller.
- `resume` defaults false; use `resume:false` for observation/status reconciliation.
- Commands may auto-resume stopped persistent sandboxes; `stop()` and `update()` do not.
- Manual `snapshot()` is explicit/debug/checkpoint only. It shuts the sandbox down; do not call `stop()` afterward.
- `delete()` permanently removes the persistent sandbox and its sessions/snapshots.
- Worker/debug sandboxes are short-lived; pass `persistent:false`.

## Repo Invariants

- Preserve one persistent OpenClaw sandbox, Redis metadata, channel wake/restore, and short-lived workers.
- Keep SDK access behind `src/server/sandbox/controller.ts` except documented raw SDK debug routes.
- Distinguish host metadata status, SDK status/session, gateway readiness, persistent auto-saved state, and manual Snapshot APIs.
- Do not use manual `snapshotId` as the normal restore gate.
- Preserve `resume:false` during snapshotting/stopped observation.
- Keep lifecycle locks and fail-closed firewall behavior.

## Workflow

1. Read `lat.md/sandbox-lifecycle.md`, `docs/lifecycle-and-restore.md`, and relevant references from this skill.
2. Inspect `src/server/sandbox/lifecycle.ts`, `controller.ts`, `restore-attestation.ts`, `hot-spare.ts`, and worker sandbox code.
3. Classify whether the change affects persistent resume, manual snapshots, reset/delete, workers, or debug diagnostics.
4. Patch the smallest surface that fixes the v2 truth model.
5. Add or adjust targeted tests before broad verification.

## Verification

Run the narrowest covering test first, then broader gates for lifecycle changes:

```bash
node --import tsx --test src/server/sandbox/restore-attestation.test.ts
pnpm run test:lifecycle
pnpm run typecheck
pnpm run lint
lat check
```

When touching launch verification or preflight, also run `pnpm run verify:observability-pass`.
More from vercel-labs/vercel-openclaw