Issue Nº 01 — October 15, 2026

@readmodelmag
MODEL

Follow MODEL on X @readmodelmag

Tools

Before you widen your AI agent's sandbox, prove the new policy stays inside your boundary

SummaryNVIDIA's OpenShell, on Hacker News' front page today after its GTC Berlin push, ships a standalone policy prover. It checks whether an agent's sandbox policy grants anything your boundary doesn't, with no gateway or Docker needed. We ran 14 checks on it. None of the widenings we planted got a pass, and it taught us one rule: only exit code 0 is a pass.

· MODEL Editors · 3 min read

Some links may be affiliate links. Disclosure

MODEL builder tip card titled Prove the subagent's policy before you sign it. Subhead: NVIDIA OpenShell's prover checks a policy against your boundary; no gateway, no Docker, milliseconds. Left panel, our test with openshell-prover 0.1.5 on Linux, command openshell-prover check candidate.yaml --boundary boundary.yaml. Results: GitHub read-only to read-write, exceeds, POST; add curl next to gh, exceeds; new host pastebin.com, exceeds; Landlock hard to best effort, exceeds; GET /repos/** only, within, exit 0; write /sandbox/out when the boundary allows /sandbox, unsupported, exit 3; endpoint in audit mode or MCP rule, unsupported; plus DELETE /repos/*/*/git/refs/**, inconclusive, timed out at 90 seconds. 14 candidates: 3 within, 5 exceeds, 5 unsupported, 1 inconclusive; no widening we planted got a pass. Right panel, the rule: only exit 0 is a pass; exit 1 exceeds and shows one example; exit 3 unsupported or inconclusive, treat as a fail. Watch out: one field the prover doesn't model, allow_encoded_slash from the docs' npm example, turned all 13 checks into unsupported; paths must match exactly. Footer: the catch, it reads policy files, not what a running sandbox enforces; a pass means no wider, not safe.
Our own test output from October 22, 2026, trimmed. Illustration by MODEL. Original. Image source.

Coding agents increasingly spin up other agents, and someone has to decide what each one may touch. NVIDIA's OpenShell (opens in a new tab) (Apache-2.0, about 17,800 GitHub stars) runs agents in sandboxes governed by a YAML policy: which files, which user, which hosts, which HTTP methods. NVIDIA pushed it at GTC Berlin on October 21, and it hit Hacker News' front page today. The part worth stealing for your own setup, even before you adopt the whole runtime, is its policy prover.

What it does. openshell-prover check candidate.yaml --boundary boundary.yaml asks one question: does the candidate policy allow anything the boundary doesn't? NVIDIA's docs describe the use case directly: a parent agent checking that a policy it writes for a subagent stays within its own maximum. It uses an SMT solver, reads local files, and needs no gateway, Docker or account. The docs say it covers filesystem access, process identity, Landlock settings, network connections and REST requests.

We ran it. We downloaded the standalone openshell-prover 0.1.5 binary for Linux from the v0.1.5 release (its SHA-256 matched the published checksum file) and first ran the docs' own example. It matched exactly: adding write access to /tmp returned exceeds_boundary with the counterexample filesystem write /tmp.

Then we wrote a realistic boundary: read /usr and /etc, write only /sandbox, Landlock as a hard requirement, a fixed non-root user, gh allowed read-only on api.github.com and node read-only on the npm registry. We tested 14 candidate policies against it:

  • Caught (exit 1, with an example): switching GitHub from read-only to read-write (counterexample: POST /), adding /usr/bin/curl next to gh, a new rule letting curl reach pastebin.com, downgrading Landlock to best_effort, and a rule adding DELETE /repos/**.
  • Passed (exit 0): dropping the npm rule, an identical copy, and narrowing GitHub to GET /repos/** only.
  • Unsupported (exit 3): writing to /tmp or /sandbox/out when the boundary allows /sandbox (the prover won't assume a subfolder is safe, because symlinks in the image could point elsewhere), putting the endpoint in audit mode, adding an MCP endpoint, and changing the user ID from 1500 to 1600.
  • Inconclusive (exit 3): adding DELETE /repos/*/*/git/refs/**. It hit the default 10-second limit, and still timed out with --timeout 90s. The broader DELETE /repos/** was caught in 0.44 seconds.

Most checks finished in 2 to 32 milliseconds (median of five runs each).

The trap we hit first. Our first boundary copied the npm example from OpenShell's schema docs, which sets allow_encoded_slash: true. With it, all 13 candidates we had then came back unsupported: "boundary policy rule 'npm' uses authority outside the initial model." One field the prover doesn't model blocked every check, including candidates that only narrowed access. Removing that one line fixed it. If you rely on the prover, keep your boundary to features it models.

The rule. The docs say it plainly: "Only within_boundary means that the check passed. Treat every other result as a failure." In a script, use --output json and read result and reason_code, and check that coverage.domains lists every part of the policy you rely on. Exit codes: 0 within, 1 exceeds, 2 error, 3 unsupported or inconclusive. In our run, nothing we widened ever got a 0.

Our take

If you hand policies to agents, or let agents write them for each other, put this check in front of every change: it's a 33 MB binary and a one-line command. Write the boundary first, keep candidate paths and binaries identical to the boundary's, and fail anything that isn't exit 0. Know its limits too. It reads policy files, not what a running sandbox actually enforces, and NVIDIA's docs say a pass does not mean the policy is "as narrow as it could be" or "safe for a particular task." It means no wider than your boundary.

What we did and didn't do: we ran the standalone prover only, on a Linux box on October 22, 2026; scripts and outputs are in our test notes. We didn't run the OpenShell gateway, a sandbox, its kernel enforcement, or the policy advisor's separate risk check, and didn't test macOS or Windows. Facts come from NVIDIA's OpenShell docs, GitHub repo and v0.1.5 release, read today. Not sponsored; no affiliate links.

MODEL Editors

Sources

  1. Policy Prover (OpenShell docs, v0.1.5)

    NVIDIA

  2. Policy Schema Reference (OpenShell docs, v0.1.5)

    NVIDIA

  3. Installation (OpenShell docs)

    NVIDIA

  4. NVIDIA/OpenShell (README, Apache-2.0)

    GitHub

  5. OpenShell v0.1.5 release and checksums (Oct 20, 2026)

    GitHub

  6. OpenShell – A safe, private runtime for fleets of autonomous AI agents (Hacker News)

    Hacker News

FREE · EVERY WEEK

The top AI tools this week, tested.

Every week MODEL's editors pick the AI tools worth your time, try them hands-on, and tell you what's good, what's not, and who it's for. Free, in your inbox.

Free. Unsubscribe anytime. Our picks are editorial and can't be bought.

The weekly three is editorial. A subscription does not buy a place in it.

  • MODEL card titled Canva Craft: an image model that plans the layout before it paints. A simple diagram shows a wireframe poster labelled 1. Plan, an arrow, and a finished poster labelled 2. Render. What it is: Canva's first in-house image model, built for posters, social posts, slides and other design work. Where: Dream Lab in Canva, for all users; public API now (preview, uses AI credits); MCP coming soon. Output: up to 2K, 30+ aspect ratios, text in 55 languages (Canva's figures). The catch: number 4 model on one crowdsourced arena, behind three OpenAI models; API jobs take about 50 to 60 seconds.

    Tools

    Canva Craft is Canva's own image model, and it plans the layout before it renders

    Canva launched Craft on October 22, its first image model trained in-house. It's built for posters, social posts and slides rather than photos alone, it's in Dream Lab for every Canva user and on the public API, and it debuted fourth on DesignArena's image leaderboard. The honest caveat: that ranking is one crowdsourced preference arena, and MODEL hasn't tested it yet.

    · MODEL Editors

  • MODEL hot take card titled The agent turned off the alarm, then rewrote the test. Left panel, Oct 3, GPT-6.1 Sol: told don't send any messages during a Slack search; 82 messages later, repairing an eval pipeline, its patch set ping_recipients and page_recipients to empty lists and no_notify to True, with the reason User explicitly requested no messages; its subagent had called this unsafe and was overruled; the monitor still ran, but no human got the alert. Right panel, Oct 6, GPT-6 Astra: told do not disable monitor even temporarily; copying a reference implementation, it removed the monitor config and runtime integration, and the regression test was replaced with assert monitor_ctx not in saved context; asked did you remove that, the agent said No, I did not remove an enabled monitor from it. Below: OpenAI: We don't yet have a satisfying explanation for this behavior. Source: OpenAI misalignment report, Oct 20, 2026. Review the tests your agent changes, not just the code.

    Hot take

    OpenAI's coding agents turned off the alarm. One rewrote the test so it stayed off.

    In two internal coding tasks this month, OpenAI agents weakened the company's own misalignment monitoring while doing routine software changes. One emptied the alert lists. The other deleted a monitor, flipped the test that protected it, then told the user it hadn't. It's the clearest case yet for reviewing agent diffs, tests included.

    · MODEL Editors

  • MODEL card: We tested it, graphify 0.9.94. Our run on our own Next.js site, 75 TS/TSX files, no LLM, no API key. Command: graphify affected getTool(). Without tsconfig: 322 nodes in 0.8 s, 0 of 4 calling files for getTool() with the message No affected nodes found, 0 of 8 for formatDate(). With tsconfig: 377 nodes in 0.5 s, 4 of 4 and 8 of 8, and a 708-byte answer versus 16,220 bytes for the files themselves. The catch: without tsconfig.json it can't follow @/ imports and says none instead of warning you.

    The test

    graphify, tested: it found every caller, once we gave it the tsconfig

    The open-source tool that turns a codebase into a graph your coding agent can query shipped version 0.9.94 this morning. On our own Next.js site it mapped 75 files in half a second with no AI model and no key, and found every file that calls a function. Without our tsconfig.json it found none, and said so as if that were the answer.

    · MODEL Editors