
smolvm v1.15.0
Una máquina virtual embebible, portátil y ramificable para ejecutar Agentes de forma segura localmente.
smolvm
microVMs ramificables para agentes de IA. Incrusta máquinas virtuales ligeras en tu software, entornos de desarrollo portátiles y sandboxing local.
Instalación
curl -sSL https://smolmachines.com/install.sh | bash # macOS + Linux
Windows: descomprime el release windows-x86_64 y ejecuta smolvm.exe (necesita la Windows Hypervisor Platform). Agentes de programación: ejecuta smolvm --help tras instalar para descubrir todos los comandos.
Inicio Rápido
smolvm machine run --net --image alpine -- uname -a # VM puntual, eliminada al salir
smolvm machine run --net -it --image alpine -- /bin/sh # shell interactivo
Local
VMs reales con su propio kernel, gratis en tu portátil o en tus propios servidores. Arrancan en menos de un segundo, y la memoria es elástica, así que el host solo compromete lo que usa el invitado. Las máquinas persisten entre reinicios, y cualquier imagen OCI funciona, incluidas las que construyes localmente.
smolvm machine create --net --name dev && smolvm machine start --name dev
smolvm machine exec --name dev -- apk add git
docker save myapp | smolvm machine run --image - -- ./app # imagen local, sin registry
Declara una máquina en un Smolfile: imagen, recursos, puertos, montajes y política de red en un único archivo versionado.
Embebible
Controla máquinas desde tu propio código con una única API Machine. Los SDKs se ejecutan en tu proceso sin daemon, localmente o en smol cloud.
npm install smolmachines # Node / TypeScript
pip install smolmachines # Python
cargo add smolmachines # Rust
import { Machine } from 'smolmachines';
const m = await Machine.create({ image: 'python:3.12-alpine', network: true });
const r = await m.exec(['python3', '-c', 'print(2 ** 10)']);
console.log(r.stdout); // 1024
await m.delete();
Código fuente y documentación: smol-machines/smol · smolmachines.com/docs/sdk
Ramificable
Guarda una máquina en ejecución a mitad de ejecución, rebobínala, o ramifícala en copias que siguen ejecutándose desde el mismo punto. Los checkpoints capturan la RAM, el estado de la CPU y los discos; las ramas son hijos copy-on-write de una máquina en vivo.
smolvm machine create --net --name agent --image alpine
smolvm machine start --name agent --branchable
smolvm machine branch --from agent --name try-1 # hijo copy-on-write en vivo
smolvm machine checkpoint --name agent -o agent.checkpoint # guárdala, procesos y todo
smolvm machine create --name agent2 --from agent.checkpoint # reanuda después o en otro lugar
Rebobina a una generación anterior con --from <checkpoint> --at '~N' (ver machine checkpoint-log), y detente sin perder la ejecución con pausa y reanudación. Más en Ramificación y checkpoints incrementales.
Portable
Empaqueta una máquina, sin importar cómo la configures, en un único archivo .smolmachine. Súbela a cualquier registry OCI, o ejecútala como un ejecutable autocontenido que arranca en menos de 200 ms sin nada que instalar.
smolvm machine stop --name dev && smolvm pack create --from-vm dev -o dev
smolvm pack push --file dev.smolmachine ghcr.io/you/dev:v1
smolvm pack create --image python:3.12-alpine -o ./python312
./python312 run -- python3 --version
Los checkpoints también son portables: restaura uno en otro host o en smol cloud.
Seguro
Cada carga de trabajo obtiene una VM aislada por hardware con su propio kernel. La red está desactivada por defecto, la salida puede limitarse a hosts nombrados, y el código puede usar una credencial sin leerla nunca.
La seguridad es una responsabilidad compartida. smolvm proporciona el límite: una VM y un kernel separados para cada carga de trabajo, sin que nada llegue al host a menos que lo permitas. Tú decides qué cruza ese límite. Cada carpeta que montas, puerto que abres, host que permites, y secreto o agente SSH que reenvías se convierte en algo que la carga de trabajo puede usar, así que da a una carga de trabajo no confiable solo lo que necesita.
smolvm machine run --net --image alpine --allow-host registry.npmjs.org -- wget -qO- https://google.com # bloqueado
smolvm machine run --net --image alpine --allow-host-pattern registry.npmjs.org -- wget -qO- https://registry.npmjs.org # solo el host exacto
NOTION_API_KEY=secret_… smolvm machine run --net --image alpine \
--credential [email protected] -- sh -c 'echo $NOTION_API_KEY' # un placeholder
Ver sustitución de credenciales y el modelo de seguridad.
Usa --allow-host-pattern '*.example.com' para permitir solo subdominios. El antiguo
--allow-host example.com sigue permitiendo tanto el dominio raíz como los subdominios.
La lista de permitidos de una máquina detenida puede modificarse con smolvm machine update
(--allow-host, --allow-host-pattern, --allow-cidr y sus formas --remove-).
Cómo Funciona
Cada carga de trabajo se ejecuta en una VM virtualizada por hardware con su propio kernel invitado sobre Hypervisor.framework (macOS), KVM (Linux), o la Windows Hypervisor Platform (Windows). libkrun es el VMM y libkrunfw proporciona el kernel invitado. Las imágenes usan el formato OCI, así que cualquier cosa en Docker Hub, ghcr.io u otro registry arranca como microVM, sin daemon de Docker.
Valores por defecto: 4 vCPUs, 8 GiB de RAM. La memoria es elástica mediante virtio balloon y las vCPUs inactivas duermen en el hipervisor, así que el sobredimensionamiento casi no cuesta nada. Sobrescribe con --cpus y --mem.