Skills Agentes

Vercel Sandbox

Guía de Vercel Sandbox: microVMs Firecracker efímeras para ejecutar código no confiable de forma segura, útil para agentes de IA, generación de código y experimentación.

Oficial

Reemplaza a: vm2

Estrellas
287

en todo el repo

Actividad
34

0–100, la ruta de este skill

Actualizado
hace 6 meses

último commit aquí

Commits
0

últimos 90 días

Contexto
2.9k tok

55 tok en reposo

Paquete
3 archivos

24 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add vercel/vercel-plugin --skill vercel-sandbox --agent claude-code

Se instala solo en este repositorio.

Este skill makes network requests, needs API credentials.

Qué hace

  • Ejecuta agent-browser + Chrome headless dentro de microVMs efímeras de Vercel Sandbox (Firecracker)
  • Provee patrón withBrowser() para crear, usar y detener sandboxes de forma segura
  • Explica cómo crear sandbox snapshots preinstalados con dependencias de Chromium para arranque en menos de un segundo
  • Cubre autenticación vía OIDC en Vercel o mediante VERCEL_TOKEN/VERCEL_TEAM_ID/VERCEL_PROJECT_ID en local
  • Describe integración con Vercel Cron Jobs para flujos de automatización de navegador programados

Úsalo cuando

  • Ejecutar código no confiable o generado por IA en aislamiento
  • Automatizar navegador (screenshots, snapshots de accesibilidad, llenado de formularios) desde cualquier framework desplegado en Vercel
  • Configurar workflows recurrentes de navegador combinados con Cron Jobs

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • “Ejecuta este código generado por IA en un sandbox aislado”
    • “Toma una captura de pantalla de esta URL usando agent-browser en Vercel Sandbox”
    • “Crea un snapshot de sandbox con Chromium preinstalado”
    • “Configura un cron job que use Vercel Sandbox para revisar una página cada día”

    SKILL.md

    En inglés

    Browser Automation with Vercel Sandbox

    Run agent-browser + headless Chrome inside ephemeral Vercel Sandbox microVMs. A Linux VM spins up on demand, executes browser commands, and shuts down. Works with any Vercel-deployed framework (Next.js, SvelteKit, Nuxt, Remix, Astro, etc.).

    Dependencies

    pnpm add @vercel/sandbox
    

    The sandbox VM needs system dependencies for Chromium plus agent-browser itself. Use sandbox snapshots (below) to pre-install everything for sub-second startup.

    Core Pattern

    import { Sandbox } from "@vercel/sandbox";
    
    // System libraries required by Chromium on the sandbox VM (Amazon Linux / dnf)
    const CHROMIUM_SYSTEM_DEPS = [
      "nss", "nspr", "libxkbcommon", "atk", "at-spi2-atk", "at-spi2-core",
      "libXcomposite", "libXdamage", "libXrandr", "libXfixes", "libXcursor",
      "libXi", "libXtst", "libXScrnSaver", "libXext", "mesa-libgbm", "libdrm",
      "mesa-libGL", "mesa-libEGL", "cups-libs", "alsa-lib", "pango", "cairo",
      "gtk3", "dbus-libs",
    ];
    
    function getSandboxCredentials() {
      if (
        process.env.VERCEL_TOKEN &&
        process.env.VERCEL_TEAM_ID &&
        process.env.VERCEL_PROJECT_ID
      ) {
        return {
          token: process.env.VERCEL_TOKEN,
          teamId: process.env.VERCEL_TEAM_ID,
          projectId: process.env.VERCEL_PROJECT_ID,
        };
      }
      return {};
    }
    
    async function withBrowser<T>(
      fn: (sandbox: InstanceType<typeof Sandbox>) => Promise<T>,
    ): Promise<T> {
      const snapshotId = process.env.AGENT_BROWSER_SNAPSHOT_ID;
      const credentials = getSandboxCredentials();
    
      const sandbox = snapshotId
        ? await Sandbox.create({
            ...credentials,
            source: { type: "snapshot", snapshotId },
            timeout: 120_000,
          })
        : await Sandbox.create({ ...credentials, runtime: "node24", timeout: 120_000 });
    
      if (!snapshotId) {
        await sandbox.runCommand("sh", [
          "-c",
          `sudo dnf clean all 2>&1 && sudo dnf install -y --skip-broken ${CHROMIUM_SYSTEM_DEPS.join(" ")} 2>&1 && sudo ldconfig 2>&1`,
        ]);
        await sandbox.runCommand("npm", ["install", "-g", "agent-browser"]);
        await sandbox.runCommand("npx", ["agent-browser", "install"]);
      }
    
      try {
        return await fn(sandbox);
      } finally {
        await sandbox.stop();
      }
    }
    

    Screenshot

    The screenshot --json command saves to a file and returns the path. Read the file back as base64:

    export async function screenshotUrl(url: string) {
      return withBrowser(async (sandbox) => {
        await sandbox.runCommand("agent-browser", ["open", url]);
    
        const titleResult = await sandbox.runCommand("agent-browser", [
          "get", "title", "--json",
        ]);
        const title = JSON.parse(await titleResult.stdout())?.data?.title || url;
    
        const ssResult = await sandbox.runCommand("agent-browser", [
          "screenshot", "--json",
        ]);
        const ssPath = JSON.parse(await ssResult.stdout())?.data?.path;
        const b64Result = await sandbox.runCommand("base64", ["-w", "0", ssPath]);
        const screenshot = (await b64Result.stdout()).trim();
    
        await sandbox.runCommand("agent-browser", ["close"]);
    
        return { title, screenshot };
      });
    }
    

    Accessibility Snapshot

    export async function snapshotUrl(url: string) {
      return withBrowser(async (sandbox) => {
        await sandbox.runCommand("agent-browser", ["open", url]);
    
        const titleResult = await sandbox.runCommand("agent-browser", [
          "get", "title", "--json",
        ]);
        const title = JSON.parse(await titleResult.stdout())?.data?.title || url;
    
        const snapResult = await sandbox.runCommand("agent-browser", [
          "snapshot", "-i", "-c",
        ]);
        const snapshot = await snapResult.stdout();
    
        await sandbox.runCommand("agent-browser", ["close"]);
    
        return { title, snapshot };
      });
    }
    

    Multi-Step Workflows

    The sandbox persists between commands, so you can run full automation sequences:

    export async function fillAndSubmitForm(url: string, data: Record<string, string>) {
      return withBrowser(async (sandbox) => {
        await sandbox.runCommand("agent-browser", ["open", url]);
    
        const snapResult = await sandbox.runCommand("agent-browser", [
          "snapshot", "-i",
        ]);
        const snapshot = await snapResult.stdout();
        // Parse snapshot to find element refs...
    
        for (const [ref, value] of Object.entries(data)) {
          await sandbox.runCommand("agent-browser", ["fill", ref, value]);
        }
    
        await sandbox.runCommand("agent-browser", ["click", "@e5"]);
        await sandbox.runCommand("agent-browser", ["wait", "--load", "networkidle"]);
    
        const ssResult = await sandbox.runCommand("agent-browser", [
          "screenshot", "--json",
        ]);
        const ssPath = JSON.parse(await ssResult.stdout())?.data?.path;
        const b64Result = await sandbox.runCommand("base64", ["-w", "0", ssPath]);
        const screenshot = (await b64Result.stdout()).trim();
    
        await sandbox.runCommand("agent-browser", ["close"]);
    
        return { screenshot };
      });
    }
    

    Sandbox Snapshots (Fast Startup)

    A sandbox snapshot is a saved VM image of a Vercel Sandbox with system dependencies + agent-browser + Chromium already installed. Think of it like a Docker image -- instead of installing dependencies from scratch every time, the sandbox boots from the pre-built image.

    This is unrelated to agent-browser's accessibility snapshot feature (agent-browser snapshot), which dumps a page's accessibility tree. A sandbox snapshot is a Vercel infrastructure concept for fast VM startup.

    Without a sandbox snapshot, each run installs system deps + agent-browser + Chromium (~30s). With one, startup is sub-second.

    Creating a sandbox snapshot

    The snapshot must include system dependencies (via dnf), agent-browser, and Chromium:

    import { Sandbox } from "@vercel/sandbox";
    
    const CHROMIUM_SYSTEM_DEPS = [
      "nss", "nspr", "libxkbcommon", "atk", "at-spi2-atk", "at-spi2-core",
      "libXcomposite", "libXdamage", "libXrandr", "libXfixes", "libXcursor",
      "libXi", "libXtst", "libXScrnSaver", "libXext", "mesa-libgbm", "libdrm",
      "mesa-libGL", "mesa-libEGL", "cups-libs", "alsa-lib", "pango", "cairo",
      "gtk3", "dbus-libs",
    ];
    
    async function createSnapshot(): Promise<string> {
      const sandbox = await Sandbox.create({
        runtime: "node24",
        timeout: 300_000,
      });
    
      await sandbox.runCommand("sh", [
        "-c",
        `sudo dnf clean all 2>&1 && sudo dnf install -y --skip-broken ${CHROMIUM_SYSTEM_DEPS.join(" ")} 2>&1 && sudo ldconfig 2>&1`,
      ]);
      await sandbox.runCommand("npm", ["install", "-g", "agent-browser"]);
      await sandbox.runCommand("npx", ["agent-browser", "install"]);
    
      const snapshot = await sandbox.snapshot();
      return snapshot.snapshotId;
    }
    

    Run this once, then set the environment variable:

    AGENT_BROWSER_SNAPSHOT_ID=snap_xxxxxxxxxxxx
    

    A helper script is available in the demo app:

    npx tsx examples/environments/scripts/create-snapshot.ts
    

    Recommended for any production deployment using the Sandbox pattern.

    Authentication

    On Vercel deployments, the Sandbox SDK authenticates automatically via OIDC. For local development or explicit control, set:

    VERCEL_TOKEN=<personal-access-token>
    VERCEL_TEAM_ID=<team-id>
    VERCEL_PROJECT_ID=<project-id>
    

    These are spread into Sandbox.create() calls. When absent, the SDK falls back to VERCEL_OIDC_TOKEN (automatic on Vercel).

    Scheduled Workflows (Cron)

    Combine with Vercel Cron Jobs for recurring browser tasks:

    // app/api/cron/route.ts  (or equivalent in your framework)
    export async function GET() {
      const result = await withBrowser(async (sandbox) => {
        await sandbox.runCommand("agent-browser", ["open", "https://example.com/pricing"]);
        const snap = await sandbox.runCommand("agent-browser", ["snapshot", "-i", "-c"]);
        await sandbox.runCommand("agent-browser", ["close"]);
        return await snap.stdout();
      });
    
      // Process results, send alerts, store data...
      return Response.json({ ok: true, snapshot: result });
    }
    
    // vercel.json
    { "crons": [{ "path": "/api/cron", "schedule": "0 9 * * *" }] }
    

    Environment Variables

    Variable Required Description
    AGENT_BROWSER_SNAPSHOT_ID No (but recommended) Pre-built sandbox snapshot ID for sub-second startup (see above)
    VERCEL_TOKEN No Vercel personal access token (for local dev; OIDC is automatic on Vercel)
    VERCEL_TEAM_ID No Vercel team ID (for local dev)
    VERCEL_PROJECT_ID No Vercel project ID (for local dev)

    Framework Examples

    The pattern works identically across frameworks. The only difference is where you put the server-side code:

    Framework Server code location
    Next.js Server actions, API routes, route handlers
    SvelteKit +page.server.ts, +server.ts
    Nuxt server/api/, server/routes/
    Remix loader, action functions
    Astro .astro frontmatter, API routes

    Example

    See examples/environments/ in the agent-browser repo for a working app with the Vercel Sandbox pattern, including a sandbox snapshot creation script, streaming progress UI, and rate limiting.

    Reproducido de vercel/vercel-plugin bajo licencia NOASSERTION. Leer esta página en markdown.

    Archivos

    3 archivos en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Antes de instalar

    Requiere el paquete @vercel/sandbox y, para uso local, VERCEL_TOKEN, VERCEL_TEAM_ID y VERCEL_PROJECT_ID (en Vercel se usa OIDC automáticamente).

    Necesita en el PATH:npxpnpm

    Variables de entorno:AGENT_BROWSER_SNAPSHOT_IDCHROMIUM_SYSTEM_DEPSVERCEL_PROJECT_IDVERCEL_TEAM_IDVERCEL_TOKEN

    Detalles

    Creador
    vercel
    Licencia
    NOASSERTION
    Recursos incluidos
    Incluye scripts o referencias
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de vercel/vercel-plugin

    Este repo incluye 43 skills. Si instalas uno, normalmente ya tienes los demás. Ver el pack vercel-plugin entero y su comando de instalación

    Corrige el conocimiento desactualizado del LLM sobre la plataforma Vercel e introduce sus productos nuevos. Se inyecta al inicio de la sesión.

    Costo de contexto al activarse
    1.8k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    Oficialdevops infraestructura

    Guía experta de Vercel Connect: obtén tokens OAuth con permisos limitados para servicios de terceros (Slack, GitHub, servidores MCP, OAuth, Snowflake) en nombre de apps o usuarios vía Vercel OIDC.

    Costo de contexto al activarse
    4.8k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    Oficialdesarrollo apis

    Depura el caching de la CDN de Vercel: tasa de aciertos, contenido obsoleto, revalidación, ISR + PPR, cacheReason, ppr_state y costos.

    Costo de contexto al activarse
    5.2k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 2 meses
    Oficialdevops infraestructura

    Guía experta sobre Vercel Functions: Serverless Functions, Edge Functions, Fluid Compute, streaming, Cron Jobs y configuración de runtime para código server-side en Vercel.

    Costo de contexto al activarse
    5.6k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    Oficialdevops infraestructura

    Guía de arquitectura backend: úsala para planear, construir o migrar una API o backend, elegir entre Functions, Services, contenedores, Workflow, Queues y bases de datos de Marketplace, o seleccionar framework y runtime.

    Costo de contexto al activarse
    1.5k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    el mes pasado
    Oficialdesarrollo apis

    Eve

    287

    Guía de eve, el framework para agentes de IA duraderos: runtime basado en filesystem, sesiones, tools, skills, canales, sandboxes, subagentes, schedules, evals y observabilidad con Agent Runs.

    Costo de contexto al activarse
    1.5k tok
    Tamaño del paquete
    3 archivos
    Última actualización
    el mes pasado
    Oficialherramientas desarrollo

    Skills relacionados

    Accede y prueba deployments de Vercel protegidos por Vercel Authentication, SSO o Deployment Protection, usando `vercel curl` o un token OIDC de corta duración.

    Costo de contexto al activarse
    1.9k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 2 meses
    Oficialdevops infraestructura

    Orquestador de bootstrap para repos que dependen de recursos vinculados a Vercel (bases de datos, auth, integraciones), asegurando el orden correcto de linkeo, provisión y primer arranque.

    Costo de contexto al activarse
    2k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 7 meses
    Oficialdevops infraestructura

    Depura el caching de la CDN de Vercel: tasa de aciertos, contenido obsoleto, revalidación, ISR + PPR, cacheReason, ppr_state y costos.

    Costo de contexto al activarse
    5.2k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 2 meses
    Oficialdevops infraestructura