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ície | O 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
/tmpem 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
| Medida | Valor |
|---|---|
| boot até a 1ª resposta, job Python (p50 / p95) | 260 ms / 266 ms |
| requisição pela API com pool pré-iniciado | 26–43 ms |
| VM parada no pool | 44 MB |
image build --stack python | 8–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
- agents.md: cada comando, flag, rota e erro, numa página só.
- architecture.md: como o host, o VMM e o guest conversam.
- runbook.md: o passo a passo para testar à mão.
- languages.yaml: o catálogo de linguagens, com imagem e limites.