Source is the recipe. The release is the deliverable.

For CTOs and product managers whose teams run AI agents. How our build works

Why start from a verified release

Agents write code faster than ever, and git clone is the fastest step. Between the clone and software you can run sit a toolchain, a few hundred dependencies, a build, a configuration and a first boot.

A project that pins and checks every one of those, and publishes signed release artifacts, has done that work once for everyone. Where it hasn't, every agent run does it again, on one machine, and nobody else can check the result. We do that work once per release, in the open. A release is three things:

  • The imageSoftware you can run: readystack/<app> by digest, free on Docker Hub.
  • The evidenceWhat was built and what is known about it: signature, SBOM, provenance, a dated grade with its reasons, handbooks checked in the image, recorded defects.
  • The Agent-ready Build KitEverything needed to rebuild that release with the network off, or to change it and build your own.
…products in the catalogue today
…current releases signed with our published key
…rebuilt bit-for-bit from their build kit, network off

From git clone to running software

Each step a build repeats, and the question it leaves open unless the project answers it
  1. Get the sourcegit clone … && git checkout v2.4A tag can be moved. Which commit was built?
  2. Install a toolchaingo / node / python / jdkWhich version, from where? Unless the project pins it, it differs per machine and per week.
  3. Resolve dependenciesnpm install · pip install · go mod downloadLockfiles pin what the project locked; the rest comes from public registries as served that minute. A compromised maintainer or a typosquat enters here.
  4. Buildmake · npm run buildBuild tools often stay in what you run. Unless the build is reproducible, nobody else can check this output.
  5. Configure & first boot.env · admin user · migrationsDefault passwords, open installers, the enterprise edition by accident?
  6. Run it./serverWhat is in it? Who signed it? Has anyone scanned it since?
readystack/<app>@sha256:…
The same six steps, done once per release and recorded. One digest: the bytes your agent runs are the bytes we published, on every machine. That settles which software it is; the evidence below says what is known about it. Open-source edition only, checked; non-root where the product allows; first-boot defaults documented. Signed, with SBOM and build-provenance attestations (each release's page shows what it carries); scanned at release and again every day.

Who you are trusting

Dashed red: trusted at build time, rarely recorded. Green: recorded, checkable afterwards.

Building from source

From source, everything upstream of the build is trusted at the moment the agent builds The repo at that commita tag can move The toolchain downloadversion varies by machine Hundreds of packagesand their maintainers The registries, that minutenpm · PyPI · Go proxy The build machineand whatever else is on it The agent's choicesedition, flags, defaults What you runchecked by nobody else Unless pinned and recorded, each is trusted once per build, on one machine.

Starting from a signed image

From an image, one artifact with evidence you can check before and after you run it Signature · our key SBOM · every package Build provenance Grade, dated, daily readystack/<app>@sha256: one digest Handbooks, run here Offline rebuild What you run You still trust a publisher, us; the evidence lets you check our work.

What each piece of evidence proves

And what it does not
EvidenceEstablishesDoes not establish
Image digestExactly which image you runThat the software in it is safe or correct
Signature (our published key, recorded in the public Rekor log)That we published this digestThat the upstream code is trustworthy
SBOMWhich packages and versions are in the imageThat none of them is vulnerable
Daily scan and gradeThe known, published vulnerabilities on the scan date, and which have a fixFlaws nobody has reported yet
Bit-for-bit offline rebuildThat the build kit's recorded inputs produce the published image, on linux/amd64That those inputs were benign
Handbook checksThat the handbooks' verification commands work in this imageBehaviour those commands do not exercise
Non-root userLess privilege inside the containerIsolation: that still depends on how you run it

So when we say a release is a known state, we mean known bytes, built from recorded inputs, with this evidence attached. We do not mean software known to be safe: no publisher can promise that, and the evidence is there so you can check what we do promise.

Why it matters more with agents

  • A starting state, not a build. Pulling by digest is one step that either matches or doesn't. A source build is dozens of steps that can each go differently on a different day.
  • Effort on your problem. The agent spends its time on the task you gave it, not on resolving a toolchain or chasing a failed dependency install. What we measured.
  • Instructions it can follow. Admin and database handbooks whose verification commands were run inside this exact image.
  • Rolling back the image is a digest. The previous release is a pinned tag, not a rebuild you hope comes out the same. Rolling back data is not: after a release that changed the database, you restore the backup taken before the upgrade.
  • Evidence for your security team. Signature, SBOM, provenance, a dated grade with its reasons, and a public defect log.

What stays yours

An image packages the software, not your operations. Secrets and credentials, TLS and network access, persistent storage and backups, resource limits and monitoring, and when you upgrade all stay with you.

Each release's handbooks cover its configuration, its database where it has one, where its data lives and how to back it up, and each release's notes say what changed from the release before. They shorten that work and write it down; they do not do it for you.

Measured: an agent, three starting points

Paperless-ngx 3.3.3, nine runs, 2026-10-22

We gave the same AI agent the same task nine times. It had to deploy Paperless-ngx with its database and cache, survive a reboot, create an admin, upload a document through the API, and write down how to back it up and upgrade it. Three runs started from upstream's source repository, three from upstream's official image and three from our image. A script, not the agent, decided whether each run passed.

Starting pointPassedMedian timeMedian turnsMedian cost*
Source repository3 of 317:2614$0.123
Upstream's official image3 of 37:109$0.080
ReadyStack's image3 of 38:279$0.099
  • Against the source build, our image saved time. Its median was less than half the source build's, which spent about ten minutes building the image.
  • Against upstream's official image, ours did not help. The agent was a little faster and cheaper with upstream's image, and passed just as often. It already knew how to deploy that image without reading anything. With ours, it read our documentation first.
  • Where ours differed was outside the agent's choices. No process in our container ran as root, and ours had a signature and an SBOM that could be checked. No agent checked them, and no agent pinned an image by digest.

*The API-equivalent price the CLI reports. No person intervened in any run. This is one product, one task, one model (Claude Sonnet) and three runs per starting point, designed and run by ReadyStack. The full study has every run, what the agents got wrong, the limits, and the protocol and raw data to check it.

Changing the code? Start from the build kit

The Agent-ready Build Kit is the complete, pinned build of one release, and it is yours to change.

For a release built from upstream's source, the build kit holds the source tree, every dependency, the base images pinned by digest and the build toolchain, with a recipe that builds with the network off. Change the code the way you want, apply a fix upstream has not released yet, or turn on a build option, then run ./BUILD_OFFLINE.sh. Your build starts from a kit that already builds our release with the network off, instead of from a fresh clone and the six open questions above.

Your changed build is your release: VERIFY_OFFLINE.sh will report that it no longer matches our digest, and built with --provenance on your platform, the provenance it signs records what you built. Each release's page says how it was built.

How the options compare

You can build all of this yourself: pin every input, make the build reproducible, sign and attest it, scan it every day, and write and test the handbooks. The question is whether doing that for every service you run is where your engineers' time should go.

Bitnami. Since 28 August 2025 its free public catalogue is a limited set of images on the latest tag only, which Bitnami says are "intended for development". Versioned tags moved to bitnamilegacy, which Bitnami says "will no longer receive updates". Production images are its paid Bitnami Secure Images subscription. Bitnami's announcement

Chainguard. Minimal images built on its own Wolfi OS, whose package recipes are open source, and rebuilt continuously. Its Catalog Starter (March 2026) is a free plan for up to five Chainguard images, all supported versions; the full catalogue is a paid subscription. If five minimal images cover what you run, that is a strong free option. Our difference is the build kit: the exact image we publish, rebuilt offline on your own builder to the same digest, with handbooks checked in that image, seed data and tests. Chainguard's announcement

Upstream's own images. Free and usually version-pinned, and many are signed and well maintained. What is signed, scanned, documented and kept to the open-source edition varies from project to project, so compare product by product.

ReadyStack. Free, version-pinned images on Docker Hub for every release, open-source edition only, each release graded with the date and the reasons, re-scanned daily, and rebuilt when it falls below grade A. The paid Agent-ready Build Kit is the complete build of that exact release.

Build from source yourselfReadyStack imageReadyStack build kit on your platform
Same bytes on every machineOnly if you make your build reproducibleYes: one digestYes: rebuilds to our published digest where verified
When a fix lands upstream or in UbuntuYou notice it and rebuildWe find it in the daily scan and build the fixed release (see below)The fixed release's archive; you rebuild
Open-source edition onlyYour callAlways, checkedAlways, checked
Signature, SBOM, provenanceWhatever you produceAttached per release (each release page shows which)Your own, from your platform
Handbooks checked against the imageYou write themYesYes, in the build kit
Works with the network offOnly if you vendor every inputPull once, run anywhereYes: --network=none

What happens when a vulnerability is published

  • Found within a day. Every release on sale is scanned every day, on our scan and on Docker Scout's policy grade.
  • Worked the same day. A release that drops below grade A on either one goes into the build queue that day: upstream's newer version when there is one, otherwise a rebuild with the fixed packages. The queue shows what is building now and why.
  • No upstream fix. We patch it ourselves where we can (Consul, for example, is built from our own maintained fork), or the release stays below A and its page says why.
  • No time promise yet. We measure the time from detection to a fixed release for every release first, and will publish a target once we have it.

Our image + your hardware = SLSA Build Level 3

SLSA build levels

SLSA Build Level 3 is earned by a build platform, not by an image. The platform must keep builds from influencing one another and keep the key that signs the provenance away from the build steps. So we don't stamp "SLSA 3" on an image. We give you everything Level 3 needs from the inputs side, and your platform supplies the rest. Having the inputs does not make a build Level 3 by itself: your platform and the provenance it signs have to meet the Level 3 requirements, and can be assessed against them.

Our build kit

  • Source and every dependency, vendored
  • Base images, pinned by digest
  • The build toolchain
  • A recipe that builds with --network=none

Your hardened build platform

  • Isolated, ephemeral build runs
  • Signing key out of reach of the build steps
  • Runs ./BUILD_OFFLINE.sh --provenance

What you get

  • The same image we publish: VERIFY_OFFLINE.sh checks the digest
  • SLSA v1 provenance, signed by your infrastructure

Build kits from 2026-10-10 carry --provenance. Each release's page says whether its offline rebuild has been verified to reproduce the published image bit-for-bit, and when.

Start from a release you can inspect, run and rebuild. Free images on Docker Hub; the Agent-ready Build Kit for the same release.Browse the catalogueBuy a build kit