runner.codes

MicroVMs com kernel próprio para código não confiável e agentes de IA. Sobem em ~260 ms e rodam no seu Mac ou num Linux com KVM.

Quando usar

  • Executar código gerado por um LLM sem confiar nele.
  • Dar a um agente uma máquina persistente para trabalhar, que você para, inspeciona e apaga.
  • Rodar código de usuários (exercícios, avaliações, playgrounds) em várias linguagens.
  • Isolar por hardware o que um contêiner isolaria só por namespace.

Se o código é seu, confiável, precisa de rede e dividir o kernel com o host não é problema, um contêiner basta.

Superfícies

SuperfícieO que faz
rc run Um job efêmero: VM nova, executa, devolve stdout e stderr, e some. disponível
rc machine Máquina persistente, com disco gravável, a partir de uma stack ou de qualquer imagem OCI: create, start, exec, shell, cp, logs, stop, delete. disponível
rc serve API HTTP com pool de VMs pré-iniciadas e saída em streaming (SSE). Sem autenticação: escuta em loopback por padrão. disponível
motor libkrun + libkrunfw: Hypervisor.framework no macOS, KVM no Linux. Imagens das linguagens vêm de OCI oficiais, sem Docker. disponível
rc machine branch, pause e resume Derivar máquinas de uma já aquecida, e congelar e retomar. em desenvolvimento
SDK Python e rede opcional Cliente da API em Python, e rede ligada só quando pedida. em desenvolvimento

Garantias de um job (rc run e a API)

  • Kernel próprio: uma VM nova por job, sem dividir kernel com o host.
  • Sem rede: a VM não alcança a internet nem o host.
  • Root somente leitura em disco, com /tmp em memória.
  • Timeout que mata a VM inteira, e as VMs morrem junto se o serviço morrer.

Máquinas do rc machine também têm kernel próprio e ficam sem rede, mas guardam um disco gravável entre um start e outro: é o que as torna persistentes.

Números

MedidaValor
boot até a 1ª resposta, job Python (p50 / p95)260 ms / 266 ms
requisição pela API com pool pré-iniciado26–43 ms
VM parada no pool44 MB
image build --stack python8–10 s

Medido em 19/10/2026 num Mac com Apple Silicon (30 boots).

Começando

Instalação pelo Nix, sem Homebrew nem Docker.

# libkrun + libkrunfw, build do host e do guest, imagem Python
task krun:install
task build
./bin/rc doctor
./bin/rc image build --stack python

# um job efêmero
./bin/rc run --stack python --code 'print(2**10)'

# uma máquina persistente
./bin/rc machine create --name dev --stack python
./bin/rc machine start --name dev
./bin/rc machine exec --name dev -- uname -a

Linguagens: python, nodejs, go, rust, java, c, cpp, ruby, php, perl, bash, sh, awk, jq, sqlite.

Para agentes e máquinas