Saltar al contenido principal

Casos de uso

Cada caso de abajo se ejecutó en una VM real.

Claude Code en el navegador​

Un agente sin frenos, dentro de una caja. Claude Code corre dentro de una MicroVM con --dangerously-skip-permissions: edita, instala y ejecuta sin pedir confirmación, porque lo que salga mal se queda en la VM.

rc machine create --name agent --image node:22 --net -e IS_SANDBOX=1 \
--init "npm install -g @anthropic-ai/claude-code"
rc machine start --name agent
rc machine web-terminal --name agent -- claude --dangerously-skip-permissions
terminal web · runner.codes
▐▛███▛█ Claude Code v2.1.304 ▝▜██████▀ Opus 5.5 · Claude Max ▝▝ ▝▝ /tmp/demo

❯ Write a tiny Python web server that answers "hello from the playground" on port 8000, start it in the background and check it with curl.

Ran 2 shell commands

● curl isn't installed here, so I'll check the server with Python's HTTP client instead.

Ran 1 shell command

● The server is running in the background on port 8000 and answers hello from the playground. I couldn't check it with curl because curl isn't installed in this environment. Instead I fetched the page with Python's built-in HTTP client and got 200 text/plain with that text.

  • Code: /tmp/demo/server.py uses only Python's standard library and answers any GET request.
  • Log: /tmp/demo/server.log records each request.

To check it with curl yourself, install it first (for example ! apt-get install -y curl), then run curl localhost:8000. To stop the server, run pkill -f server.py, or kill its process ID if pkill isn't available either (pgrep wasn't).

✻ Churned for 15s · done 4:18 PM

──────────────────────────────────────────────────────────────────────────────────────────────────── ❯ install curl and check it ──────────────────────────────────────────────────────────────────────────────────────────────────── ⏵⏵ bypass permissions on (shift+tab to cycle)

Sesión real (20/10/2026): Claude Code escribió y levantó un servidor en el puerto 8000, y el puerto se volvió una pestaña.
QuéCómo
proyectola carpeta del host montada en /workspace: lo que el agente escribe aparece ahí
terminalrc machine web-terminal: solo en 127.0.0.1, con token en la URL
root sin confirmaciónIS_SANDBOX=1 en el runner.code; sin él Claude rechaza --dangerously-skip-permissions como root
puertoscualquier servidor que el agente levante (uvicorn, Vite, una base de datos) se vuelve una pestaña al final de la barra, con la app adentro, y responde en el 127.0.0.1 de tu computadora. La pestaña shell da un terminal aparte y eventos muestra lo que se abrió y cerró
SSH[auth] ssh_agent = true: git push con las claves del host, que no entran en la VM
loginuna vez, con el /login de la suscripción o la clave de la API; queda en /root/.claude en el disco de la máquina y sobrevive al stop
continuarcerrar la pestaña no detiene nada; para retomar después de salir: rc machine web-terminal --name agent -- claude --dangerously-skip-permissions --continue
clave de la API sin entrar en la VM--credential [email protected]:set-header=x-api-key

Todas las pestañas abiertas en la misma URL comparten un PTY: redimensionar una ventana cambia el tamaño para todas.

Pruébalo: claude-in-chrome.runner.codes​

El mismo terminal, publicado: en claude-in-chrome.runner.codes cada visitante recibe una máquina propia con Claude Code abierto y sin confirmaciones de permiso. Haces /login con tu cuenta, y el login queda solo en tu máquina.

claude-in-chrome.runner.codes
claude: sesión iniciada
shell: sesión iniciada
puerto 8000 abierto en la máquina
Eventos reales de una máquina del playground: el servidor del puerto 8000 abre en https://8000-<id>.runner.codes/.
QuéCómo
máquinauna Fly Machine por visitante (Fly no expone /dev/kvm, así que la microVM es la de Fly), 2 vCPUs y 2 GiB
quién eresel visitorId del navegador (FingerprintJS v3, MIT) solo elige qué máquina es tuya; el token del terminal es un HMAC del servidor
puertoscualquier servidor que levantes responde en https://<puerto>-<id>.runner.codes/ y se vuelve una pestaña
redinternet abierta; la red privada de Fly y el proxy /.fly/api quedan cerrados para el visitante
límite3 máquinas; con todas en uso la página avisa "playground is full"
tiempo30 min sin uso la apaga; 24 h sin uso borra la máquina y su disco

El código está en cmd/rc-playground (el front), cmd/rc-visitor (dentro de cada máquina) y deploy/playground/flake.nix (las imágenes, con Nix). La operación paso a paso está en el runbook, sección 8w.

Playground de código​

Ejercicios, corrección automática, sandbox de documentación: cada envío corre en una MicroVM nueva, sin red, y desaparece al final. 15 lenguajes por la misma ruta, 26–43 ms por solicitud con el pool calentado. Ver la API HTTP.

rc serve --listen 127.0.0.1:8080 --pool-size 2
curl -s -X POST http://127.0.0.1:8080/api/v1/run -H 'content-type: application/json' \
-d '{"language":"python","stdin":"oi","files":[{"name":"main.py","content":"print(input().upper())"}]}'

LLM local en la GPU​

llama.cpp con Vulkan dentro de la VM, hablando con la GPU del host por virtio-gpu (Venus → MoltenVK → Metal): 56,7 tokens/s en la GPU frente a 10,3 en la CPU (Qwen2.5 0.5B). No se monta ningún directorio del host salvo que declares un volumen. Detalles en GPU.

Escritorio en el navegador​

La pantalla del navegador (--display), con teclado y ratón, en http://127.0.0.1:6080: para probar una app gráfica o dejar que un agente use una pantalla. Detalles en Pantalla en el navegador.

Escritorio con Claude Code, operado por un agente​

El examples/desktop-claude/runner.code monta un escritorio XFCE en la microVM: fondo negro, los accesos directos Arquivos, Claude, Navegador y Terminal, Firefox como navegador predeterminado y Claude Code instalado. La pantalla acompaña la ventana del navegador, toda aplicación abre maximizada, y un logout vuelve a levantar la sesión sola.

cd examples/desktop-claude
rc machine create --name desk
CLAUDE_CODE_OAUTH_TOKEN=... rc machine start --name desk # el guest solo ve un placeholder del token
open http://127.0.0.1:6080

A partir de ahí, tres formas de enviar trabajo al Claude de esa VM, todas por el SDK de Go (examples/desktop-claude-agent): claude -p por exec (respuesta en JSON), la tarea escrita en su ventana, o escrita por la API de pantalla. Y, con el rc mcp, el Claude Code de tu máquina opera la pantalla de la VM como opera un navegador: captura, clic, teclado.