Skip to content

Product1 publisher3 min readPublished

Docker's Kit spec v3 writes an AI agent's access into an ordinary OCI image

Docker published its Sandbox Kit Specification v3 under Apache 2.0, packaging an AI agent's permissions and tools as an ordinary OCI image. Grants that developers now keep in shell history and run flags can be pinned by digest and reviewed like any other image change.

The Product Desk · Product desk

Illustration accompanying Docker's Kit spec v3 writes an AI agent's access into an ordinary OCI image

What happened

  • Docker published the Docker Sandbox Kit Specification v3 as open source under the Apache 2.0 licence, in the docker/sandbox-kit-spec repository.
  • Kits already existed in Docker's sbx tool; v3 is the format's third version and the first in which a Kit is an ordinary OCI image.
  • A v3 Kit needs no new media type or sidecar file, so existing registries can store and serve it without learning anything new.
  • Kits come in two kinds: one workload that supplies the root filesystem, plus any number of mixins such as a CLI with its network rule or a credential binding.

Compiled by The Product DeskSomething wrong?How this is made

Why it matters

  • capability Access granted to an agent can be pinned by digest, so two versions can be compared and a colleague who pulls the same digest gets the same grants.
  • decision Teams have to choose which grants leave docker run flags, Compose files and CI configs for a Kit, and which stay outside anything that gets reviewed.
  • exposure With grants sitting in a readable manifest annotation, the reviewer who approves a broad one is on record as having seen it.

A firewall rule gets opened because opening it was quicker than narrowing it. The author of Docker's announcement post lists that among the grants they give their own agents, beside a bind mount and a token with broader scope than the task needs [8]. "The holes are configuration, added on purpose, usually by me," the author wrote [9].

What teams tell themselves is that the sandbox is the control. A Docker Sandbox is a microVM with its own kernel, and the post argues that puts the boundary below anything the model can reach or rewrite [7]. What users do, by the author's own account, is widen that boundary one request at a time and lose the record of it. "No file records them. They live in shell history, dashboards, and my memory. I cannot hand that to a colleague or diff it against last week," the author wrote [10].

The spec goes after the record. A Dockerfile describes the software, and the post says the outside of it (networks, credentials, volumes, tools, context) has lived in docker run flags, Compose files, CI configs and someone's memory [13]. The Kit puts those declarations in one manifest annotation, vnd.docker.sandbox.kit.descriptor, while the image layers carry the content [3]. Pinning the digest pins both [5].

This is for the second person: the colleague who inherits an agent, or the reviewer who signs off on what it can reach. Distribution asks nothing new of them. Kits build with docker buildx build, pull with docker pull, and get scanned and signed by tooling teams already run [4]. The format itself has a cost. "The tooling and distribution path are free; the format is something you learn," the author wrote, and the list runs to a grammar, a page per capability type, provides and requires, and kind: set [12].

A declared grant is as broad as its author made it. In the post's GitHub CLI mixin, the allow rule for api.github.com lists six methods, DELETE among them, and the deny rule removes DELETE only for paths under /repos/** [11][16]. A reviewer can now see that choice in a diff. Whether DELETE should stay open anywhere else on that API is still the reviewer's call.

The post says a Kit means the same thing on any conforming runtime [14]. It does not name a conforming runtime other than Docker's own, and it includes no adoption figures.

I'd move an agent's grants into a Kit whenever someone other than the person who granted them will have to answer for them. The tradeoff is learning another capability page for each grant type in use. For the rest, two axes sort the agents a team runs: whether the grants sit in the image digest, and whether the agent runs in a microVM or in a container on the host kernel. Declared grants in a microVM are the case the spec was written for. Declared grants in a container give a reviewable record over what the post calls "the same kernel the actor is probing" [15]. An undeclared microVM keeps damage inside the sandbox boundary [7] but cannot be rebuilt on a colleague's laptop. The last box, undeclared and in a container, is where the author says their own grants lived: shell history, dashboards and memory [10].

What to watch

  • A runtime other than Docker's claiming conformance to v3, the first test of the post's promise that a Kit means the same thing on any conforming runtime.
  • Whether registry and signing tools start showing the vnd.docker.sandbox.kit.descriptor annotation on review screens, or reviewers keep reading it by hand.
  • Whether the credential capability type can scope a token to a single task, given that an over-scoped token is one of the grants the post's author admits to.
Loading claim ledger
Loading source directory links
Loading share composer
Loading topic controls
Loading related stories