
smolvm v1.15.0
Uma máquina virtual incorporável, portátil e ramificável para executar Agentes localmente com segurança.
smolvm
microVMs ramificáveis para agentes de IA. Incorpore máquinas virtuais leves no seu software, ambientes de desenvolvimento portáteis e sandboxing local.
Instalação
curl -sSL https://smolmachines.com/install.sh | bash # macOS + Linux
Windows: descompacte o release windows-x86_64 e execute smolvm.exe (requer a Windows Hypervisor Platform). Agentes de codificação: execute smolvm --help após a instalação para descobrir todos os comandos.
Início Rápido
smolvm machine run --net --image alpine -- uname -a # VM descartável, removida ao sair
smolvm machine run --net -it --image alpine -- /bin/sh # shell interativo
Local
VMs reais com kernel próprio, gratuitas no seu laptop ou nos seus próprios servidores. Elas inicializam em menos de um segundo, e a memória é elástica, então o host só compromete o que o guest usa. As máquinas persistem entre reinicializações, e qualquer imagem OCI funciona, incluindo as que você constrói 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 # imagem local, sem registry
Declare uma máquina em um Smolfile: imagem, recursos, portas, montagens e política de rede em um único arquivo versionado.
Incorporável
Controle máquinas a partir do seu próprio código com uma única API Machine. Os SDKs rodam no seu processo sem daemon, localmente ou no 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-fonte e documentação: smol-machines/smol · smolmachines.com/docs/sdk
Ramificável
Salve uma máquina em execução no meio da execução, rebobine-a, ou ramifique-a em cópias que continuam rodando a partir do mesmo ponto. Checkpoints capturam RAM, estado da CPU e discos; ramificações são filhos copy-on-write de uma máquina ativa.
smolvm machine create --net --name agent --image alpine
smolvm machine start --name agent --branchable
smolvm machine branch --from agent --name try-1 # filho copy-on-write ativo
smolvm machine checkpoint --name agent -o agent.checkpoint # salve-o, processos e tudo
smolvm machine create --name agent2 --from agent.checkpoint # retome depois ou em outro lugar
Rebobine para uma geração anterior com --from <checkpoint> --at '~N' (veja machine checkpoint-log), e pare sem perder a execução com pause e resume. Mais em Branching e checkpoints incrementais.
Portátil
Empacote uma máquina, independentemente de como você a configurou, em um único arquivo .smolmachine. Envie-o para qualquer registry OCI, ou execute-o como um executável autocontido que inicializa em menos de 200 ms sem nada para 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
Checkpoints também são portáteis: restaure um em outro host ou no smol cloud.
Seguro
Cada workload recebe uma VM com isolamento de hardware e kernel próprio. A rede fica desativada por padrão, a saída pode ser limitada a hosts nomeados, e o código pode usar uma credencial sem nunca lê-la.
A segurança é uma responsabilidade compartilhada. O smolvm fornece a fronteira: uma VM e um kernel separados para cada workload, sem nada alcançar o host a menos que você permita. Você decide o que cruza essa fronteira. Cada pasta que você monta, porta que você abre, host que você permite, e segredo ou agente SSH que você encaminha torna-se algo que o workload pode usar, então dê a um workload não confiável apenas o que ele precisa.
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 # apenas o host exato
NOTION_API_KEY=secret_… smolvm machine run --net --image alpine \
--credential [email protected] -- sh -c 'echo $NOTION_API_KEY' # um placeholder
Veja substituição de credenciais e o modelo de segurança.
Use --allow-host-pattern '*.example.com' para permitir apenas subdomínios. O mais antigo
--allow-host example.com continua permitindo tanto o domínio raiz quanto os subdomínios.
A lista de permissões de uma máquina parada pode ser alterada com smolvm machine update
(--allow-host, --allow-host-pattern, --allow-cidr e suas formas --remove-).
Como Funciona
Cada workload roda em uma VM com virtualização de hardware e kernel guest próprio no Hypervisor.framework (macOS), KVM (Linux), ou na Windows Hypervisor Platform (Windows). O libkrun é o VMM e o libkrunfw fornece o kernel guest. As imagens usam o formato OCI, então qualquer coisa no Docker Hub, ghcr.io ou outro registry inicializa como microVM, sem daemon Docker.
Padrões: 4 vCPUs, 8 GiB de RAM. A memória é elástica via virtio balloon e vCPUs ociosas dormem no hypervisor, então o superprovisionamento custa quase nada. Substitua com --cpus e --mem.