Agent SDK, built around a sandbox.
Open source, for Python, Node.js and Rust.
Trusted by




01 · Run
One real run of the SAM3 example: it tracked a baby through 99 frames on the GPU, hit an error, fixed it and handed back two files.
/examples/sam3 →Remove background baby-turns-around.gif · 99 frames
Background removed; animation preserved.
inside its VM · /artifacts/baby-no-background.webp
02 · How it works
Only what it writes to /artifacts comes back.
/docs →console = await ( ConsoleClient.builder() .image( Recipe("python:3.12-slim-trixie") .step("… mesa-vulkan-drivers from trixie-backports …") .step("pip install … ncnn") ) .mount_readonly("data/ncnn", "/models") .mount_readonly(skill, "/skills/sam3") .mount_readonly("context", "/context") .mount("artifacts", "/artifacts") .network(True) .gpu(True) .build()) agent = await ( ailoy.AgentBuilder("openai/gpt-6-astra") .instruction(INSTRUCTION) .system_tools() .console(console) .skill("/skills/sam3") .build()) async with console: async for output in agent.run("Remove background"): print(output["message"])examples/sam3/python/main.py · trimmed →
const consoleClient = await ConsoleClient.builder() .image( new Recipe('python:3.12-slim-trixie') .step('… mesa-vulkan-drivers from trixie-backports …') .step('pip install … ncnn'), ) .mountReadonly('data/ncnn', '/models') .mountReadonly(skill, '/skills/sam3') .mountReadonly('context', '/context') .mount('artifacts', '/artifacts') .gpu(true) .build() const agent = await new AgentBuilder('openai/gpt-6-astra') .instruction(INSTRUCTION) .systemTools() .console(consoleClient) .skill('/skills/sam3') .build() for await (const { message } of agent.run('Remove background')) { console.log(message)}examples/sam3/node/main.mjs · trimmed →
let mut agent = AgentBuilder::new("openai/gpt-6-astra") .instruction(INSTRUCTION) .system_tools() .console( ConsoleClient::builder() .image( Recipe::new("python:3.12-slim-trixie") .step("… mesa-vulkan-drivers from trixie-backports …") .step("pip install … ncnn"), ) .mount_readonly(project.join("data/ncnn"), "/models") .mount_readonly(skill, "/skills/sam3") .mount_readonly(project.join("context"), "/context") .mount(project.join("artifacts"), "/artifacts") .gpu(true) .build() .await?, ) .skill("/skills/sam3") .build() .await?; let mut stream = agent.run(query);while let Some(output) = stream.next().await { println!("{:?}", output?.message);}examples/sam3/rust/main.rs · trimmed →
The microVM comes from virtx, our open-source runtime: disposable Linux VMs created from code, with no Docker or daemon.
03 · Why a VM
Compared by category, from each category’s public docs. Where a whole category cannot be pinned down, the cell says so.
| Host process | OS sandbox | Container | Hosted sandbox API | Ailoy | |
|---|---|---|---|---|---|
| e.g. | an SDK’s local runner | Seatbelt- or Landlock-based tools | Docker, Podman | E2B, Daytona, Modal | |
| Where the work runs | your computer | your computer | your computer | the provider’s cloud | your computer |
| Boundary | none, or file rules only | policy on the host kernel | namespaces on the shared host kernel | varies by provider | its own Linux kernel (microVM) |
| GPU inside the boundary | no boundary | varies | possible, with setup | varies | Vulkan · Metal, passed through |
| Host OS | any | platform-specific | Linux; a VM on macOS and Windows | any (it is remote) | Linux · macOS · Windows |
| Background service | none | none | a container daemon | an API and an account | none |
| Fine-grained policy | none | policy language, deny by default | varies | varies | mounts, network on or off |
Read 2026-10-20.↑ another category is ahead here
04 · Roadmap
Each step keeps the agent and its machine as one thing you ship.
1 now
Local runtime
Your agent runs in its own microVM on your machine.
2 planned
Self-hosted fleet
The same machine runs on your servers, many at once.
3 planned
Managed cloud
Every agent gets a computer on demand, run by BrekkyLab.
05 · Start