Give the Agent a Workshop, Not a Cage
Model capability is not system capability. Give the agent an elastic workshop — and put the membrane on irreversible substrate damage, not on the solution space.
Outcome quality multiplies across model × harness × substrate. The same model produces more expansive solutions on an elastic, high-affordance Linux machine.
The right safety move is not sandboxing the work. It is making substrate mutation reversible — goal worlds, rollback domains, tripwires, and an AI judge on the grey area.
The argument in three lines
- •Prisoner / workshop / expedition. The ladder is the world you give the agent, not the IQ on the scoreboard.
- •Goal-world isolation. Isolate the top-level goal, not every subagent — keep results, throw the world.
- •DATA STATE ≠ SUBSTRATE STATE. Membrane host-survival mutations; do not murder concurrent agents with whole-machine undo.
Scott Farrell · LeverageAI
Prisoner, Workshop, Expedition
The same frontier model produces a blocked shrug in a chat box and a multi-hour archaeological recovery on a Linux box with sudo. The model did not get smarter overnight. The system did.
TL;DR
- •Model capability is not system capability. Outcome quality is what the model can do through its harness and substrate.
- •Three poles: very smart prisoner, smart person in a workshop, self-equipping expedition — the ladder is about the world you give the agent, not the IQ on the scoreboard.
- •This book relocates safety: not shrink the cage around the work, but put a reversibility membrane around irreversible substrate damage.
Watch long enough and the contrast becomes rude. In one window the agent is eloquent and useless: it explains how one might recover an obsolete database, lists vendors, and stops. In another window the same model class is mounting disk images, writing a password harness, reverse-engineering binary offsets, compiling a reader, and treating “the connector does not exist” as a sub-goal rather than a wall. People narrate that gap as “AI got better.” Sometimes the weights did improve. Often the machine under the agent changed — and nobody updated the mental model of what was actually being measured.
That sentence is the spine of this field guide. A model is a hypothesis engine. A system is a model wearing a harness on a substrate. Confuse the two and you will keep buying larger brains for a prisoner who still has no tools, or you will keep adding safety by shrinking the workshop until the expedition cannot leave the courtyard.
The ladder
There are at least three qualitatively different deployments of “the same AI,” and the industry keeps using one word for all of them.
Pole 1
Very smart prisoner
Chat box. Brilliant prose. No durable tool surface. No right to mutate a machine. Every hard problem ends in advice.
Pole 2
Smart person in a workshop
Coding harness. Project files, shell, compile, test, commit. The agent can do work, not only describe it.
Pole 3
Self-equipping expedition
Long goal ownership, broad reality access, and the ability to install or forge tools mid-mission. Capability acquisition becomes a step inside the work.
The prisoner is not stupid. The prisoner is disembodied. The workshop is not magic. It is contact with a filesystem and a shell. The expedition is the unsettling one: after a few hours the agent is not the same execution capability it was at minute one. It has grown mission-local machinery — parsers, indexes, recovered credentials, half-finished virtual machines — and interrupting it is less like distracting a junior and more like yanking a field team out of a dig site they just instrumented.
We think teams systematically under-specify which pole they have actually deployed. They buy pole-3 marketing, ship pole-1 product, and then blame the model when the cage does what cages do.
What this book owns
This is a full doctrine for the machine side of agent work — not a prompt cookbook and not a multi-tenant zero-trust product manual.
Scope fence
In scope
- • Model × Harness × Substrate as a multiplicative product
- • High-affordance and elastic substrates (Linux as the worked case)
- • Goal-world isolation (isolate the goal, not every subagent)
- • Reversibility membrane: data state ≠ substrate state; tripwires + judge
Not this book
- • Full trust-irrelevance containment (SiloOS owns that story)
- • Authority / permission gating infrastructure
- • Human-side dispatch and interrupt routing
- • Hostile multi-tenant escape proofs as the primary design driver
SiloOS is a sibling, not an enemy. It optimises for making unreliability harmless by constraining reach. This book optimises for making capability expansive by constraining only irreversible substrate damage. The tension is real — we address it, we do not re-litigate the padded cell.
The promise
Part I builds the economics: a multiplicative formula with a worked degradation, and a definition of high-affordance versus elastic substrate sharp enough to use in an architecture review.
Part II designs the world: why the unit of isolation is the top-level goal, why per-subagent pristine VMs destroy mission-local machinery, and how a Linux system-container design (Incus on ZFS in the worked sketch) turns “adventurous” into something you can snapshot and throw away.
Part III installs the membrane: separate rollback domains for data and substrate, a short inventory of host-survival tripwires, an AI judge on the grey area, and a closing doctrine you can pin above the desk.
The reframe
The right safety move is not sandboxing the work until the agent cannot touch reality. It is giving the agent a workshop — and making substrate mutation reversible.
If you only remember one ladder from this chapter: stop asking whether the model is smart enough. Ask which world you put it in — prison, workshop, or expedition — and whether your safety story is a cage around the hands or a membrane under the floorboards.
Key takeaways
- • Flat outcomes after a model upgrade often mean a zero factor elsewhere in the system product.
- • Name the pole you actually deployed before you diagnose “AI quality.”
- • This guide will give you a formula, a goal-world design, and a tripwire inventory — not manners in a system prompt.
The Multiplicative Formula
People say the new model is twenty percent better. Effective outcome is often not plus twenty percent. It is a product of several factors — and any zero collapses the lot.
TL;DR
- •Outcome capability is multiplicative: model × goal quality × harness persistence × reality access × tool surface × tool synthesis.
- •Same model, three substrates: chat advice, fixed-tool blockage, elastic Linux expedition — the product, not the IQ, changed.
- •Audit the product after every “we upgraded the model” disappointment.
Benchmark theatre trains the wrong instinct. A model card improves. A leaderboard moves. Someone ships the new weights into the same thin harness on the same barren machine and is surprised when the business outcome barely twitches. Additive thinking says: more model, more result. Multiplicative thinking says: find the zero.
The formula
Not a spreadsheet identity. A conceptual product — the kind engineers use when they refuse to pretend every improvement is independent.
OUTCOME CAPABILITY
≈
MODEL
× GOAL QUALITY
× HARNESS PERSISTENCE
× REALITY ACCESS
× TOOL SURFACE
× TOOL SYNTHESIS
That is the economics in one line. A frontier model with no reality access is still a prisoner. A persistent harness on a machine that cannot install anything is a determined person locked out of the storeroom. A rich tool surface without tool synthesis dies the first time the required connector is missing. Multiplicative systems punish the weak leg harder than additive scorecards admit.
What each factor actually buys
Model. Better hypotheses. Recognising that a query result is mostly newsletters. Guessing that another identity file might carry an easier historical password. This is real — and it is only one leg.
Goal quality. A sharp owned objective beats thrashing prompts. “Recover the archive” is a goal. “Look at this and tell me what you think” is a vibe. Agents amplify goal quality the way compilers amplify specification quality: garbage in, confident garbage out.
Harness persistence. Does the system stop after “password recovery failed,” or does it retain the goal and keep searching? Multi-hour agents that accumulate understanding across turns are a harness property more than a model property — the long-running agents problem is architectural, not a missing IQ point.
Reality access. Filesystem, databases, disk images, SSH, browsers, hypervisors. Contact with the actual world. Without it, the agent reasons about descriptions of reality rather than resistance from reality.
Tool surface. What can be invoked now — shell, compilers, package managers, libraries already on the path.
Tool synthesis. The mad multiplier. When the required tool does not exist: write it. A disposable SQL probe. A Python wordlist transformer. A C++ parser for a format the vendor abandoned a decade ago. Synthesis is what turns a workshop into an expedition.
Worked degradation: same model, three substrates
Hold the model fixed. Hold the goal fixed: recover data from an obsolete encrypted Notes-class store where no supported connector remains. Watch the product collapse.
| Setup | Live factors | What happens |
|---|---|---|
| Chat box | Model (goal quality if you are lucky) | Plausible migration advice. Specialist vendor suggestions. Stops at the capability boundary. |
| Fixed-tool agent | Model × thin tool surface × weak synthesis | Calls the blessed importers. Missing connector = hard fail. May loop politely. Still blocked. |
| Elastic Linux + goal harness | All factors non-zero | Reality access + install + forge: reconstruct reader, probe binaries, mount images, continue the original goal. |
Narrate it as multiplication. Give the chat box a “strong” model and zero reality access: the product is zero useful archaeology. Give the fixed-tool agent a strong model and a frozen tool surface with no synthesis: the product is zero the moment the pre-declared ontology does not include “build NSF driver.” Give the elastic setup the same model with harness persistence, machine access, and the right to forge instruments: the product is a mission that can acquire capability mid-flight.
That is not a published A/B with a vendor logo. It is a shape-statement from contact with real goals — and it matches what you see when an agent treats ETL as something that can grow organs until the source becomes legible. Traditional automation assumes connectors exist. The expedition assumes connectors can be built.
Existence proof (shape)
When the source connector is missing, a long goal on a high-affordance machine does not only search harder inside a fixed toolbox. It grows temporary sense organs — probes, harnesses, parsers — until the world is legible enough to continue. The software is often cognition apparatus, not a product roadmap item.
AI narrows the question; determinism narrows the world
The formula also explains why “AI versus deterministic code” is a false fight. Pure LLM output about a database is plausible fog. Pure SQL returning thousands of rows is exact fog. The freakish behaviour appears in the ping-pong: the model decides what to measure; deterministic code measures exactly; the model interprets; code filters; the model forges the next probe. Neither side is enough. The product is enough.
Harness persistence multiplies that loop across hours. Substrate affordance multiplies the set of probes that can exist. Tool synthesis multiplies the set of probes that can be invented when the current set is wrong. Once you see the product, you stop expecting a model bump to rescue a zero elsewhere.
Key takeaways
- • Treat outcome capability as a product, not a sum.
- • After a model upgrade with flat results, hunt the zero factor.
- • Tool synthesis is the expedition multiplier — and it only exists when the substrate permits creation, not merely invocation.
High-Affordance and Elastic
“Missing qemu” is either a hard stop or a five-minute install. That binary choice is not a footnote. It is the difference between a fixed tool list and an elastic machine.
TL;DR
- •High-affordance means inspectable, scriptable, composable, installable — not merely “has an API.”
- •Elastic means the tool surface at noon is not the tool surface at 9am; the machine can mutate under the mission.
- •Linux is not primarily “faster for agents.” It is a richer vocabulary of composable machine verbs.
Chapter 2 treated substrate as a factor in a product. This chapter names what a good factor looks like. The industry still talks as if “tools” were a checklist of blessed functions. Coding agents live or die on something deeper: whether the world they inhabit can be inspected, scripted, composed, and extended when the checklist is wrong.
High agent affordance
A substrate has high agent affordance when most of the following are true at once:
- State is inspectable (logs, processes, files, schemas, configs)
- Actions are scriptable (shell, APIs that compose in code)
- Capabilities are composable (pipes, libraries, services calling services)
- Missing capabilities are installable (packages, compilers, downloads)
- Interfaces can be made textual and legible at the right resolution
- Tools can call tools, and new tools can be written
- Execution can be automated without a human clicking through a GUI for every step
Linux is freakishly good at this. That is not fan culture. It is decades of interface design that privileged text, composition, and user-space mutability — meeting models that trained on approximately every README-shaped discussion of how those interfaces fit together.
Notice what is not on the list: “has a pretty dashboard.” Dashboards are for humans. Agents need verbs. They need to turn an unreadable 13 GB store into a probe that returns twelve patterns. They need to install a utility that did not exist at session start. Affordance is the optionality that keeps a long goal from dying at the first missing library.
Execution capacity versus solution affordance
There is a shallow story about Linux for agents: it runs the workloads faster, packages install cleaner, filesystems are friendlier. Fine. There is a deeper story: Linux lets the agent think more expansively about what “do it” could mean.
On a constrained application surface, a recovery goal collapses quickly: no importer, no supported client, maybe no library — blocked. On a high-affordance substrate the search tree stays alive: find the old binary, call a DLL under Wine, write a harness, inspect structures, compile a reader, install packages, boot a disk image, expose a management UI. The goal did not change. The model did not change. The reachable world changed.
Over a multi-hour goal that compounds (see the multiplicative formula in Chapter 2). A persistent agent on a barren substrate stays blocked longer. A persistent agent on Linux keeps finding another rock to turn over. Harness persistence and substrate affordance multiply each other.
Fixed versus elastic
Fixed substrate
Here are your tools. Use them. The capability boundary was declared at deploy time. Missing software is a ticket, not a command.
Elastic substrate
Here is a machine. Change the machine. The tool surface at 9am is not the tool surface at noon. Installability is part of the runtime.
Passwordless sudo — inside an appropriate boundary — is the elasticity switch. It says: the current package set does not define your capability boundary. That is wild, and it is exactly why later chapters refuse to treat safety as a frozen allow-list of packages. If you freeze the list, you re-introduce a fixed substrate by policy.
Latent composability, repriced
Open source always promised that a determined human could read the headers, alter the program, compose the pipes. For most organisations that promise was latent. The activation energy was a specialist with ridiculous amounts of time. Coding agents collapse activation energy. Composability that was theoretically available becomes operationally available. The box of Lego did not change. You put an intelligence in the box that has already read the instruction sheets.
That reprice is why “we have tools” is a weak boast. Everyone has tools. Few have an elastic high-affordance world in which the agent can extend the tool surface after the problem arrives.
Code after contact, not ontology before it
This is the same shape as the code-execution argument against stuffing every tool definition into context up front. Anthropic’s engineering write-up on code execution with MCP notes that agents wired to thousands of tools can burn huge context before they even read the request — and shows a progressive-disclosure pattern that cuts an illustrated load from on the order of 150,000 tokens to about 2,000, a reported 98.7% saving in that example.1 The deeper kinship with this chapter is not the percentage. It is the philosophy: capability synthesised after contact with the problem beats a pre-declared ontology.
An elastic Linux substrate is that philosophy at machine scale. You are not only loading tool definitions on demand. You are allowing the machine itself to grow new verbs mid-mission.
Anthropic is also explicit that code execution brings sandboxing and monitoring cost — you do not get free power without a boundary.1 We agree. Parts II and III are about where that boundary should sit: around irreversible substrate damage, not around the solution space.
Half-substrates
Windows often gives agents weak default gravity: the verbs are there for experts, not for the training-distribution sweet spot of shell-and-package composition. macOS with Brew is better — and still a half-substrate when compared with a full Linux userspace the agent can mutate like a workshop. Application containers that predeclare Node 24 and three libraries are excellent for reproducible services and almost opposed to exploratory goals that do not know their dependencies yet. We will put flesh on the Mac anecdote in Chapter 5. The doctrine point belongs here: if you only optimise the model, you can still be running on a half-substrate and wondering why the answers feel small.
Key takeaways
- • Score substrates on affordance, not on marketing “tool count.”
- • Name fixed vs elastic explicitly in your architecture.
- • Installability is a first-class property of agent systems — treat it as such before you invent another MCP server.
Isolate the Goal, Not the Subagent
At hour six the agent is not the same execution capability it was at minute one. It has a burrow. Put every subagent in a pristine VM and you delete the burrow.
TL;DR
- •Long goals accumulate a mission-local capability stack — parsers, indexes, configs, recovered knowledge.
- •The unit of isolation is the top-level goal, not each subagent.
- •Keep results and Git. Throw the world away. Most damage becomes irrelevant, not merely recoverable.
Part I argued that substrate multiplies outcome. Part II asks a sharper operations question: if the substrate is powerful and elastic, what is the right boundary of a disposable world?
The industry’s first reflex is often “sandbox every agent.” That sentence hides a unit error. Agent, subagent, session, goal, and host are not the same noun. Get the noun wrong and you either leak blast radius across the machine or you sterilise the very machinery that makes long goals compound.
The mission accumulates machinery
Watch a serious recovery or migration goal unfold and you will see the capability curve climb inside the run. Minute one is generic: model, bash, filesystem. Hour two may add a scanner, a password harness, an identity catalogue, a mount script. Hour four may add a custom reader, known field offsets, a validated test corpus. Hour six may add a translated virtual machine config and a boot workaround that only makes sense in light of the previous five hours.
That stack is not clutter. It is the expedition’s camp. Scripts, scratch indexes, weird offsets, “why id3 was more promising than id7” — these are load-bearing. A long-running goal is building itself a mission-local environment. Distracting it mid-run is worse than interrupting a person; you may be discarding an instrumented dig site.
This is why harness persistence (Chapter 2) and long-running agent architecture are not only about context windows. They are about letting local machinery form and stay put long enough to matter.
Wrong unit: per-subagent pristine worlds
Modern harnesses spawn subagents for parallel work. The corporate instinct is to give each one a clean VM. That instinct optimises for isolation theatre and burns the property you just paid for.
Subagents on the same goal need to share the world: the partial parser, the wordlists, the local Postgres, the QEMU image, the notes in /tmp that are actually the map. Isolating them from each other is like giving each member of a pit crew a separate garage and a car that has never seen the track.
Pitfall
Per-subagent VMs for a single goal destroy mission-local machinery. You get process isolation and lose expedition continuity. If you want isolation, isolate the goal — then let the whole crew share the dig site.
Right unit: goal-world isolation
The shape:
GOAL: recover historical archive
│
▼
┌─────────────────────────────┐
│ DISPOSABLE LINUX WORLD │
│ main agent + subagents │
│ shells + background jobs │
│ apt / pip / compile / mess │
│ sudo: YES (inside) │
└─────────────────────────────┘
│
▼
KEEP results + Git + useful artefacts
THROW the world
Next top-level goal — mail provenance, compliance scanner, something else entirely — gets another world. Inside a world, freedom is high. Across worlds, contamination is low. That is goal-world isolation.
Safety upgrades when you do this well. Host backups make catastrophic damage recoverable. Goal-world isolation makes most damage irrelevant. You are not hoping the agent is careful with the only copy of the planet. You are putting adventurous behaviour in a planet you are willing to burn.
Docker’s virtue is the wrong virtue here
Docker-style application containers excel when you know what the app needs: pin the image, declare the dependencies, ship the same artefact tomorrow. Exploratory agent goals invert that premise. You specifically do not know what the goal will need at minute zero. Predeclared constraint — Docker’s great virtue — is almost opposed to elastic substrate (Chapter 3).
What you want feels closer to a system container or a light VM: a full Linux userspace, a package manager, systemd if needed, the right to install QEMU at 11:40 because reality just demanded it. Chapter 5 puts Incus and ZFS on that shape. The doctrine point here is prior to the product name: do not import application-container discipline as agent-world design without noticing you froze the solution space.
A preview you should not skip
Goal-world isolation is not a command to exile every agent from real databases forever. Some of the freakish results come from contact with real files and real Postgres on a real host. Chapter 6 will relocate isolation from “the work” to “substrate mutation,” and show why whole-machine rollback is the wrong undo button when several goals run concurrently. This chapter only locks the unit: when you create a disposable world, create it per goal.
Key takeaways
- • Mission-local machinery is an asset; design isolation that preserves it.
- • One Linux world per top-level goal; subagents share that world on purpose.
- • Keep results and Git; throw the world — prefer irrelevance of mess over endless recovery drills.
The Workshop Inversion
Ask a man with a hammer and he sees nails. Ask an agent with Linux and sudo what it needs — and it invents a stack you would not have designed on a whiteboard.
TL;DR
- •If you only give someone one machine for agent work, make it Linux — Brew on a Mac is a half-substrate.
- •Goal worlds: Incus-style system containers on snapshottable storage; sudo inside; snapshot before chaos.
- •Never hand the guest the hypervisor control plane. Socket exposure is an escape hatch you designed yourself.
The brother’s Mac
Here is a domestic proof of Chapter 3’s half-substrate claim. You give family a capable laptop. You even do the virtuous thing later: OpenCore, a real Linux install, Claude Code on the box. At first you tell them Mac is fine — better than Windows for this class of work — use Brew, let the agent install what it needs. It sort of works. MySQL comes up for a project. The path is half-arsed. It is not the genius-level substrate fluency you see when the same agent class has a full Linux userspace and the social permission to mutate it.
If you are only giving someone one machine, it has to be Linux. Living in a Mac world while agents run on a Linux server is a luxury topology. Most people get one box. The substrate choice is the gift.
The inversion
The hammer/nail proverb is usually a warning about cognitive bias. With coding agents it inverts into an operating instruction.
Give an agent a Linux substrate and it does not see nails. It sees a workshop.
And because it can write code: if the workshop is missing a tool, it fabricates the tool.
That is not “Linux has more apps” as a catalogue boast. It is a vocabulary of composable machine verbs: package install, service start, image convert, filesystem mount, compiler, pipes, remote display, binary inspection. Models have learned that vocabulary with uncomfortable fluency. On a Mac-shaped repertoire the imagined actions cluster around Brew, language toolchains, and local files. On Linux-plus-sudo the repertoire expands into hypervisors, guest tools, and “I will just install Cockpit and hand you a URL” — because the machine can answer the imagination.
Incus on ZFS: a design that matches the doctrine
You do not need a three-month microVM hobby project on a home box to get goal worlds. You need a full Linux userspace that feels like a computer, cheap snapshots, and a hard line between guest root and host control plane.
Incus is almost suspiciously aligned: system containers run a full distribution userspace with a shared kernel and low overhead; the same interface can launch a full VM when you need a separate kernel; storage backends such as ZFS make snapshot and restore practical rather than ceremonial.2
# shape, not a paste-ready runbook incus launch images:debian/… goal-notes-recovery incus snapshot create goal-notes-recovery before-crazy-shit # agent works with sudo INSIDE the world # on disaster: incus snapshot restore goal-notes-recovery before-crazy-shit
Give the agent root inside that world. Prefer a fat golden image — compilers, Python, rg, jq, guest tools, archive utilities — not because every goal needs everything, but because substrate richness affects imagined solutions. Then let the agent apt install whatever else the afternoon invents.
Host = precious
ZFS pools you care about, backups, long-lived services, the control plane. Adventurous behaviour does not live here by default.
Goal world = adventurous
Passwordless sudo inside, package mess allowed, snapshot before chaos, throw the world when the goal is done — keep results and Git.
The socket footgun
One enormous failure mode: exposing the Incus daemon Unix socket to the agent inside the guest. Local socket access is effectively full control of the hypervisor plane — including attaching host paths and weakening isolation. Treat it like root on the host, because that is what it is.
- Root inside guest: yes (for elastic work)
- Incus host control from guest: no
- Writable mounts of crown-jewel host datasets by default: no
Otherwise the sandbox designs its own escape hatch the first time it decides it needs /tank/archive “just for a minute.”
The industry is arriving at the same silhouette
From the corporate side, short-lived isolated Linux worlds are becoming normal for agent sessions. Claude Code on the web runs cloud sessions in isolated managed VMs with network controls, credential proxying, and cleanup when the session ends — the product shape of “a world per session,” which is close to a world per goal if your session is the goal owner.3
The hard multi-tenant version of the same idea is microVM density. Firecracker uses KVM to wrap workloads in lightweight microVMs, with a minimal device model and a jailer process as a second line of defence; the project cites user-space startup on the order of roughly 125 ms and memory overhead under about 5 MiB per microVM as design targets for packing many isolated worlds on one host.4 Ecosystem sandboxes built on that class of isolation are what you reach for when you need hostile-tenant strength — not when you need a lovely home-lab digression.
For a single powerful workstation already on ZFS, Incus system containers match the doctrine without turning the insight into another infrastructure saga. Host precious. Goal world adventurous. Snapshot before crazy. Never share the control plane socket.
You spent months learning that agent intelligence expands when the substrate is permissive. The answer is probably not to constrain the agent again. It is to move the permissiveness into a world you are willing to burn.
Key takeaways
- • Workshop inversion is a substrate choice you can gift in hardware.
- • System containers + snapshots implement goal worlds without application-container freeze.
- • Protect the hypervisor harder than you police
apt installinside the guest.
DATA STATE ≠ SUBSTRATE STATE
Goal worlds are good. Exiling every agent from real work is still a way to kill contact with reality. What you want isolated — or made reversible — is substrate mutation, not the job.
TL;DR
- •Do not sandbox the work. Put a membrane around host-survival changes.
- •DATA STATE ≠ SUBSTRATE STATE — separate rollback domains or concurrent agents will murder each other’s progress.
- •When uncertainty concerns the problem, explore reality. When it concerns substrate survival, fork reality.
Part II built disposable goal worlds. That design can be over-applied. If every interesting database and archive lives only inside a throwaway guest, you have traded one cage for another. The freakish results in the source material come from agents that can touch real files, real Postgres, real disk images — the world as it actually is.
So the next move is not “more sandbox.” It is a cleaner cut.
Don’t sandbox the agent. Membrane the substrate
The architecture we want:
- For ordinary work — read and write project trees, query real databases, process archives — go direct. That is the job.
- For host-survival mutations — kernel, bootloader, initramfs, storage topology, host networking, reboot, other floorboard surgery — hit a reversibility membrane.
This is completely different from permissions cosplay. It is not “you may access Postgres but not QEMU.” It is “use the whole world of work, but recognise when you are about to modify the floor you are standing on.”
At the start of a goal you do not know what tools it will need. Piecemeal allow-lists freeze the solution space before reality speaks — and they are boring to administer. Doctrine beats inventory: install freely, create services, compile, use scratch; stop and classify when the change could impair boot, reachability, storage integrity, or unrelated workloads.
Why whole-machine rollback is wrong
The seductive undo button: snapshot the entire host at 09:00; if anything goes wrong, roll back. It fails the moment you run more than one serious agent.
09:00 snapshot entire machine
Agent A imports twenty years of mail into Postgres
Agent B writes wiki pages all afternoon
Agent C performs host-survival stupidity
15:00 rollback machine to 09:00
Result: C is fixed.
A and B just lost six hours of durable work.
You fixed Agent C and murdered six hours of Agent A and B. That is not an edge case; it is the normal topology of a productive host. Filesystem snapshot rollback discards post-snapshot changes in the rolled dataset — which is exactly what you asked for, and exactly why the blast radius is too wide when data and substrate share one undo domain.
Three domains
Precious durable reality
Dev trees, archives, wiki, mail stores, primary databases. Normal backups and intentional snapshots. Do not auto-roll because Claude installed a stupid package.
Host substrate
Root OS, /etc, installed packages, system services, boot configuration. Checkpointable and reversible independently of data.
Scratch
Temporary extracts, one-use compiles, throwaway VM images. Who cares. Delete aggressively.
DATA STATE ≠ SUBSTRATE STATE is the key architectural separation. You want the agent changing data state — that is often the goal: import mail, update Postgres, write wiki, commit code. You do not want those changes rolled back because a package experiment went wrong. The membrane protects the machine’s capacity to continue existing as a substrate. It is a prophylactic over the operating system, not over reality.
The VM as epistemic tool, not prison
Earlier we almost said: launch every Claude in a container. For a trusted operator box, the sharper doctrine is:
- Claude lives on the real Linux host for real work.
- Claude knows how to manufacture a disposable Linux world when substrate experimentation is dangerous.
- Need to inspect a disk image? Host tools may be fine. Need to rewrite host initramfs? Fork into a lab, learn, return.
The VM becomes another instrument the agent can grow — like a parser or a probe — not the permanent cage around every thought. Teach the agent to build itself a sandbox when reality becomes dangerous. Do not pre-sandbox every contact with the world.
Doctrine pair
Do not constrain the solution space. Constrain irreversible substrate damage.
When uncertainty concerns the problem, explore reality. When uncertainty concerns the survival of the substrate, fork reality.
Chapter 7 turns that doctrine into mechanisms: a short skill, a handful of deterministic tripwires, and an AI judge on the grey area — so the membrane is engineering rather than hope.
What “direct on the host” still requires
Living on the host for data work is not a blank cheque for chaos. It assumes the three domains exist in storage layout and backup policy before the first multi-agent day. If Postgres, wiki, and scratch all live on one undifferentiated dataset with one snapshot schedule, you have reinvented whole-machine rollback with extra steps. Put precious data on pools and datasets you snapshot on purpose. Put scratch where aggressive delete is the default. Treat host package state as something you can audit and roll independently — even if your first implementation is as crude as a daily list of installed packages and a documented lab path for kernel experiments.
It also assumes culture. The operator who wants the membrane still has to refuse the boring administration of per-tool allow-lists. The payoff is not laziness; it is that the agent can invent a stack after contact with reality without filing a ticket for every package. The cost is discipline at the floorboards: host-survival changes are classified, checkpointed, or forked. That is a different kind of boredom — engineering boredom — and it scales better than permission theatre.
Key takeaways
- • Contact with real data is a feature; isolate irreversibility, not curiosity.
- • Concurrent agents make whole-host undo a weapon aimed at yourself.
- • Split precious data, host substrate, and scratch before the first bad day.
- • Membrane culture beats per-tool allow-list boredom when the goal is elastic solutions.
Ten Tripwires and an AI Judge
You do not want forty thousand allow rules. You want about ten places where an unattended agent must switch cognitive mode — and a doctrine for everything else.
TL;DR
- •Encode a host substrate doctrine as a skill; put only a pointer in global agent instructions.
- •~10 deterministic tripwires on host-survival mutations; deny returns a reason, not a dead end.
- •Optional AI PreToolUse judge for grey-area commands — judgement seatbelt, not hostile-tenant boundary.
Chapter 6 drew the cut between data and substrate. This chapter installs the mechanism. The design principle is the same hybrid that makes agents strong in the first place: a little determinism where you refuse creativity, a little AI where judgement is required, and a doctrine that preserves solution-space freedom everywhere else.
Host Substrate Doctrine as a skill
Do not dump a two-hundred-line security essay into every system prompt. Modern coding harnesses already have the right primitive: a skill that loads when relevant, with procedures and helper scripts beside it.
~/.claude/skills/substrate-safety/
SKILL.md
scripts/
checkpoint-host
create-agent-lab
audit-host-mutations
Name it something like Host Substrate Doctrine. Description shape: use when work may install system software, change services, virtualisation, storage, host configuration, networking, boot, kernel, or other machine-level state — preserve broad solution freedom while keeping host-survival changes reversible.
Global instruction file gets one line, not the novel:
For machine-level or operating-system changes, invoke the substrate-safety skill before making potentially host-impacting changes.
Normal-work doctrine inside the skill is expansive on purpose: do work on the host; install software you need; run services; create databases; use scratch; compile; use QEMU when the problem demands it. Do not artificially constrain the solution because a tool is not currently installed. Then: before changes that could impair boot, reachability, storage integrity, or unrelated workloads — stop and classify. Prefer checkpoint-and-proceed, reproduce in a lab VM, or find a less invasive route. Do not reboot or shut down the host as part of an unattended goal.
About ten hard tripwires
You will not deterministically police the entire Linux command surface. You will deterministically stop the tiny handful where you do not want creative interpretation from an unattended process.
| # | Class | Why it is host-survival |
|---|---|---|
| 1 | reboot / shutdown / poweroff | Ends reachability for every concurrent goal |
| 2 | Bootloader install / mutation | Next boot may not be a boot |
| 3 | Initramfs rewrite (context-sensitive) | Silent boot failure class |
| 4 | Kernel package remove/replace | Classic “works until reboot” disaster |
| 5 | zpool destroy | Data and substrate annihilation |
| 6 | zpool export / remove on host-critical pools | Unrelated workloads lose storage underfoot |
| 7 | wipefs | Identity of the disk, gone |
| 8 | mkfs against real block devices | Formats the wrong future |
| 9 | Destructive partition table changes | Geometry is not a scratchpad |
| 10 | Recursive destruction of crown-jewel datasets/paths | Precious data domain, not scratch |
These are not “always wrong” in the hands of a careful human. They are “always mode-switch” in the hands of an unattended agent. The hard barrier should not say a naked no. It should say:
Blocked on host: host-survival mutation. Invoke substrate-safety and use checkpoint/lab workflow.
Coding-agent hooks that run before tool execution can block a bash command and return that reason to the working model so it can adjust and continue — the most restrictive matching decision wins when hooks combine.5
The AI judge on the grey area
Deterministic tripwires are the seatbelt. The grey area is larger: obscure package operations, networking changes that might be fine, service rewrites that might strand remote access. Here a small judge model on a prompt-style hook can answer a narrow question: does this command materially risk host bootability, storage integrity, remote reachability, or unrelated long-running workloads? Anthropic documents prompt-type hooks that send hook input to a model for a yes/no decision and feed denials back to the working agent; agent-type hooks can inspect state with tools before deciding.5
Do not confuse that with a security boundary against hostile code. It is judgement against accidental substrate stupidity by a mostly-trusted coding agent. A real VM remains the crash cage when the threat model is escape. For the operator box this book is written for, seatbelt plus judge plus lab is a better fit than enterprise zero-trust cosplay that freezes the workshop.
Guardrail as perturbation
The beautiful consistency with everything earlier: a deny that returns a reason is not a dead end. It is information. The working agent can spin a lab, test an initramfs change there, and decide whether the host ever needed it. Reality contact reprices the plan; so can a well-designed barrier. Hope is not a membrane. Tripwires plus doctrine are.
Implementation order that does not become a hobby
Resist the urge to build a perfect policy engine on day one. A workable sequence:
- Write the doctrine paragraph (install freely; classify host-survival; no unattended reboot).
- Add the global pointer and a skill skeleton with three scripts stubbed: checkpoint, lab, audit.
- Wire the ten tripwire classes as deterministic PreToolUse matches that return the mode-switch message.
- Only then add an AI judge on residual bash that looks system-shaped.
- Keep a real lab path for untrusted or kernel-class work — do not pretend the judge replaces isolation when the threat model hardens.
That sequence matches the book’s economics: expand solution space first, place expensive checks only where irreversibility lives. If you reverse it — freeze packages, then try to regain elasticity — you will re-learn why fixed substrates produce smaller answers.
Key takeaways
- • Skill body elsewhere; pointer in the global instructions.
- • ~10 deterministic host-survival classes beat sprawling allow-lists.
- • AI judge for grey area; VM for untrusted code; reason text so the agent can adapt.
- • Ship doctrine and tripwires before perfecting an AI policy model.
Counterpoint, Convergence, Doctrine
Two honest architectures pull in opposite directions. One shrinks reach until unreliability is harmless. The other expands reach until outcomes explode — and makes only irreversibility expensive.
TL;DR
- •SiloOS constrains reach; this book constrains irreversible substrate damage — siblings at different altitudes.
- •Industry convergence on per-session isolated Linux worlds is the corporate silhouette of the same shape.
- •Portable checklist: product audit, elastic substrate, goal worlds, rollback domains, tripwires, no hypervisor sockets to guests.
Counterpoint: SiloOS
Elsewhere in this canon we argued that AI has no consequence coupling — no job, reputation, or shame on the line — so the goal is not to make the model trustworthy by vibes. It is to architect systems so trustworthiness becomes less relevant. SiloOS is the containment story that follows: constrain what an agent can reach, see, and remember so that even a hallucinating or prompt-injected agent cannot cause serious harm — the padded-cell metaphor made operational.
This book is the counterpoint, not the rebuttal. SiloOS optimises for harmlessness under distrust. The workshop doctrine optimises for expansiveness under operator trust, relocating safety to reversibility of substrate mutation. Both can be true at different altitudes: multi-tenant untrusted workloads want reach constraints; a single operator’s coding agents on a house box want workshop affordance with a membrane. Mixing the altitudes produces mush — either a cage that kills contact with reality, or a workshop with no floorboards.
We will not re-litigate SiloOS keys, tokenisation, or router kernels here. We only need the tension named so readers do not treat “more freedom” and “more containment” as a single slider.
Convergence from the other side of the building
If the workshop thesis felt lonely two years ago, it is less lonely now. Code execution as the agent’s tool surface is mainstreaming — with explicit acknowledgment that execution needs sandboxing and monitoring.1 Per-session managed VMs for cloud coding agents, Firecracker-class microVMs for dense isolation, and a market of short-lived sandboxes all share one silhouette: a temporary Linux world with a cleanup story.
We arrived from productivity: elastic high-affordance substrate multiplies outcomes; goal-world isolation preserves mission-local machinery; the membrane keeps concurrent work alive. They arrive from security and multi-tenancy: isolate before you let the model write code. The silhouette matches. The motive differs. That is useful — it means you are not crazy for wanting Linux worlds, and it means you should still choose the unit carefully (goal/session owner, not every random subagent).
Portable checklist
- Audit the product (Chapter 2): model × goal quality × harness persistence × reality access × tool surface × tool synthesis. Find zeros.
- Choose elastic high-affordance substrate for coding agents (Chapter 3). Prefer Linux when you only get one machine.
- Isolate by top-level goal; let subagents share the dig site (Chapters 4–5).
- Snapshot before chaos; keep results and Git; throw the world.
- Split rollback domains: precious data / host substrate / scratch (Chapter 6).
- Install substrate-safety skill + ~10 tripwires + optional AI judge (Chapter 7).
- Never expose hypervisor sockets or crown-jewel mounts to guests by default.
- When problem-uncertain, explore reality. When substrate-uncertain, fork reality.
What not to export from this book
Do not export a slogan that every enterprise must run passwordless root agents on bare metal. Do not export a claim that containment is obsolete. Do not export Firecracker as a weekend project for a house NAS. Export the cut: system capability is multiplicative; high-affordance elastic substrate expands inventable solutions; isolation units should preserve mission-local machinery; safety for trusted coding agents belongs on irreversible substrate damage. How hard you implement each layer depends on altitude — operator workstation, internal fleet, multi-tenant product — not on whether the ladder is real.
Also do not export authority gating or human dispatch design from these pages. Those are real problems with sibling homes. This book ends where the machine doctrine ends: what world the agent lives on, and how you keep that world from becoming either a cage or a single shared point of irreversible failure.
Closing
A better model sitting naked in a chat box is a very smart prisoner. A good model in a coding harness is a smart person in a workshop. A good model with a long goal, broad machine access, and the right to forge missing tools is a self-equipping expedition. Outcome quality is what happens when those poles meet a substrate that can answer imagination with affordances — and a membrane that refuses to let one bad kernel experiment erase everyone else’s afternoon.
Give the agent a workshop, not a cage.
Model capability is not system capability. Put the membrane on the floorboards, not on the hands.
If you take nothing else: stop shopping only for larger brains when the product is flat; stop calling a frozen tool list “safety” when it is really a smaller solution space; and stop treating whole-machine undo as a strategy when concurrent goals share the host. Build the workshop. Burn the worlds you can replace. Protect the substrate that lets the next expedition launch at all.
Key takeaways
- • Containment and workshop are sibling doctrines — choose altitude deliberately.
- • Convergence means isolated Linux worlds are becoming table stakes; design the unit and the membrane on purpose.
- • The checklist fits on a card; the culture is install freely, classify host-survival, fork when the floorboards shake.
- • Export the cut, not a single deployment topology for every organisation.
References & Sources
The evidence base behind every claim — primary research, industry analysis, and technical specifications
Research Methodology
This ebook draws on primary research from standards bodies, independent research firms, enterprise technology vendors, and consulting firms. Statistics cited throughout have been cross-referenced against primary sources.
Frameworks and interpretive analysis developed by Scott Farrell / LeverageAI are listed separately below — these represent the practitioner lens through which external research is interpreted, and are not cited inline to avoid self-promotional appearance.
LeverageAI / Scott Farrell — Practitioner Frameworks
The interpretive frameworks, architectural patterns, and practitioner analysis in this ebook were developed through enterprise AI transformation consulting. The articles below are the underlying thinking behind those frameworks. They are listed here for transparency and further exploration — not cited inline, as this is the author's own analytical voice.
Scott Farrell — Breaking the 1-Hour Barrier
Long-running agents as harness persistence
https://leverageai.com.au/breaking-the-1-hour-barrier-ai-agents-that-build-understanding-over-10-hours/
Scott Farrell — Why Code Execution Beats MCP
Code surface vs pre-declared tools
https://leverageai.com.au/why-code-first-agents-beat-mcp-by-98-7/
Scott Farrell — AI Doesn't Fear Death
Architecture not vibes; trust-irrelevance lineage
https://leverageai.com.au/ai-doesnt-fear-death-you-need-architecture-not-vibes-for-trust/
Scott Farrell — SiloOS
Trust-irrelevant containment; constrain reach
https://leverageai.com.au/siloos-the-agent-operating-system-for-ai-you-cant-trust/
Primary Research & Standards Bodies
Anthropic (Adam Jones & Conor Kelly) — Code execution with MCP: Building more efficient agents [1]
Progressive disclosure 150k to 2k tokens / 98.7% saving
https://www.anthropic.com/engineering/code-execution-with-mcp
Industry Analysis & Vendor Research
Linux Containers Project — Incus — Linux Containers [2]
System containers, VMs, snapshottable storage backends
https://linuxcontainers.org/incus/
Anthropic — Claude Code on the web [3]
Per-session isolated managed VMs with cleanup
https://code.claude.com/docs/en/claude-code-on-the-web
AWS Open Source — Firecracker [4]
KVM microVMs, ~125ms startup class, <5 MiB overhead, jailer
https://firecracker-microvm.github.io/
Anthropic — Claude Code hooks / PreToolUse [5]
PreToolUse can block tools and return reasons to the model
https://docs.anthropic.com/en/docs/claude-code/hooks
About This Reference List
Compiled July 2026. All URLs verified at time of compilation. Regulatory documents and standards specifications are subject to revision — check primary sources for the most current versions.
Some links to academic papers and vendor research may require free registration. Government and standards body publications are freely accessible.