Agent machines
The three forms an agent machine can take — a host, a container image, or a Linux virtual machine — and the per-language images the product ships as templates.
An agent machine is a machine the server dispatches work onto. It is a separate decision from where the server runs, and it has three forms. A fleet may use all three at once.
| form | what it is | where it fits |
|---|---|---|
| a host | a Linux or macOS machine, running the agent directly | the simplest fleet, and the only form on Solo, where everything is one machine |
| a container image | a disposable machine created from an image, one per run | identical machines, a toolchain per class, nothing carried between runs |
| a Linux virtual machine | a longer-lived Linux machine you manage as capacity, reached like a host | estates that already manage VMs — see Supported platforms |
⇒ The container form is the one to reach for as a fleet grows. A host accumulates: toolchains, caches, whatever the last run left behind. An image does not — every run starts from the same bytes, which is also what makes "it worked on that machine" a question with an answer.
⚠ A container run is placed on the local machine only. A container run on a machine reached over ssh is refused in this release (Sandboxing).
The images the product ships
There is one per language class, plus one whose only job is to measure a host. The six class
images stand on one base: Debian 13 (trixie), slim · Node 22 · npm · ca-certificates ·
iptables · iproute2 · the agent binary · a declared class · and a final unprivileged user. The
base image is pinned by digest.
| image | what it adds on top | version |
|---|---|---|
dev-node | — | Node and npm are in the base |
dev-ts | TypeScript | tsc 5.9.3, pinned |
dev-python | Python, pip, venv | Debian's python3 (3.13) at build time — not pinned |
dev-java | JDK | Debian's OpenJDK 21 at build time — not pinned |
dev-android | JDK | the same as dev-java — ⚠ there is no Android SDK, see Android images |
dev-go | Go | Go 1.26, copied from the official Go image pinned by digest |
probe | — | not on the base: a single static binary on an empty image, for measuring a machine's capabilities rather than doing work on it |
Why the base carries Node even for classes that are not JavaScript. Three of the four supported vendor CLIs are npm packages, and one of them requires Node 22 or newer in its own manifest. Debian's own Node package is older than that, so an image built on the bare distribution could not run it.
Why Go is copied rather than installed from the distribution. Debian trixie ships a Go older than this product's own requirement, so an installed Go would be a toolchain that cannot build what it is meant to build. It is copied from the official Go image on the same Debian, so it stays compatible with the base.
What one base saves you. The second image you pull on a host costs only its own layers:
dev-node adds nothing, dev-java and dev-android share one JDK layer, and the rest add only
their toolchain. ⚠ docker images will show these as larger than they cost you, because its
per-image number double-counts shared layers.
What is NOT in these images
- ⛔ No vendor CLI. A vendor CLI is licensed to you, not to us, so it cannot ship inside an image we publish. Adding one is a single build — Adding a vendor CLI.
- ⛔ No Android SDK — Android images.
- ⛔ No credentials, no seat identity, no policy. Those arrive at run time. An image carrying them would be a secret anyone could pull.
iptables is there for the container bridge
Every class image carries iptables and iproute2, because the container's network wall needs
them: a bridge network plus a redirect into a door served inside the container's own network
namespace, so that a refused connection can be reported rather than silently dropped. The
engine composes that wall itself on a local container run when the host's measured record allows
it (How egress control works).
⚠ The container bridge is built and chosen automatically, and it has not been exercised with a full agent turn. Treat it as unproven (Egress limits).
What is true today, stated plainly
- ⚠ The images are templates, not a published set. Nothing pushes them to a registry today, so a fleet that wants containerised machines builds them from the templates, with the cross-built agent binary for the target architecture in the build context.
- ⚠ A container is not the network boundary by itself. Running inside an image bounds the toolchain and the filesystem a session sees; what the session may reach is Egress control. See Agent security: the whole set for which control covers what.
- What confinement a container adds beyond the image is measured per machine, not assumed from the fact that it is a container — see Sandboxing.
Supported platforms
Linux and macOS run natively. There is no Windows build; a Windows estate runs the product on Linux underneath.
Adding a vendor CLI to an image
Four ready build files, the three properties they all share, and what each CLI does behind a proxy — because two of the four ignore the variable most people reach for first.