Every control that lives inside the agent's reach is not a control. CorpoClaw puts the boundary underneath the agent — a separate kernel it cannot rewrite, an egress policy it cannot edit, and a kill switch that fires in the kernel before its syscall completes.
Three adversaries, one regulator. Every design choice downstream traces back to one of these.
Prompt injection turns the agent into an insider. It exfiltrates source, keys, or customer data over a channel it was already allowed to use. It deletes, commits, or pushes things it shouldn't.
The agent writes code and runs it. That code is untrusted by construction. A kernel exploit inside it must not reach the host or any other tenant.
One desk's agent must not see, reach, or affect another's — not through the kernel, not through the network, not through shared state on the node.
In March 2026, Ona researchers watched Claude Code reason its way past its own command denylist via /proc/self/root/… and then disable its own bubblewrap sandbox to finish the job. Separately, a leaked bashPermissions.ts showed a 50-subcommand cap that failed open — to a permission prompt, not a block. Even Ona's own kernel-level binary-hash check at the BPF LSM execve hook was bypassed through the ELF dynamic linker: mmap, not execve.
Claude Code, Gemini CLI and Codex CLI all ship sandboxes. Use them — as the innermost layer. Never as the boundary.
A cut-through of one sandbox. Read it bottom-up: that is both the boot order and the trust order. The heavy rule is the only line in this drawing enforced by silicon.
Kata is the framework. The VMM underneath it is the actual decision, and it is not one VMM — it is three, chosen by what the workload is allowed to touch.
The device model is the attack surface, the feature set and the boot time. Choosing a VMM is choosing where you sit on the line between "fewer devices" and "more capability". Two questions get you there.
| VMM | Lang / size | Device model | Cold boot | Snapshot | VFIO / GPU | Confidential | Used by |
|---|---|---|---|---|---|---|---|
| Firecracker | Rust · ~50k | 5 virtio · no PCI, USB, BIOS | ~125 ms | YES ~4 ms | NONE | NO | Lambda, Fargate, E2B, Vercel |
| Cloud Hypervisor | Rust · ~50k | virtio + PCI (~16 devices) | ~200 ms | YES + userfaultfd | YES, less mature | TDX | Northflank, Fly.io GPU |
| QEMU | C · ~2M | 40+ devices, full emulation | seconds | YES | YES — most mature | SNP + TDX | everyone, eventually |
| Dragonball | Rust · in-shim | virtio + VFIO | ultra-light | — | YES | — | Ant / Alibaba |
| libkrun | Rust · library | virtio + virtio-gpu | <200 ms | — | macOS path only | SEV / TDX | Podman, RamaLama, microsandbox |
| Hyperlight | Rust · library | none — no kernel, no OS | 1–2 ms | ~900 µs warm | n/a | — | Azure edge (early) |
libkrun's own documentation states that the guest and the VMM sit in the same security context and should be thought of as one entity — host resources reachable by the VMM are potentially reachable by the guest. It expects you to wrap the VMM in namespaces. That is a fundamentally different posture from Firecracker's jailer. Do not put libkrun in Tier 2 without an independent host-side jail around it.
Hyperlight exposes the guest a linear slice of memory and a CPU — no kernel, no OS. Unikraft is single-address-space and single-purpose. Neither can run a shell, git, npm or Ollama. An agentic CLI exists to fork and exec subprocesses; that is the one thing these are built not to do.
No network, no persistent storage, no PCI — so no GPU, no remote-API CLI, no weights. Useless as an agent sandbox. Excellent as the key broker: mint capability tokens and hold API keys inside an attested enclave, so a root-compromised orchestrator still cannot exfiltrate them.
Tier 3 is where the architecture stops being a software choice. Handing a guest a real PCIe device hands it a DMA engine — the IOMMU is the only thing between that and host memory.
Exfiltration is a network problem. If the agent's packet cannot leave, the injection failed — regardless of how thoroughly it owned the sandbox.
Rev 1 argued for gVisor at Tier 1 on latency grounds. Snapshots delete that argument: you pay the microVM boot cost once, at template build, then restore per task in single-digit milliseconds.
Same OCI image, same RuntimeClass mechanism, four substrates. Descend the ladder only as far as the environment forces you — and know exactly what you give up on each rung.
/dev/kvm on public cloud → fall back to gVisor." That was true then. AWS shipping nested virt on non-metal instances in Feb 2026 makes Rung 2 the realistic default for Tiers 1 and 2.This is the tier that answers "who could have read the prompt?" with a cryptographic measurement instead of an org chart.
No PCI bus, no VFIO, PCIe work paused 2025. Rev 1 listed it as a GPU-capable Kata backend. It is not, and never was. Tier 3 moves to kata-qemu-nvidia-gpu.
AWS shipped it on non-metal EC2 on 12 Feb 2026. Rev 1's "fall back to gVisor on public cloud" is superseded. But nested virt still does not give you VFIO, so Tier 3 stays on bare metal.
Restore in 4–30 ms versus a 125–300 ms cold boot. The main reason Rev 1 preferred gVisor at Tier 1 no longer holds. Warm pools become the highest-leverage build item.
Balloon numbers tie back to Fig. A. Filter by tier to see what a single tier costs you.
| # | Component | Identifier | Role | Tiers |
|---|---|---|---|---|
| 1 | Bare-metal host | IOMMU · VT-d / AMD-Vi | Physical substrate. IOMMU enabled in BIOS, clean IOMMU groups. Required for any GPU tier. | ALL |
| 2 | Host Linux kernel + KVM | /dev/kvm | Hardware virtualization. Without it, Kata falls back to QEMU TCG at 10–100× slowdown. | ALL |
| — | containerd + CRI | containerd | Runtime plumbing. RuntimeClass is the switch that selects everything below. | ALL |
| 5 | Hardened runc | runc | seccomp-bpf, AppArmor/SELinux, cgroups v2, userns, no-new-privs, dropped caps, read-only root. | T0 |
| 5 | Cloud Hypervisor | kata-clh | Tier 1 VMM. Rust, PCI bus, snapshot/restore with userfaultfd, CPU/mem hotplug. | T1 |
| 5 | Firecracker + jailer | kata-fc | Tier 2 VMM. Smallest device model in the field. Jailer applies ns + cgroups + seccomp to the VMM itself. | T2 |
| 5 | QEMU + VFIO | kata-qemu-nvidia-gpu[-snp|-tdx] | Tier 3 VMM. The only backend NVIDIA and Kata both document for GPU passthrough. | T3 · CC |
| 5 | gVisor | runsc | The no-KVM floor and the GPU fallback (nvproxy). Userspace kernel; pays the I/O tax. | T1-alt |
| 5 | Peer pods | kata-remote | CoCo cloud-api-adaptor. A real cloud VM per pod. Long-lived workloads only. | fallback |
| 7 | Guest kernel + kata-agent | kata-agent | One kernel per workload. In-guest supervisor. This is what makes a kernel exploit non-transitive. | T1–CC |
| 7 | virtio device set | virtio-blk · virtiofs · virtio-net · vsock | The guest's only view of the outside. Fewer devices = smaller surface. | T1–CC |
| 8 | OCI container spec | read-only root + tmpfs | Writable overlay sized to the repo; CPU/RAM/PID caps; secrets scrubbed from env, not inherited by children. | ALL |
| 3 | Cilium | CiliumNetworkPolicy | eBPF CNI. Default-deny egress; allowlist by IP/CIDR + TLS-SNI. Never hostname suffix. | ALL |
| 4 | Tetragon | TracingPolicy | eBPF enforcement. In-kernel SIGKILL on non-allowlisted egress, sensitive-file access, kmod load. 1–3% CPU. | ALL |
| 10 | Kill switch | SIGKILL + VM teardown | Two-stage: kernel kill, then destroy the microVM. Network severed, state discarded, atomically. | ALL |
| 12 | Snapshot template builder | boot → warm → snapshot | Pay boot cost once. Warm the toolchain and package caches before the snapshot is taken. | T1 · T2 |
| 12 | Warm pool manager | restore-per-task | Restore in 4–30 ms instead of cold-booting. Destroy after each task. | T1 · T2 |
| 12 | PRNG reseed hook | RNDADDENTROPY + userspace | Cloned VMs share CSPRNG state. Reseed kernel and userspace per fork or sandboxes mint identical nonces. | T1 · T2 |
| 12 | Block snapshot | overlay / block layer | VM snapshots capture memory + device state, not the block device. Snapshot the filesystem separately. | T1 · T2 |
| — | NVIDIA GPU Operator | sandboxWorkloads · kataManager · ccManager | Drives the VFIO bind into the Kata VM without breaking the trust boundary. | T3 · CC |
| — | vfio-pci binding | vfio-pci | Unbind GPU from the nvidia driver, rebind to vfio. Verify IOMMU groups are clean first. | T3 · CC |
| — | NVIDIA Attestation SDK | local verifier | Guest pre-start hook. Combined CPU + GPU attestation evidence. | CC |
| — | Confidential Containers | CoCo · Kata-CC | Images pulled inside the guest (never exposed to the host), attestation agent, confidential data hub, dm-verity. | CC |
| — | Trustee / KBS | key broker + attestation service | Releases keys only to a matching enclave measurement. Reference-value provider. | CC |
| — | Attested key broker | Nitro Enclave / SEV-SNP TEE | Holds API keys and mints capability tokens. A root-compromised orchestrator still cannot exfiltrate them. | CC · X |
| — | SPIFFE / SPIRE | workload identity | Per-agent cryptographic identity — not inherited from the initiating human. | ALL |
| — | Capability token minter | task-scoped, non-wideable | The agent cannot widen its own scope. This is half the answer to the permitted-action gap. | ALL |
| — | vCluster + vNode | tenant isolation | Control-plane and node-level tenancy. Orthogonal to, and layered over, the per-workload sandbox. | ALL |
| 11 | Audit tap → store → SIEM | append-only, tamper-evident | Tetragon event stream, correlated per tenant. The evidence a SOC 2 / ISO 27001 auditor actually wants. | ALL |
| — | Behavioural detection | TO BUILD | The other half of the permitted-action gap. Nothing else in this BOM catches an agent acting within policy for someone else's reasons. | ALL |
| 9 | Claude Code | OCI image | Egress: api.anthropic.com, statsig, sentry. Its own bubblewrap sandbox runs inside, as the innermost layer only. | T1 |
| 9 | Gemini CLI | OCI image | Bubblewrap + seccomp; write-protects .git, hides .env*. Opt-in, so we do not rely on it. | T1 |
| 9 | Codex CLI | OCI image | Landlock + seccomp, sandboxed by default, network off during the agent phase. The best-behaved of the three. | T1 |
| 9 | Ollama | OCI image + RO weights volume | GPU via VFIO. Weights read-only. Egress off once pulled — then zero network, permanently. | T3 · CC |
The −99% / −76% / −42% figures come from one Feb 2026 study plus a 2022 journal paper. gVisor's own docs publish charts, not percentages, and note Netstack is improving. Benchmark your own agent loop — git clone, npm install, build, LLM round-trip — before you trust a tier assignment.
The PCIe project was paused, not cancelled. The team framed the trade as PCIe costing memory overcommit and boot speed, with GPU snapshotting explicitly out of scope for the first iteration. Re-check before you commit the rack.
Kata virtiofsd argument injection → host filesystem escape. Recent enough that you should verify patch and advisory status directly against the version you deploy. No boundary is unbreakable; that is why there are four layers.
Every GPU tier trades a little of the microVM guarantee for hardware access. The IOMMU is the boundary. Dirty IOMMU groups quietly undo it. Verify groups before you trust the tier.
Edera's numbers come from Edera's own paper. ZeroBoot's comparison table comes from ZeroBoot. Unikraft's "few milliseconds" does not match the independent 232 ms edge measurement. Leads, not evidence.
Apple Containerization v1.0 shipped Jun 2026. Google reported 16× sandbox growth on GKE in under five months. Docker shipped per-agent microVM sandboxes. Treat this drawing as a snapshot with a revision number, not a settled standard.