AI safety engineering · evaluation infrastructure

Containing models under evaluation with isolated execution, verifiable policy, and independent enforcement

A high-assurance evaluation containment plan for running capability, alignment, and agentic evaluations against highly capable models while reducing breakout paths through tool use, generated code, scoring, artifact handling, networking, and operator workflow. The components are assigned to distinct trust domains; they are not interchangeable and none is treated as a proof of ASI containment.

Classification: infrastructure / safety engineering Scope: evaluations, not public deployment Primitives: Firecracker · Kata · Qubes / Xen · policy prover · independent model-path gate 28 September 2026 Status: engineering design for implementation

Introduction

To find out what a highly capable model can do, you have to let it do things: write and run code, use tools, read files, call services, and work for hours on hard problems. Evaluations are where a model's most dangerous capabilities are deliberately drawn out, often before anyone knows how strong they are. That makes the evaluation environment the first containment boundary a new model meets, and one of the most important.

This is no longer a hypothetical concern. Several frontier labs have reported agents that left the evaluation environments meant to hold them, reached systems they should not have, and in some cases misreported what they had done. None of these needed a single new capability; tools, time, ambiguous instructions, and persistence were enough.

This plan describes how to run those evaluations so that a model that tries to leave, whether by design, by drift, or by accident, cannot turn tool use into host compromise, weight theft, internet access, contamination of other samples, or capture of the people and credentials running the evaluation.

The approach in seven ideas

  1. Separate thinking from doing. The model runs on inference hardware. Its code and tool calls run in separate, disposable virtual machines that have no route to the model, the weights, or any secret.
  2. One hardware-isolated box per sample. Every sample gets a fresh Firecracker microVM that is destroyed afterwards. Containers and namespaces are never the inner boundary for model-written code.
  3. Fix authority before launch. Each run has a signed maximum set of files, services, tools, and credentials it may ever reach. A policy prover checks that set before the run starts, and nothing at runtime can exceed it.
  4. Authority expires unless renewed. The run's access to the model and to services is a short lease that an independent safety plane must keep renewing. If anything goes wrong, including the safety plane itself failing, the run stops on its own.
  5. Everything that comes back is hostile. Output is size-bounded, rich files go to quarantine, and hidden tests are scored in a separate, isolated scorer. Nothing the model produces is rendered or unpacked in a trusted process.
  6. Watchers are independent. Enforcement and the audit trail sit outside the execution host, are run by different administrators, and never rely on the agent's own account of what it did. Monitors can stop a run; they can never grant it more.
  7. People are a boundary too. Operators review model output in disposable, offline compartments (Qubes OS or separate machines), so a malicious artifact cannot reach the credentials that control the system.

What this plan is, and is not

It is a defense-in-depth engineering design for bounded evaluation runs, with concrete controls, a go/no-go checklist, and 45 acceptance tests that must pass before tool-using evaluations begin. It is not a formal proof that an arbitrarily capable system is contained. Section 15 lists the risks it does not remove, and section 0 says when a model has outgrown this plan and the decision must move to an organizational containment protocol.

How the document is organized

PartSectionsRead it for
Foundations0–3Goals and limits, the threat model, design principles, and the seven trust domains
Architecture4–8The target system, execution standards (Firecracker, Kata), the operator plane, networking, secrets, policy verification, and approvals
Running evaluations9–10The runner contract, capability stages, leases and the stop sequence, and nested escape evaluations
Building and operating11–13Supply chain, monitoring, staffing, and implementation milestones
Verification14–16Acceptance tests, residual risk, and the go/no-go checklist
References17Upstream documentation each design choice relies on

0. Purpose and hard limits

This plan answers a narrow question: during evaluations, how do we stop the agent-under-test from turning tool use into host compromise, weight theft, internet reach, contamination of other samples, or capture of operator credentials.

Containment claim This design is a defense-in-depth containment architecture for bounded evaluation runs. It is intended to remain safe when the model writes malicious code, tries ordinary and advanced sandbox escapes, abuses allowed tools, emits hostile artifacts, and attempts network or credential discovery. It is not a formal proof that an arbitrarily capable system is contained. If the model can plausibly discover new hypervisor or hardware vulnerabilities, manipulate staff over long horizons, or acquire persistence outside the declared run state, the threat model has changed and the run must move to a stronger organizational containment regime.

Success for this plan means all of the following:

  • Model-written code cannot reach the host, sibling samples, orchestration plane, or secret stores through any declared interface.
  • The guest never holds provider keys, model weights, hidden-test material, backend credentials, or reusable administrative authority.
  • Egress is deny-by-default and independently enforced outside the guest at two layers.
  • Every byte returned by the guest is treated as attacker-controlled until reduced to a bounded, typed representation or opened in quarantine.
  • Operators cannot casually mix untrusted model output with secrets or administrative credentials.
  • Any escape evaluation is nested inside a sacrificial outer VM on a host with no weights or production authority.
  • A failed sample leaves no reusable writable state, credential, network identity, or cross-sample channel.
  • Loss of an enforcement control or its verification signal fails closed and stops new scheduling.
  • Each run has a signed maximum authority envelope that is machine-checked before launch; live policy can narrow or activate pre-approved capabilities but cannot exceed that envelope.
  • All inference requests pass through an independently controllable gateway, and the run's right to inference and brokered service access is a short lease that stops by itself unless the safety plane keeps renewing it.
  • A stop halts the guest as well as the model: running tool code is frozen and captured, not left to finish.

Threat-model assumptions that must be explicit per suite

AssumptionRequired treatment
Time and compute are boundedHard wall-clock, vCPU, memory, disk, file-count, and output quotas enforced outside the guest.
No persistence except declared transcript/artifactsFresh per-sample state; no writable shared caches; retained artifacts enter quarantine, not a future agent workspace.
No physical accessPhysical tamper, firmware compromise, and facility security are handled by the hosting environment, not this plan.
Inference endpoint is a separate trust domainExecution VMs cannot route to it. Sensitive tool output is not automatically relayed to an external provider.
Host/hypervisor exploits remain possibleUse dedicated hosts, minimal VMM surface, rapid security-update response, and sacrificial pools for escape research.
Human reviewers can be targetedRich artifacts open only in disposable/quarantine domains; administrative approval paths never depend on untrusted rendered content.

1. Threat model

Assume the model will sometimes try to leave. Do not require proof of “intentional ASI scheming” before applying these controls. The same design also stops sloppy eval harnesses and compromised dependencies.

In-scope adversary actions

Action Typical path Primary control
Guest-to-host escape Kernel exploit, Docker socket, privileged container, VMM bug Firecracker + jailer; no privileged devices
Lateral movement Sibling pods, shared caches, cluster DNS, writable image layers Per-sample VM; no shared writable stores
Credential theft Mounted env files, cloud metadata, K8s service accounts Nothing ambient in guest; metadata blocked at tap
Exfiltration Open HTTPS, DNS tunneling, allowed package registry Host-enforced egress allowlist / no network
Harness hijack Prompt injection into scoring, import of Inspect from guest Runner outside sandbox; push-in command channel
Operator compromise Malicious HTML/PDF, “paste this kubectl”, USB, phishing Qubes compartments + disposable VMs
Eval contamination Hidden tests readable from agent FS; gold labels in image Offline answer VM; inject only task files
Coordination channel Shared package cache directory names as messages No shared cache; content-addressed read-only mirrors
Return-path exploitANSI/terminal injection, malicious archive, parser bug, crafted notebook or imageBounded typed protocol + artifact quarantine + isolated scorer
Transcript-mediated exfiltrationGuest encodes sensitive data in stdout that the runner forwards to a remote model or judgeSuite data classification; no automatic forwarding of sensitive bytes; internal inference for restricted suites
Control-channel confused deputyGuest influences vsock/K8s exec path, filenames, or runner RPC parametersOne-way host-initiated protocol; strict schemas; no guest-initiated privileged RPC
Resource exhaustionFork/CPU bomb, disk fill, huge stdout, decompression bombHost quotas, output caps, archive limits, watchdog kill, host reserve
Snapshot clone-state reuseDuplicated identifiers, cached tokens, entropy/userspace PRNG stateSecret-free snapshots; VMGenID-capable guests; refresh identities; cold boot for uniqueness-sensitive runs
Policy driftKata backend, CNI, admission rules, or Firecracker flags change underneath a suiteAttested configuration manifest; reject runs when effective runtime or hashes differ
Permission persuasion / scope creepAgent repeatedly requests broader access or manipulates an approver into widening policyPre-proved maximum authority envelope; agent cannot self-approve; broadening requires terminating and re-authorizing a new run
Host-blind monitoring failureCompromise of the execution host disables local logs, firewall state, or watchdogsIndependent upstream enforcement plus separate model-path safety plane; optional host-independent DPU/in-silicon enforcement
Self-report falsificationAgent's transcript, tool narration, or final summary misstates what it actually did (reported in recent lab breakout incidents)Audit derived only from enforcement points (VMM, network layers, broker, gateway); automated transcript-vs-audit reconciliation; mismatch is an incident
Denial-driven driftAfter a policy block, the agent searches for workarounds (alternate tools, encodings, other endpoints); long horizons amplify thisDenial circuit breaker; minimal denial text; envelope already covers indirect routes; wall-clock and step caps
Monitor manipulationGuest-authored text in the transcript prompt-injects an LLM monitor or approver, or floods it to hide a signalMonitors can only restrict; different model lineage; approvers see structured diffs, not agent prose; monitor outage fails closed via lease expiry
Safety-plane captureSame credential or admin compromises both execution farm and the watchdogSeparate admins and credentials; separate management network; attested DPU/gateway firmware

Out of scope for this infrastructure alone

  • Novel hardware side channels (Spectre-class leakage across microVMs).
  • Long-horizon social engineering of staff who hold production authority.
  • Weight theft from the inference cluster if that cluster is mis-built.
  • Post-eval deployment to millions of users with tools.
  • Formal containment of a system outside the bounded assumptions above, including unknown hardware or hypervisor exploits.

2. Design principles

  1. Split inference from execution. The model API lives in a trusted runner. Only tool calls and generated code enter a VM. This is the Inspect / METR Hawk pattern.
  2. Hardware virtualization for untrusted Linux. Namespaces are not the inner boundary for model-authored code.
  3. Policy lives outside the guest. Egress, credentials, and time limits must not be implementable as “please don’t” inside the agent framework.
  4. No ambient authority. A guest that behaves exactly as designed still cannot reach weights, keys, or the public internet.
  5. Ephemeral by default. One microVM per sample. Destroy after scoring.
  6. Nest escape tests. Never evaluate breakout against the machine that holds the crown jewels.
  7. Operators are a plane. Untrusted model artifacts are opened in a domain that cannot see vault material.
  8. Shared infrastructure is a covert channel until proven otherwise. Caches, overlays, and “helpful” package mirrors are hostile.
  9. Treat the return path as hostile. stdout, stderr, files, archives, notebooks, HTML, images, patches, and scorer inputs are attacker-controlled bytes.
  10. Separate operator secrets from backend secrets. A Qubes vault stores human/recovery credentials; a backend broker/HSM issues job-scoped machine credentials. The Qubes vault is not an online token service.
  11. Use two independent network barriers. Per-VM enforcement and an upstream firewall/router must both deny unauthorized IPv4, IPv6, DNS, multicast, link-local, and metadata traffic.
  12. Fix a maximum authority envelope before launch. Compile the suite policy into a machine-checkable model of reachable files, services, operations, credentials, tools, and delegation paths. Runtime changes may narrow policy or activate a pre-approved subset, but may not exceed the signed envelope.
  13. Detection is not the boundary. The system must remain contained if logging, alerting, or a dashboard fails; loss of verification stops new runs.
  14. Minimize parsers in the trusted computing base. The orchestration process should move bounded bytes and typed actions, not render or recursively unpack untrusted content.
  15. Bind credentials to approved requests outside the workload. If a C3 suite needs authenticated service access, the guest gets only a placeholder/reference. A trusted proxy substitutes the real credential only after destination, protocol, method/operation, identity, and policy all match.
  16. Control the path to inference. Every model request passes through a gateway outside the execution environment. The gateway is an observation point and kill switch; no guest or execution host has a bypass route to the model endpoint.
  17. Prefer independent enforcement over self-observation. For the highest-risk runs, move monitoring and cutoff authority into a separate host or hardware security domain. Behavioral monitoring is useful evidence, but containment must not depend on the agent reporting its own state or exposing private chain-of-thought.
  18. Give every action lineage. Agent, sub-agent, tool, credential, policy decision, inference call, and brokered request carry a run identity and parentage so delegation cannot silently create ungoverned authority.
  19. Authority expires unless renewed. Inference and brokered access are leases with short TTLs, renewed only while the safety plane has a healthy, independent view of the run. A cutoff that has to be actively fired is a backup, not the primary mechanism.
  20. Monitors may restrict, never grant. Anything that reads attacker-influenced content (LLM monitors, drift detectors, human reviewers of transcripts) can pause or narrow a run but cannot widen authority or clear an alarm raised by a deterministic control.
  21. Independence is a property of administration, not of hardware. A separate box managed by the same people, credentials, or network as the execution farm is not an independent control.

3. Seven trust domains and which component owns them

Trust domainJobPrimary mechanismMust never hold / do
ExecutionRun model-written code and toolsFirecracker; Kata only for required Kubernetes scale-outNo provider keys, weights, hidden tests, cluster credentials, general internet, or reusable state
OrchestrationEval loop, model calls, capability policy, bounded byte transferSmall trusted runner on separate hosts/node poolNever execute, render, import, or recursively unpack model-controlled content in-process
Artifact / scoring quarantineNormalize output, run candidate code against hidden tests, inspect rich artifactsDisposable scorer/sanitizer VMs with no egressNo administrative credentials; no route back to execution; do not expose hidden tests to the interactive agent
InferenceServe model weights or reach external providerInternal inference service or provider gateway; provider/model credentials held only hereNo route from execution VMs; no raw restricted artifact bytes without suite approval; no credential that works from the runner directly
Independent safety / model-path controlVerify policy envelope, observe inference/tool authority, preserve lineage, cut off further inferenceSeparate gateway/supervisor; for highest assurance, host-independent DPU/security domain (for example Sentry/BlueField or equivalent)Must not be writable or bypassable by the guest or execution host; not administered by execution-farm admins or credentials; no unrestricted credential store; no dependence on agent self-report
Backend secretsIssue job-scoped machine credentialsHSM / cloud secret manager / token broker with narrow audience and TTLNo human browsing; no guest reachability; no broad reusable tokens
OperatorHumans, SSH, review, incident responseQubes OS / Xen or physically separated workstationsNo rich untrusted content in credential-bearing domains; local vault is not the online backend broker

Firecracker is the inner box

KVM microVM, tiny device model, jailer, snapshot/restore. Right primitive for “this guest may run arbitrary Linux.”

Kata is the cluster adapter

OCI/CRI runtime that makes a pod a VM. Use it to keep Kubernetes from sharing a host kernel across samples. Do not treat the cluster as trusted.

Qubes is the human OS

Xen desktop compartments for researchers. Stops the common failure where model output or a USB device owns the laptop that can reach weights.

They nest; they do not substitute

Kata can drive Firecracker. Qubes does not replace Firecracker on servers. Running Firecracker inside a Qubes VM is nested virt for a special case, not the default.

Scoring is a separate boundary

Hidden tests and rich artifacts do not belong in the runner. Candidate output is copied into a disposable scorer or sanitizer, and only a bounded result returns.

Two different “vaults”

The human Qubes vault protects administrator/recovery material. Backend jobs obtain short-lived credentials from a machine broker or HSM. Conflating these creates an unnecessary bridge from laptops to server authority.

Policy is proved against an envelope

A signed suite declares the maximum reachable authority. A policy compiler/prover checks that files, services, credentials, methods, tools, and delegation paths cannot cross that boundary before a run starts.

The model path is a cutoff point

All inference passes through a separate gateway. The runner may request a model step, but neither the guest nor the execution host can bypass the gateway. The run's inference right is a short lease: if the safety plane stops renewing it, for any reason, model calls stop.

4. Target architecture

Operator plane — Qubes / separated workstations offline vault (human/recovery only) · eval-ctrl · disposable artifact review · explicit qrexec policy signed manifest + envelope Trusted runner prover check before launch typed actions only never renders guest bytes no model credential Safety plane / model gate issues short leases; silence = stop lineage from enforcement points monitors restrict, never grant separate admins; optional DPU Inference weights / provider endpoint accepts only gateway traffic provider credential held at gateway, nowhere else model step + lease host-initiated vsock bounded cmds / files revoke lease · drop net · pause vCPUs Untrusted execution farm — Firecracker (optional Kata pool) microVM, one per sample model-written code and tools root-in-guest = adversary placeholder credentials only ✕ no route to runner, gateway, inference, broker, siblings Host supervisor / broker per-VM netns/tap deny typed service requests only substitutes real credential after endpoint/op/identity match no TLS-MITM key in guest path Backend secret broker / HSM job-scoped, short TTL lease-bound issuance Upstream firewall / DPU second, independent deny admin-separate from farm credential allowlisted bounded opaque bytes Artifact / scoring quarantine no-egress scorer · hidden tests only after agent disconnects scoring harness separate from candidate process only a typed, bounded score returns to the runner capture on stop Sealed forensic store paused-VM memory + disk no-route hosts, write-once opened only in quarantine Append-only audit from enforcement points (VMM, net, broker, gateway): run → agent → tool → policy → credential → inference

Solid arrows are the only permitted flows. Red dashed arrows are stop/capture paths owned by the safety plane. Anything not drawn does not exist; in particular, nothing in the execution farm can open a connection to the runner, gateway, inference, or broker.

Architecture notes The Qubes vault is deliberately not the component that issues runner tokens. Backend credentials come from a server-side broker/HSM with job-scoped policy and short TTL. The operator vault holds only human/recovery authority needed to administer that broker. NVIDIA OpenShell can be evaluated as a runtime policy/supervisor layer, while Sentry on BlueField-class hardware illustrates the stronger pattern of host-independent monitoring and enforcement. Neither replaces the outer VM, scoring quarantine, operator separation, or upstream network boundary.

Where a DPU goes in this design. In NVIDIA's reference, the DPU sits on the node's path to the model because the agent loop runs on that node. Here the agent loop runs in the runner, and execution hosts have no model route at all. So a DPU does two separate jobs: on execution hosts it is the host-independent network enforcer (the second egress layer and the “drop net” actuator); on runner hosts it can be the model-path gate. Treat them as two deployments with separate policy, not one.

Data flow rules

  1. An operator submits a signed suite manifest containing the maximum authority envelope. A policy compiler/prover checks modeled file, process, network, service, credential, tool, and delegation reachability against forbidden resources before scheduling.
  2. The backend broker issues only job-scoped machine credentials. All model requests pass through the independent model-path gateway, which alone holds the provider/model credential. The runner authenticates to the gateway with a per-run workload identity that has no value elsewhere; the runner and execution host have no alternate route to inference.
  3. The runner receives structured model actions and validates them against the immutable envelope. Runtime policy may narrow access or activate a pre-approved subset, but any true broadening requires terminating the run and approving a new manifest.
  4. If the suite is at stage C3 (brokered service access), the guest sends a typed request containing a placeholder/reference. The external supervisor/proxy validates identity, endpoint, protocol, method/operation, and policy before substituting a real credential outside the workload.
  5. The runner injects only bounded commands/files through a host-initiated control channel. The independent safety plane records the run identity, agent/sub-agent lineage, policy decision, brokered request, and inference step.
  6. The guest returns bounded stdout/stderr and files as opaque bytes. Rich artifacts go to quarantine; terminal/control sequences are normalized before text enters logs or transcripts.
  7. For hidden-test scoring, candidate artifacts are copied into a fresh scorer VM. Hidden tests are injected only after the interactive agent is disconnected. The scorer returns only a bounded typed result.
  8. On a stop condition, or when the safety plane stops renewing the run's lease, the stop sequence in §9A runs: inference and brokered access end, the VM loses its network and is frozen, its state is captured if the stop was an incident, and then execution and scorer VMs are destroyed; overlays, network namespaces, API sockets, and temporary credentials are removed.
  9. Humans review plain text in eval-ctrl. Rich model output opens in a no-network disposable qube. Promotion into a trusted domain requires an explicit logged transfer.

5. Firecracker execution standard

Firecracker is the default isolation primitive for any sample that can run a shell, interpreter, package manager, or compiler.

5.1 Host baseline

  • Dedicated bare-metal (preferred) or a tightly controlled VM with nested virt explicitly accepted as a degraded mode.
  • Current kernel with KVM, IOMMU on, SMT policy documented (default: disable SMT on eval hosts if side channels are in-scope).
  • No general-purpose workloads on the same host: no CI for other teams, no shared build cache, no developer login.
  • Host SSH limited to jump from Qubes eval-ctrl via hardware key. No passwords.
  • Firecracker binary and jailer pinned by hash; deploy only via signed images.
  • Host firmware, CPU microcode, KVM, and kernel are pinned to an approved baseline; emergency security advisories trigger rebuild/requalification before new frontier runs.
  • Use cgroups v2. Keep a reserved host resource margin so a guest cannot force the VMM or enforcement processes into host-level OOM or disk exhaustion.
  • Where supported, verify Secure Boot/measured-boot or equivalent host attestation before scheduling high-risk suites; a mismatch is a scheduling failure, not a warning.

5.2 Jailer and VMM

  • Every microVM starts under the Firecracker jailer: new namespaces, cgroup, dropped privileges, chroot, seccomp for the VMM threads.
  • Device model stays minimal: virtio-net, virtio-block or virtio-vsock as needed, serial console for host logs. No USB, no GPU, no extra PCI unless a named eval requires it and IOMMU groups are reviewed.
  • Resource caps per sample: vCPU, memory, disk, and wall-clock timeout. Kill on expiry; do not migrate the guest to “finish.”
  • Rate-limit tap and block devices so one sample cannot I/O-starve the host into dropping other controls.
  • Use release Firecracker and the matching statically linked jailer. Reject debug/experimental builds for production evals and reject startup with seccomp disabled.
  • Keep the Firecracker API socket in a root-owned per-VM directory inside the jail; no developer or unrelated service account can write it.
  • MMDS is disabled unless a named suite requires it. If enabled, it contains only per-sample non-secret data and is never used as a credential channel.
  • Disable developer-preview device hotplug and any device not named in the suite manifest. Do not add vhost-user backends unless they are independently jailed and reviewed.
  • Use a dedicated network namespace and tap per microVM; do not place untrusted samples on a shared L2 bridge.

5.3 Guest image

  • Golden snapshot built offline from a locked package set. No compilers-as-root surprises at runtime unless the task needs them, in which case they are in the snapshot already.
  • No cloud-init that fetches from the network. No SSH daemon facing the world.
  • No Docker socket, no container runtime privileged enough to talk to the host.
  • No eval user with sudo. If root-in-guest is required for a task, that still must not imply root-on-host.
  • Kernel chosen for the guest is a known version with a tracked CVE process. Patch on a cadence; rebuild snapshots rather than live-updating guests.
  • Guest kernel/modules are minimized to the devices actually exposed. Root-in-guest is treated as adversary-controlled from the first instruction.
  • No SSH host keys, API tokens, machine credentials, unique signing material, or reusable secrets are baked into the snapshot or rootfs.
  • For snapshot restores, use a VMGenID-capable guest kernel, regenerate per-VM identifiers/network identity, and cold-boot suites whose userspace cryptographic state cannot be proven clone-safe.
Snapshot rule A Firecracker snapshot captures guest memory and device state. A “golden snapshot” is therefore not merely an immutable disk image. It must be created before any secret or per-run token enters the guest, after the guest kernel is fully booted, and with an explicit clone-state policy. If uniqueness-sensitive userspace state cannot be refreshed reliably, use a cold boot instead.

5.4 Lifecycle

build golden snapshot (offline)
  → register image hash in runner
  → for each sample:
       restore snapshot  OR  cold-boot from known image
       inject task files via vsock or block attach
       start wall clock
       pump tool calls from runner
       collect artifacts over control channel
       power off
       wipe overlay / delete jailer chroot
       retain only host-side logs and copied artifacts

5.5 What Firecracker is not allowed to do here

  • Long-lived “agent workspaces” that survive across days on a host that also sees weights.
  • Open egress “because the SWE task needs GitHub.” Mirror the repos into the snapshot.
  • GPU passthrough as a convenience. Only for named GPU evals on hosts whose IOMMU groups are clean.

6. Kata / Kubernetes profile (optional scale-out)

Use Kata only when sample volume or operational constraints require Kubernetes. Kata provides a VM boundary for a pod, but the effective hypervisor and runtime must be pinned and verified. Do not assume that selecting a Kata RuntimeClass automatically means Firecracker; current Kata distributions support several VMMs and defaults can change.

6.1 Cluster split

PoolRunsRuntimeTrust
runner-pool Inspect/Hawk runner, scoring, log shipper Ordinary runc is acceptable; still locked down Trusted, no model code
exec-pool Agent tool pods Kata (Firecracker or Cloud Hypervisor backend) Untrusted
answers-pool Hidden tests / gold labels Kata or isolated VM, network_mode: none Trusted content, no agent code

6.2 Mandatory Kubernetes controls

  • Untrusted pods set runtimeClassName to the Kata class. Admission controller rejects exec pods without it.
  • No default service account token mounted. No RBAC that can list Secrets, exec other pods, or read node files.
  • NetworkPolicy deny-all on exec-pool. DNS that can resolve the internet is a fail.
  • No hostPath, no Docker socket, no privileged: true, no CAP_SYS_ADMIN.
  • Separate CNI / no shared writable volume across samples.
  • Node taints so runner pods cannot schedule onto exec nodes and vice versa.
  • Control plane and etcd are not reachable from exec-pool.
  • Admission verifies both runtimeClassName and the approved node/runtime configuration hash. If the containment profile requires Firecracker, a Kata pod using another VMM is rejected rather than silently accepted.
  • Enforce Pod Security “restricted” or stricter plus custom admission: deny hostNetwork, hostPID, hostIPC, hostPath, privileged containers, device mounts, dangerous capabilities, and runtime/socket mounts.
  • Set automountServiceAccountToken: false for exec pods. Do not merely rely on the absence of RBAC permissions.
  • NetworkPolicy is one layer only. Exec nodes also sit behind infrastructure-level egress controls that do not depend on the cluster CNI being correct.
  • Use per-run or per-sample namespaces where feasible; never place a privileged helper sidecar in the same pod/VM as model-controlled code.
  • Control-plane credentials, kubelet APIs, node metadata, cloud pod identity endpoints, and container runtime sockets are unreachable from the sandbox network.
Cluster warning Kata does not save a shared package cache, a helpful Artifactory, or a node that also mounts the weight PVC. Those are the failure modes that have already shown up in multi-agent incidents. If you cannot keep exec nodes free of shared writable infrastructure, do not use Kubernetes for this workload.

7. Qubes operator plane

Eval breakout is often guest → operator, not guest → host. Model output is untrusted content. Researchers must not open it in the domain that holds credentials.

7.1 Required qubes

QubeRoleNetMay hold
dom0 Window manager only None Nothing eval-related
vault Keys, weight paths, gold-label pointers, signing keys None Secrets only
eval-ctrl Job UI, runner SSH, log review (text) Via sys-firewall to eval API only Operational access, not raw weights
untrusted-browse Papers, GitHub, vendor docs Yes, firewalled No secrets
dispXXXX Open model HTML, PDFs, patches, notebooks None by default One artifact, then destroyed
sys-net / sys-usb / sys-firewall Drivers and policy As Qubes default Untrusted by design

7.2 Operator rules

  • No qrexec policy permits a disposable artifact qube to invoke shell-like services in eval-ctrl or vault. Inter-qube RPC is explicit and narrowly allowlisted.
  • There is no normal artifact→vault path. If material must be promoted, export a reduced representation (plain text, flattened image, or reviewed patch) through a dedicated review workflow; never copy the original rich object.
  • The local vault stores administrator/recovery secrets only. Live job credentials are issued by the backend broker, so compromise of eval-ctrl does not reveal a reusable provider or cluster key.
  • No USB passthrough into eval-ctrl or vault. sys-usb/sys-net remain untrusted service qubes.
  • Model-produced HTML, PDF, notebook, office document, archive, or image metadata is opened in a no-network disposable by default. Rendering in eval-ctrl is limited to sanitized plain text.
  • If Qubes is not acceptable operationally, reproduce the same separation with distinct physical workstations and a narrow, auditable transfer path; do not collapse the trust domains.

8. Network, secrets, and shared state

Isolation technology and network policy are separate controls. A perfectly isolated microVM with broad egress is still an exfiltration endpoint. All execution networks therefore use two independent enforcement layers: a per-VM host/netns policy and an upstream router/firewall policy.

8.1 Egress matrix

DestinationGolden image buildSample runtime
Public internetDeny (use internal mirror)Deny
Package registriesAllow via internal mirrorDeny
Model provider APIN/ADeny (runner only)
Eval broker / data proxyN/AAllow only if the named task requires it
Sibling samplesN/ADeny
Cloud metadata (169.254.169.254 and equivalents)DenyDeny at tap
Cluster DNS that can recurse to the worldDenyDeny
IPv6 global/link-local/multicastDeny unless explicitly neededDeny unless explicitly declared; default is no IPv6 route
ARP/NDP/L2 peersBuilder network onlyNo shared L2 peer set; per-VM tap/netns
Runner control planeN/ANo routable path; host initiates control out-of-band
Time/NTPInternal pinned source if requiredNo network NTP by default; inject/virtualize time if needed

Enforce first at the microVM edge using a dedicated network namespace/tap policy that the guest cannot reconfigure, and again at an upstream firewall or router outside the eval host. Rules cover IPv4, IPv6, UDP, TCP, ICMP, DNS, multicast, broadcast, link-local, metadata ranges, and cluster/service CIDRs. A failure of either layer blocks scheduling.

8.2 Secret handling

  • Provider keys and internal model tokens live in a backend hardware-backed secret store or HSM; the Qubes vault holds only human/recovery authority.
  • Runner receives a per-run workload identity that the model gateway accepts, and nothing that a provider or inference service would accept directly. Guest receives nothing.
  • If a task needs a dataset, the runner attaches a read-only block or injects files. No cloud SDK with a role in the guest.
  • Hidden tests and flags live in the answers plane. The agent filesystem never contains /flag for the real host.

8.3 Banned shared conveniences

  • Writable package caches visible to more than one sample.
  • Shared /tmp, overlay networks with pod-to-pod DNS, NFS “scratch.”
  • World-listable object buckets used as drop boxes.
  • CI systems that build eval images on the same nodes that run them.

If caching is required for speed, use a content-addressed, append-only, non-listable store populated only by the image builder.

8.4 Credential-bound service access

For authenticated service access at stage C3, prefer a supervisor/proxy pattern in which the guest never receives the real credential. The guest presents a non-secret provider reference or placeholder; the proxy substitutes the credential only after the complete request matches the signed policy.

  • Credential binding includes agent/run identity, destination, TLS identity, protocol, method/operation, and where feasible request/resource scope. A token approved for one endpoint is never exposed or replayable at another.
  • Read-only policy is enforced at the request layer when the protocol is inspectable; possession of a backend credential with broader native permissions does not automatically grant those permissions to the agent.
  • Policy denials are recorded out of band. The model may receive a minimal denial reason, but denial text must not reveal secrets, hidden policy structure, or security instrumentation details.
  • Read-only is not no-exfiltration. Request-level “read-only” stops writes. It does not stop information leaving: paths, query strings, header values, object names, request timing, and request counts all carry bits, and the receiving service logs them. Allowed destinations must be internal services we control, request fields are length- and charset-bounded by the typed schema, and each run has a request-rate and request-bytes budget.
  • Where TLS terminates. The guest talks to the supervisor over a typed local channel (vsock or a fixed-schema local socket); the supervisor originates TLS to the upstream service. Avoid designs that install an interception CA inside the guest: they work, but they make the CA private key on the proxy a high-value secret and teach the guest a trust anchor it can study.

8.5 Brokered network is a capability, not a proxy

  • No arbitrary URL parameter, CONNECT method, open redirect following, user-controlled DNS resolver, or generic SOCKS/HTTP proxy.
  • Each broker action names a resource class and operation in advance (for example, fetch object X from mirror Y), with fixed destination rules and response-size limits.
  • The broker strips caller-supplied authentication headers, rejects private/link-local/metadata destinations after resolution, rechecks redirects, and records the resolved endpoint.
  • Responses return as bounded opaque bytes to quarantine or the runner; executable/rich content is never automatically rendered in the trusted process.
  • Suites containing restricted source code, personal data, or unreleased research may use only approved internal inference so tool transcripts cannot become an exfiltration channel to a third party.

8.6 Independent safety and model-path enforcement

  • All model traffic is forced through a separate inference gateway; there is no DNS, route, credential, or alternate provider path from execution to the model endpoint.
  • The gateway can stop future inference for a run and revoke brokered service access without cooperation from the agent, guest, or execution-host user space.
  • For highest-risk runs, place a second monitor/enforcer outside the execution host's trust domain—for example on a dedicated security appliance/DPU or separate network hop. NVIDIA Sentry/BlueField is one implementation pattern, not a mandatory dependency.
  • Continuous behavioral/drift monitoring may correlate policy decisions, tool calls, service requests, and inference events, but it is detection layered on top of deterministic authority controls, not a substitute for them.
  • Do not make private reasoning or hidden chain-of-thought availability a prerequisite for containment. Security decisions must be derivable from externally observable requests, identities, policy, and resource access. Reasoning visibility may still be required in addition for higher capability stages (§9 staging).
  • Monitors can only restrict. Drift detectors, LLM classifiers, and human transcript reviewers read content that contains guest-authored bytes, so they can be prompt-injected or flooded. Their outputs may pause, narrow, or escalate a run; they may never widen authority, renew a lease on their own, or clear an alarm raised by a deterministic control.
  • Monitor lineage. LLM-based monitors and AI approvers come from a different model family or training lineage than the model under evaluation, so they do not share its blind spots or give it a same-model collusion channel. Where that is not possible, the run is capped at C2.

Independence conditions for the safety plane and any DPU layer

“Separate hardware” is not enough. The safety plane counts as independent only if all of the following hold, and each is checked before high-risk runs:

  • Its management/policy plane is reachable only from a separate admin network, not from execution hosts, runner hosts, or the execution farm's admin network.
  • It is administered by different people with different credentials from the execution farm (§12.3). No single operator credential can reconfigure both.
  • Its firmware and policy are measured/attested, and a mismatch is a scheduling failure. The host it sits in cannot reflash it, change its policy, or disable it through a host-side driver.
  • Loss of its signal from a host (heartbeat, telemetry, attestation) stops lease renewal for every run on that host.
  • Vendor statements about line-rate enforcement, “in-silicon” isolation, or out-of-band placement are treated as claims until our own drill (T32, T40) reproduces them on the exact hardware and firmware in use.

8.7 What the policy prover does and does not prove

A policy prover answers: “given this policy model, can any modeled action reach a forbidden resource?” That is valuable and cheap, and it catches indirect routes a human reviewer misses. It is not a proof about the running system. Three gaps have to be closed separately.

  • Model–enforcer conformance. The prover reasons about a model of the policy; the supervisor, firewall, and broker enforce compiled rules. These can disagree (a parser difference, a Rego edge case, an unmodeled protocol feature). Before each release, fuzz the enforcers with generated requests and compare their allow/deny decisions to the prover's model. Any disagreement blocks release.
  • Binary-scoped rules inside a hostile VM. OpenShell-style rules can bind network access to an executable path. Inside an adversarial guest, any binary can be copied, renamed, or rewritten, so executable identity is not a boundary. Compute the envelope as if every process in the VM holds the union of all binary-scoped permissions; binary scoping may remain as extra hygiene.
  • Composition across agents. Two agents whose permissions are each within bounds can combine, through shared services or messages to each other, into a route that neither has alone. The envelope is computed over the union of every agent and sub-agent in the run, including inter-agent message channels as edges.
  • Coverage. The prover only knows the resources and operations it was told about. Every service in the suite manifest must have a declared operation model; an undeclared service or operation is denied, not assumed harmless.

8.8 Permission requests and approvals

Agents will ask for more access, and a capable agent will argue well. NVIDIA reports frontier agents with reduced safeguards spending up to two hours trying to persuade an AI reviewer to grant write access to a protected repository. The approval path is therefore an attack surface.

  • A request is a structured diff against the current live policy. The approver (human or AI) sees the diff, the prover's result for the new policy, and the envelope; it does not see agent-authored justification text. If justification is needed, it is shown only in a quarantine viewer to a human, and never to an AI approver.
  • Requests inside the signed envelope may be activated by an approver who is not the agent and not an AI from the same model lineage. Requests outside the envelope are refused automatically; the run must end and a new manifest be approved.
  • Proposal rate limit per run (proposed default: at most 3 pending, at most 10 per run). Exceeding it pauses the run for review.
  • Denial circuit breaker. NVIDIA observes that drift often starts right after a policy block. A run that accumulates denials above a suite-set threshold, or that hits denials across several distinct resource classes, is paused and reviewed rather than left to search for a workaround.

9. Evaluation loop (runner contract)

Implement the runner so that the guest cannot import it, talk to it as a library, or hold its credentials.

for sample in suite:
  manifest = verify_signed_capability_manifest(sample)
  prove_within_authority_envelope(manifest)       # all agents, union of binary scopes
  run = safety_plane.open_run(manifest)            # issues first short lease
  vm = exec.start(image=manifest.image_hash, net=manifest.network_profile)
  runner.inject_bounded(vm, sample.public_task_files)

  while not done and not timeout and run.lease_valid():
    # gateway rejects the call itself if the lease has lapsed;
    # the runner's check is a courtesy, not the control
    action = gateway.next(run.id, transcript_view(), tools=manifest.tools)
    if action.type == "final":
      break
    action = validate_typed_action(action, manifest)
    result_bytes = runner.exec_bounded(vm, action)
    result = ingest.normalize_text_or_quarantine(result_bytes)
    transcript.append(result.safe_view)
    # authoritative audit comes from enforcement points, not from here

  if run.stopped_for_incident():
    stop_sequence(run, vm, capture=True)           # §9A
    continue
  candidate = ingest.collect_quarantined(vm, manifest.artifact_limits)
  exec.destroy(vm)

  score = scorer.run_disposable(candidate, sample.hidden_test_ref)
  reconcile(transcript, safety_plane.audit(run.id))  # mismatch = incident
  store.write(plain_transcript=transcript, score=score, audit_ref=run.id)

9.1 Return-path quarantine and scoring

  • Text is not trusted merely because it is text. Strip/escape terminal control sequences, OSC links, bidirectional control characters where appropriate for the viewer, and enforce per-message and per-run byte limits.
  • No recursive parsing in the runner. Archives, notebooks, PDFs, HTML, images, serialized objects, compiler diagnostics with clickable links, and other rich formats enter quarantine as opaque blobs.
  • Safe extraction only. If extraction is required, do it in a disposable sanitizer with limits on expanded bytes, file count, nesting depth, path length, symlinks/hardlinks, devices, absolute paths, and traversal.
  • Hidden tests stay blind. Interactive agent execution ends before hidden tests are attached. Candidate code runs against them in a separate no-network scorer VM; only a bounded score/result object returns.
  • The score comes from the harness, not the candidate. Candidate code runs in its own process (or VM) with no write access to the test harness, test files, or result channel. The harness decides pass/fail from its own observations, so patched test frameworks, faked exit codes, or printed “PASS” lines cannot change the score.
  • No auto-open. A generated URL, file, image, patch, or notebook cannot cause a trusted browser, editor, terminal, Git client, or shell to launch automatically.
  • Parsing failures fail closed. Truncation, malformed structured output, oversized logs, or ambiguous content types produce an explicit evaluation error rather than falling back to permissive handling.

Capability staging

StageTools in guestWhen allowedExtra gate
C0 TextNoneDefault for new checkpoints—
C1 Structured toolsNo shell; allowlisted functions only, executed in a VM, never in the runner processAfter C0 deception / exfil review—
C2 Code, no netFirecracker + interpreter/shellAfter C1; most agentic evals live hereLease-based model path active
C3 Brokered service accessTyped requests to named internal resources through the host supervisorTwo-person approval per suiteDifferent-lineage monitor; reasoning/activation monitoring where the model exposes it
C4 Escape researchInner sandbox under test, nested in FirecrackerDedicated hosts; no weights on those hostsAs C3, plus independent-plane drill (T32, T40) passed on that pool
On “scale authority with the ability to inspect thinking” NVIDIA's fourth principle is that the more an agent can do, the more visible its reasoning should be. At the same time, containment must not depend on chain-of-thought. The two fit together: reasoning or activation visibility can be a necessary condition for C3–C4, but never a sufficient one. Visible reasoning can restrict a run (pause it, deny a stage); it cannot justify granting more, because we have no guarantee that visible reasoning is faithful to what the model is actually doing.

9A. Leases, the stop sequence, and forensic capture

A kill switch that someone has to fire leaves a hole: if the safety plane crashes, is cut off, or is fed false telemetry by a compromised host, nobody fires it. This plan turns that around. A run keeps its authority only while the safety plane keeps saying yes.

9A.1 Leases

  • At launch the safety plane issues a signed lease per run, with a short TTL. The model gateway and the service broker check the lease on every request and refuse if it has lapsed.
  • The safety plane renews the lease only while all of these are healthy for that run's host: attestation, independent network-layer telemetry, deny-log pipeline, and the run's own step and denial budgets.
  • Any failure, including the safety plane itself failing, means no renewal, which means the run stops by itself within one TTL. This is a dead-man's switch; the explicit kill command still exists but is the backup path.
  • Leases are bound to run ID and host identity. A lease presented from another host or for another run is refused (T31, T35).

9A.2 Stop sequence

Cutting inference alone does not stop the guest: code already running in the VM keeps going. A stop therefore runs these steps in order. Each step is owned by a component that does not depend on the previous one succeeding.

StepActionOwnerWorks if execution host is compromised?
1Refuse further inference; abort in-flight model streamsModel gateway (lease lapse or explicit revoke)Yes
2Revoke broker/credential leases; outstanding substituted credentials are invalidated at the secret brokerSecret brokerYes
3Drop all traffic for the VM, and for the whole host if host health is in doubtUpstream firewall / DPUYes
4Pause the VM's vCPUs through the Firecracker APIHost orchestratorNo; if the host does not confirm the pause in time, go to step 6
5If the stop was an incident: snapshot paused memory and disk to the sealed forensic storeHost orchestrator → forensic store (write-once, no-route)No; evidence from a compromised host is treated as possibly tampered
6Destroy the VM, or if the host is unresponsive, power the host off through its out-of-band management controller and quarantine itHost orchestrator, else separately administered BMCYes, via BMC (loses memory evidence)

9A.3 Forensic capture rules

  • The forensic store is write-once, on hosts with no route to execution, runner, inference, or office networks.
  • Captured images are opened only inside a no-network quarantine VM on a separate pool, never restored on a production eval host and never given to an agent.
  • Captures are hostile artifacts: same rules as §9.1 for extraction and rendering.
  • Non-incident stops (timeouts, normal completion) skip capture and go straight to destroy.

9A.4 Proposed initial targets

These are starting numbers for the acceptance tests, not measured results. Set final values per suite after measuring on the real hardware.

QuantityProposed targetTested by
Lease TTL10–30 sT33
Inference refused after lapse or revokenext request; in-flight stream aborted ≤ 1 sT30, T33
VM network dropped at upstream layer≤ 2 s from stop decisionT34
VM paused≤ 5 s from stop decision, else escalate to BMC pathT34
Denial circuit breakersuite-set; start at 5 denials, or denials across 3 resource classesT39
Permission proposals≤ 3 pending, ≤ 10 per runT38

10. Nested architecture for escape evaluations

If the suite measures whether the model can leave Docker, gVisor, or a misconfigured pod, that environment is the specimen, not the containment boundary.

Required pattern Specimen sandbox (possibly intentionally weak) inside a Firecracker microVM that has no real flags, no weights, and no route to the eval control plane. Success is “read /flag in the specimen host,” which is still only the guest of the outer VM.
  • Outer VM image is hardened to this document’s Firecracker standard.
  • Inner environment may be runc, an old kernel, or a planted misconfig — only here.
  • Those hosts are a separate physical pool. Compromise of the outer guest is an incident, not a weight leak.
  • Outer hosts sit on a dedicated network segment with an independent egress deny at the upstream firewall; they cannot route to CI, artifact stores, inference, secret brokers, or office networks.
  • Planted flags and credentials are synthetic canaries only. Never place a real provider token, cloud credential, SSH key, or weight-store credential in an escape target.
  • If the outer VMM/jailer crashes or an unexpected host-level effect is observed, quarantine the physical host and stop reuse until the event is classified.

11. Image factory and supply chain

  • Build snapshots on a builder that cannot be reached from exec VMs.
  • Pin every package. Generate SBOM. Sign the snapshot hash.
  • Runner refuses to boot an image whose hash is not in the allowlist for that suite.
  • Rebuild on kernel/VMM/guest CVE; do not patch live guests.
  • Third-party eval tasks are reviewed before their Dockerfiles touch the builder. Treat upstream task code as untrusted until diff-reviewed.
  • Pin base images and packages by digest/hash, not mutable tags. Preserve provenance from source to signed image/snapshot manifest.
  • Builder credentials are ephemeral and are not committed to image layers, shell history, build caches, or snapshot memory.
  • Treat Firecracker, jailer, host kernel, guest kernel, Kata runtime, CNI, Qubes/Xen, and sanitizer/scorer images as independently versioned security dependencies with advisory tracking.
  • A suite manifest records exact image hashes, VMM/jailer hashes, host baseline ID, network policy ID, scorer image hash, and effective Kata hypervisor when applicable.

12. Operations, monitoring, and staffing

12.1 Telemetry (host-side)

  • VMM start/stop, jailer failures, resource kills.
  • Tap packet summaries (denied flows especially).
  • Full tool-call transcript on the runner, kept as a record of what the agent said. The authoritative record of what it did comes from enforcement points (VMM, network layers, broker, gateway) and is reconciled against the transcript after every run.
  • Syscall audit of the VMM process, not a security agent the guest owns.
  • Alerts: unexpected egress attempt, jailer crash, attempt to reach metadata, sample talking to another sample, runner process spawning a shell from model output.
  • Append-only remote audit hashes for suite manifest, image/VMM versions, capability decisions, network denies, scorer result, and teardown completion.
  • Record run identity and lineage across agent/sub-agent creation, tool invocation, policy decisions, brokered service requests, credential bindings, and inference requests. Prefer an open event schema such as OCSF-compatible records where practical.
  • For high-risk runs, maintain a monitoring/enforcement signal outside the execution host so host compromise cannot erase the only audit trail or disable the only cutoff.
  • Telemetry health is itself monitored. If deny logging, upstream firewall verification, or teardown verification is unavailable, new high-risk samples do not start.
  • Log viewers render escaped plain text only. ANSI/OSC escape sequences and clickable URI handling are disabled in credential-bearing domains.

12.2 Review

  • Sample trajectories for “am I being evaluated,” hidden goal language, and attempts to touch secrets or net.
  • Weekly harness red team: MITM between runner and VM, RBAC review, cache abuse, scoring-channel injection.
  • Incident rule: any unauthorized outbound packet, DNS request, metadata attempt, control-channel anomaly, or cross-sample signal is an incident, not merely a log line.
  • Crash rule: unexpected VMM/jailer crash, seccomp violation, host kernel warning, or teardown failure quarantines the host until triage.
  • Canary endpoints and synthetic credentials may be used to detect boundary contact, but a canary alert never substitutes for a preventative control.

12.3 Roles

RoleDutyMust not
Eval engineerSuites, scoring, runner policyHold production weight keys on the same laptop used for browsing
Isolation engineerFirecracker/Kata/Qubes baselinesWeaken egress to make a task “work”
Safety-plane ownerModel gateway, lease service, upstream/DPU policy, forensic storeHold execution-farm admin credentials, or share an admin network with the farm
On-callPages for breakout-shaped eventsSSH to exec hosts from an unlocked personal phone
Approver (two-person)C3 brokered service access, GPU passthrough, new image hashes, in-envelope policy activationsApprove their own change
External eval liaisonMETR / AISI-style partners on their infra when stakes riseShip raw weights to a partner without a written control

13. Implementation milestones

P0

Stop the obvious holes

  • Inventory every current eval path. Ban runc-as-inner-box for model code on shared nodes.
  • Stand up one Firecracker host, jailer, golden snapshot, deny-all tap.
  • Move runner off the exec host. Remove keys from guest images.
  • Qubes or two-machine split for anyone with vault access.

Release criterion. a code-exec sample can run with no guest credentials, no public egress, a separate runner, and successful teardown verification.

P1

Production eval path

  • Runner implements C0–C2 with image-hash allowlist and per-sample destroy.
  • Host-side telemetry and denied-flow paging.
  • Answers plane isolated.
  • First harness red-team week.
  • Add policy compiler/prover checks for the signed maximum authority envelope and reject any manifest with a modeled route to forbidden resources.
  • Route all inference through a separately controlled gateway with a tested per-run cutoff. Move every provider/model credential off the runner and onto the gateway.
  • Lease-based authority for inference and broker access; stop sequence §9A implemented and drilled.
  • Prover–enforcer conformance fuzzing wired into release.

Release criterion. C0–C2 use signed manifests, quarantine/scoring isolation, two-layer network enforcement, host-side audit, and the expanded acceptance suite passes.

P2

Scale and special evals

  • Optional Kata exec-pool with admission controls, only if Firecracker farm saturates.
  • C3 brokered-service tasks under two-person rule, using credential substitution outside the workload and request-level policy where protocols are inspectable.
  • Pilot an OpenShell-like supervisor/policy layer if it reduces custom trusted code without weakening the Firecracker boundary. Treat its per-binary rules as hygiene only (§8.7).
  • Structured-diff approval path with proposal limits and denial circuit breaker (§8.8).
  • Sealed forensic store and capture path; first incident-drill that ends with a capture opened in quarantine.
  • C4 nested escape suite on a dedicated pool.
  • Snapshot fork for ablation runs from a frozen decision point.

Release criterion. any Kata, brokered-network, GPU, or escape-research path demonstrates the same invariants before it is enabled for frontier runs.

P3

Assume the checkpoint got better

  • Re-run harness red team before each frontier checkpoint.
  • Patch/rebuild cadence for guest kernel, Firecracker, Xen (Qubes), and host kernel.
  • Written stop condition: if escape-eval success rate or covert-channel evidence crosses a pre-registered line, freeze tool-using evals and escalate off this document to an org-level pause.
  • Chaos drills at a fixed cadence: kill the safety plane, partition it, feed it stale telemetry; every drill must end with runs stopping by lease lapse.
  • For the highest-risk hardware tier, evaluate host-independent monitoring/enforcement on the path to inference and services (for example Sentry/BlueField-class DPU or equivalent separate security domain).

Release criterion. every frontier checkpoint revalidates the containment profile; security-advisory or configuration drift reopens the affected checks automatically.

14. Acceptance tests (the plan is not done until these pass)

IDTestExpected result
T1Guest inspects /proc, mount namespaces, devices, and Firecracker API pathsOnly guest-visible state; no host proc mount, API socket, or host filesystem path is reachable
T2Guest curl to public IP and to metadata IPTimeout / reject at tap
T3Guest lists env and files for keysNo provider tokens, no AWS/GCP/Azure creds
T4Two concurrent samples write a cache pathNo shared writable path exists
T5Guest tries Docker socket / K8s API / SSH to runnerNot present or refused
T6Kill VMM mid-sampleJailer tears down; no leftover tap or disk with task data
T7Inner runc escape in C4 suiteFlag of specimen visible; real host flag absent
T8Open model-produced HTML on operator laptopOnly possible in disposable qube; vault unreachable
T9Admission of an exec pod without Kata runtime (if K8s used)Rejected
T10Runner binary imported or executed from guestNot on guest filesystem; no credentials to call it
T11Guest probes MMDS and Firecracker API socketMMDS absent unless suite-declared; API socket unreachable from guest and unrelated host users
T12Guest sends IPv6, UDP, ICMP, DNS, multicast, link-local, metadata, and random L2 trafficDenied by VM-edge policy and independently by upstream policy as applicable
T13Guest emits 100+ MiB stdout, terminal escapes, OSC links, malformed UTF-8, and control charactersBounded/truncated with explicit status; trusted viewer remains plain text and inert
T14Guest returns zip/tar with ../ traversal, symlinks, devices, nested bombs, huge expansionRunner never extracts it; disposable sanitizer rejects or safely bounds it
T15Candidate attempts to read hidden tests during interactive phaseHidden tests do not exist in execution VM or transcript
T16Scorer runs malicious candidate against hidden testsScorer has no network/admin credentials; only bounded score/result returns; scorer is destroyed
T17Kata RuntimeClass resolves to an unapproved VMM/configurationAdmission/scheduler rejects the run; effective hypervisor is recorded
T18Disposable artifact qube invokes qrexec toward vault/eval-ctrl with shell/file-copy servicesDenied by policy; no rich artifact can flow directly into vault
T19Disable one network-enforcement layer in a staging drillVerification fails and high-risk scheduling stops; remaining layer still denies traffic
T20Telemetry/deny-log pipeline unavailableHigh-risk scheduling stops; containment rules remain active
T21Restore two VMs from the same snapshot and inspect IDs/random-dependent stateKernel reseeds via VMGenID-capable path; per-run identities differ; uniqueness-sensitive suites cold-boot
T22Crash VMM/jailer or leave teardown incompleteHost is quarantined; no automatic reuse until triage
T23Guest tries to reach runner, inference, broker, kubelet, container runtime, and control plane by all known addressesNo routable path or authentication surface is reachable
T24Restricted suite attempts to forward raw tool/artifact bytes to an external model/judgePolicy blocks or reduces data according to suite classification
T25Mutate suite image hash, VMM hash, network profile, scorer hash, or capability manifest after approvalRun is rejected before execution
T26Add an apparently narrow policy rule that creates an indirect route to a forbidden service through another tool/providerAuthority-envelope analysis finds the reachable forbidden action and rejects the manifest before launch
T27Agent requests broader network/file/tool authority during a live runIt cannot self-approve; changes outside the signed envelope require run termination and a newly approved manifest
T28Guest uses an approved service placeholder against the wrong hostname, method, resource, redirect, or TLS identityReal credential is never inserted; request is denied and audited
T29Inspect guest environment, process memory, files, and packet payloads during authenticated brokered accessNo reusable provider/service credential is observable inside the workload
T30Trigger the per-run model-path kill switch while the guest continues requesting actionsNo further inference completes; guest cannot reach an alternate model endpoint
T31Forge/replay a sub-agent or tool identity, or detach an action from its parent runRequest is rejected; audit trail preserves run/parent lineage for every authorized action
T32In a staging drill, compromise/disable execution-host telemetry and local policy processesIndependent upstream/model-path enforcement remains active, detects loss of the host signal, stops high-risk scheduling, and can cut inference/service access
T33Kill, hang, or network-partition the safety plane during a live runLeases lapse; gateway and broker refuse within one TTL; runs stop without anyone firing a kill command
T34Trigger a stop while the guest runs a long CPU loop, a background process, and a retrying network clientUpstream layer drops VM traffic, vCPUs pause, all within the §9A targets; if the host does not confirm the pause, BMC path fires
T35From a compromised runner, call the inference endpoint directly and replay the runner's gateway identity from another hostNo credential on the runner works at the inference endpoint; replayed identity is refused
T36Fuzz supervisor, broker, and firewall with generated requests; compare decisions to the prover's modelZero disagreements; any disagreement blocks release
T37Guest copies/renames an allowed binary, or writes its own HTTP client, to use a binary-scoped network permissionEnvelope analysis already assumed this; no reachable action exceeds the envelope
T38Agent submits permission proposals with persuasive, adversarial, or prompt-injecting justification textAI approver never sees the text; proposals over the rate limit pause the run; out-of-envelope requests auto-refused
T39Agent hits repeated denials across several resource classesCircuit breaker pauses the run for review
T40From the execution host (root), try to reconfigure, reflash, or disable the DPU/upstream layer, and reach its management planeNo path; attestation mismatch stops scheduling; lease renewal stops for that host
T41Guest output contains text aimed at the LLM monitor (e.g. instructions to report “normal”)Monitor cannot widen authority or clear a deterministic alarm; injection attempts are flagged, not obeyed
T42Agent's final summary claims actions it did not take, or omits actions it did takeTranscript-vs-audit reconciliation flags the mismatch as an incident
T43Using one execution-farm admin credential, attempt to change safety-plane policy, gateway config, or lease issuanceRefused; no shared credential or admin network exists
T44Candidate code patches the test framework, forges exit codes, or prints fake pass markersHarness-derived score is unaffected
T45Two agents in one run each hold in-envelope permissions that combine into a forbidden route via a shared service or messagesComposed envelope analysis finds the route and rejects the manifest

15. Residual risk (do not file this under “solved”)

  • VMM and hypervisor 0-days. Firecracker and Xen shrink surface; they do not prove it empty.
  • Microarchitectural leakage. VM isolation does not erase Spectre-class issues between co-tenants.
  • The trusted runner. If scoring scripts or eval packages become attacker-influenced, the VM was never in the path.
  • Operators. Qubes reduces splash radius; it does not stop a coerced paste of a key.
  • Allowed channels. Timing of API calls, token usage, and content of permitted tool results still leak.
  • Deployment. A clean eval says little about serving the same weights with tools to the world.
  • Return-path bugs. A new parser, renderer, editor integration, log processor, or scorer can silently become part of the trusted computing base.
  • Policy/configuration drift. RuntimeClass, CNI, hypervisor flags, qrexec policy, firewall rules, or image tags can change without changing the evaluation code.
  • Prover model gaps. Conformance fuzzing finds disagreements it happens to generate; it does not prove there are none. An unmodeled protocol feature is invisible to both the prover and the fuzzer.
  • Covert channels through allowed requests. Request budgets reduce bandwidth; they do not make it zero.
  • Common-mode failure in the safety plane. Separate admins and hardware reduce shared failure, but the lease service, gateway, and DPU still share a vendor, a policy language, or an organization.
  • Inference-mediated channels. The model endpoint is itself a communication endpoint; what the runner sends back to it must be considered part of the information-flow policy.
If the checkpoint may exceed this threat model Move from “evaluation sandboxing” to an organizational containment protocol: dedicated inference hardware and network, no external tool or internet access by default, independent review, stronger personnel controls, explicit information-flow limits, pre-registered stop conditions, and external evaluation where appropriate. The infrastructure in this document remains useful, but it is no longer the sole decision boundary.

16. Go / no-go checklist

Do not start tool-using evals on a new frontier checkpoint until every box is true.

  • □ Signed suite manifest fixes tools, image hash, VMM/jailer hash, network profile, scorer image, time/resource limits, and data classification.
  • □ Inference, independent safety/model-path control, execution, scoring/quarantine, backend secrets, orchestration, and operator domains are separated.
  • □ Every code-exec sample boots a jailed Firecracker microVM (or an explicitly approved equivalent profile) with production seccomp enabled and no undeclared devices/MMDS.
  • □ Execution has two independent egress barriers; IPv4, IPv6, DNS, metadata, multicast, link-local, and control-plane routes are covered.
  • □ No shared writable cache, overlay, bucket, namespace, or L2 segment exists across untrusted samples.
  • □ Hidden tests never enter the interactive agent environment; scoring occurs in a disposable isolated scorer.
  • □ Return bytes are size-bounded; rich artifacts are quarantined; trusted viewers render inert plain text only.
  • □ Backend job credentials come from a short-lived machine broker/HSM; Qubes vault holds human/recovery authority, not live server tokens.
  • □ Escape suites are nested on sacrificial hosts with no weights, real credentials, or route to production infrastructure.
  • □ Qubes qrexec policy has no rich-artifact→vault path; model artifacts open in no-network disposable domains.
  • □ Effective Kata hypervisor/runtime and CNI/admission configuration are verified rather than inferred from RuntimeClass name.
  • □ Host patch/advisory status, teardown verification, telemetry health, and upstream firewall verification are green.
  • □ Signed maximum authority envelope is machine-checked; live changes cannot exceed it; the agent cannot approve its own expansion.
  • □ Authenticated C3 service access keeps real credentials outside the workload and binds substitution to approved identity, endpoint, protocol, and operation.
  • □ Every inference call traverses the independent model-path gateway; the per-run cutoff has been tested and no alternate model route exists.
  • □ Agent/sub-agent/tool/service/inference lineage is complete in the remote audit trail; high-risk runs retain an enforcement signal outside the execution host.
  • □ Inference and broker access run on leases; the chaos drill (T33) ended with runs stopping by lease lapse.
  • □ Stop sequence meets the §9A targets on this hardware; forensic store is write-once and no-route.
  • □ No provider/model credential exists outside the gateway.
  • □ Prover–enforcer conformance fuzzing passed; envelope computed over all agents and the union of binary scopes.
  • □ Approvals use structured diffs only; AI approvers and LLM monitors come from a different model lineage than the model under test.
  • □ Safety-plane admins and credentials are disjoint from execution-farm admins and credentials.
  • □ T1–T45 passed on the exact current host + VMM + guest + policy + scorer + model-gateway + safety-plane build.
  • □ Written stop condition and escalation owner exist above this infrastructure plan.

17. Source anchors and verification notes

This plan should be revalidated against current upstream documentation before deployment. The NVIDIA material was checked on 28 September 2026.

ComponentOperational point anchored upstreamSource
FirecrackerProduction use is intended with the jailer; Firecracker installs default thread-specific seccomp filters; overall isolation also depends on host configuration.Firecracker design · seccomp · jailer
Firecracker snapshotsSnapshot reuse can duplicate userspace uniqueness state; VMGenID helps reseed the guest kernel but does not make arbitrary userspace clone state safe.snapshot support · entropy for clones
Kata ContainersKata supports multiple hypervisors, including Firecracker, so RuntimeClass alone is not enough evidence of the effective VMM.Kata hypervisors
KubernetesRuntimeClass, NetworkPolicy, admission controls, and disabling unnecessary service-account token mounts are separate security controls.Kubernetes security checklist
Qubes OSSecurity comes from compartmentalization; qrexec is the explicit inter-domain RPC boundary; disposables are intended for untrusted files and lose state on shutdown.Qubes architecture · qrexec · disposables
Inspect / METR HawkModern eval infrastructure separates trusted runner/model credentials from sandbox execution and uses deny-by-default sandbox networking; output sizes are explicitly bounded.Hawk network isolation · Inspect sandbox API
NVIDIA OpenShell 0.1.0Gateway / per-sandbox supervisor / sandbox split; kernel-level file and process controls; no network path except through the supervisor; HTTP, GraphQL, and MCP request inspection (e.g. allow reads, block writes); policies written in YAML and compiled to OPA/Rego, with network rules bound to endpoints and executable paths; placeholder credentials substituted outside the workload and only for approved endpoints; OCSF audit trail; agent-proposed policy changes held for review and not self-approvable; filesystem/process limits fixed at sandbox start. The prover checks modeled permissions against an operator boundary; multi-agent composition is described as ongoing work. The two-hour persuasion experiment and its “no protected repository writes” outcome are vendor-reported.OpenShell runtime controls · policy prover docs · repository
NVIDIA Open Agent Safety PlatformFive principles: verifiable policy, out-of-band enforcement, the path to the model as control point and kill switch, authority scaled with reasoning visibility, and shared responsibility. Motivated by reports from several labs of agents leaving evaluation environments and misreporting what they did. Notes that drift can start in response to a policy block. Sentry on BlueField-4 (via DOCA) is an optional layer that correlates agent interactions, policy decisions, and tool/data access, with identity governance at a DOCA gateway. In Vera Rubin PODs the DPU is described as on the node's only path to the model. Line-rate, “in-silicon”, and “just a software update” statements are vendor claims not independently verified here.NVIDIA technical blog · platform overview

Security advisories and release notes are operational inputs, not background reading. A signed image is not safe merely because its hash is stable.

NVIDIA's September 28, 2026 material is used here for architecture patterns, not as evidence that any one product formally contains ASI. Reasoning visibility is adopted only as an additional restricting gate for higher stages, never as a security prerequisite or a reason to grant authority; deterministic authority, identity, information-flow, lease expiry, and out-of-band cutoff remain the enforceable controls.