kit-tck, sbx diagnose, and the claims this manual checked
Every claim this manual repeats from Docker's pages or the community was checked against a capture or marked unverified, and this section is the ledger.
A vendor page says that credential values never enter the VM. A Hacker News thread from 2026-08-10 says the proxy re-signs every certificate, and a podcast from 2026-09-26 says nobody audited the boundary. You want to know which of those three someone checked. When you finish this section, you can say which claims this manual verified, with which file, and which it only reports.
The ledger
Each row names the claim and its source, the verdict, and the capture file behind the verdict. A verdict of confirmed means a recorded file shows the behaviour. Contradicted means a file shows the opposite. Disputed means two sources disagree and no capture settles it, and unverified means no capture was planned or recorded.
| Claim and where it is made | Verdict | Evidence |
|---|---|---|
| credential values never enter the VM (docs, Security model) | confirmed | 10-env-sentinel.txt has M101_RECV_KEY=sbx-cs-<rand> and ANTHROPIC_API_KEY=proxy-managed, and 10-receiver.log shows the host receiver got Bearer m101-dummy-receiver-0000 |
| the secret is injected only for a bound host, and the whole header is replaced (HN 2026-08-10, C34) | confirmed, both sides | 10-swap-curl.txt: 204 on host.docker.internal:18080 and 000 on gateway.docker.internal:18080, while 10-receiver.log shows the swap with and without Bearer, and in X-Demo |
| outbound TCP is blocked unless a rule allows it (docs, Default security posture) | confirmed | 09-blocked.txt: 403, and 09-check-verbose.json: "deny_kind": "implicit" |
| each sandbox has its own Docker Engine with no path to the host daemon (docs, Security model) | confirmed in part | 04-guest.txt: Docker Engine 29.8.1 server inside, user agent in group docker, and no probe for a host path was run |
--clone commits reach the host through sandbox-<name> (help, sbx create) | confirmed | 08-clone-host.txt: git fetch sandbox-m101-clone brought 81e11df from sandbox, and 08-clone-commit.txt: a push to /run/sandbox/source is rejected |
| the guest uses 16 KiB pages on Apple silicon (blog 2026-05-26, C45) | confirmed | 04-guest.txt: getconf PAGESIZE prints 16384 |
the proxy is gateway.docker.internal:3128 (issue #12, C26) | confirmed | 04-env.txt: HTTPS_PROXY=http://gateway.docker.internal:3128, and PROXY_CA_CERT_B64 set |
| HTTPS is intercepted and re-signed (issue #12, HN 2026-08-10) | not checked | 09-allowed.txt shows the CONNECT tunnel and a cloudflare reply, and no certificate chain was read |
| one MCP gateway endpoint per sandbox (docs, Architecture) | confirmed | 11-static-inside.txt: MCP_GATEWAY_URL=http://mcp-gateway.docker.internal/mcp, and 11-gateway-tools-static.json: ask_wiki_question |
27 toolset types, and transfer_task is not one of them (schema, C56) | confirmed | 16-toolsets.txt: 27 rows, neither implicit name |
the sbx kit commands are v1 and v2 tooling (C13) | confirmed | 13-kit-v3-validate.txt: "is a v3 source kit and this load path has no kit builder configured", and 12-validate.txt: VALID |
a kit signature verifies with sbx kit sign and verify (docs, Build and distribute kits) | not checked | no sign or verify step was recorded, only 13-kit-builder-status.txt |
| a local model runs with no key (docs, Use local and hosted models) | confirmed | 25-doctor.txt: every provider credential not set, Docker Model Runner reachable with docker.io/ai/qwen3:4b, and 25-run-dmr.txt answers Hello live. 18-cassette-head.txt shows the recorded requests going to localhost:12434, and 27-inside-run.txt answers from inside the VM. The 8B ai/qwen3:latest failed to pull (25-model-pull-latest.txt) |
| local use needs a Docker sign-in (docs, FAQ, disputed in HN 2026-08-10 and issue #321, C15) | confirmed in part | 02-diagnose.txt lists Authentication as a check, the kit's prerequisites include sbx login, and help-sbx-cloud.md notes a TLS attempt to login.docker.com on every --help |
sbx policy approval is not a command (the v0.47.0 help tree, C16) | unverified | 09-blocked.txt: the 403 body says "Review and respond with: sbx policy approval ls", and no capture ran that command |
| the VMM is libkrun (talk 2026-01-14, HN 2026-08-10, C4) | unverified | 00-sbx-version.json names no runtime, and 04-guest.txt shows kernel 7.0.14 and nothing more |
| a sandbox starts in tens of milliseconds (talk 2026-02-10, C29) | not checked | the timing runs planned as K35 were not recorded |
| an allowed host can carry data out (HN 2026-08-10, talk 2026-04-07) | disputed | both sides are printed in the proxy section, and no capture tested it |
| a microVM HTTP API, a Kubernetes runtime, Warp Oz (blog 2026-05-26, blog 2026-08-21, talk 2026-03-31) | unverified | no Docker page confirms any of them (C105, C106) |
| an independent audit of the boundary exists | none found | the podcast of 2026-09-26 says none exists, and the corpus has none (T24) |
sbx ls hangs on macOS (#163), Windows start fails (#350) | not reproduced | 99-final-state.txt: sbx ls answered at the end of the run |
| a sandbox stops itself after the last session ends (not in the docs) | observed | 04-auto-stop.txt: "auto-stop grace period expired, stopping runtime" |
sbx diagnose, the only self-check
sbx diagnose: the one command that checks an installation, in the four groups that the captured output shows: Installation, Platform, Storage, and Connection. It takes --json, --output github-issue for a report to paste into an issue, and --upload to send diagnostics to Docker support.
Platform
✓ Virtualization — supported
kern.hv_support is 1
✓ mkfs.erofs — found
/opt/homebrew/Caskroom/sbx/0.47.0/Sbx.app/Contents/libexec/mkfs.erofs, default block size <n> bytes, guest kernel page size <n> bytes
…
Connection
✓ Version match — v0.47.0
✓ Socket — responsive
✓ SSH client config — not configured
✓ Authentication — authenticated
─────────────────────────────────────────
13 passedAll 13 checks passed, and the JSON form in 02-diagnose.json carries the same rows with a summary of pass, warn, fail, and skip counts. The Platform group is where the microVM boundary section reads the hypervisor and the page size. sbx --cloud diagnose runs a different set, sign-in, the cloud API, and account access, and needs no daemon.
kit-tck, not run in this edition
kit-tck: the conformance suite of the Sandbox Kit Specification v3, with two independent halves, one for a published kit artifact and one for a runtime. The conformance page of the specification repository describes both (our source record). kit-tck validate <reference> judges a published artifact against the publishing and OCI layout rules, and the BuildKit frontend runs the same checks before it exports. kit-tck runtime --adapter <path> drives an adapter, an executable with verbs such as capabilities, create, exec, stop, start, recreate, and rm.
The suite judges what the runtime does through those verbs. An adapter exits 2 when it refuses a request by policy, and any other non-zero code is a failure. A runtime that cannot provide a required capability must therefore refuse the kit.
task tck:kit REF=docker.io/me/sbx-kit-gh:1.0.0 # is this artifact a conforming Kit?
task tck:runtime ADAPTER=./my-adapter # does this runtime behave as the pages require?
…
kit-tck validate docker.io/me/sbx-kit-gh:1.0.0 --verbose
kit-tck validate docker.io/me/sbx-kit-gh:1.0.0 --format jsonReleased kit-tck binaries are attached to each GitHub release of the specification for Linux, macOS, and Windows. kit-tck inspect reads a kit's descriptor and recipe without judging it. The suite places three known values in the adapter's environment, KIT_TCK_HOST_SENTINEL, KIT_TCK_BOUND_SECRET, and KIT_TCK_SKILL_NAME. A leak of host environment or of a bound secret is then visible.
This edition did not run it. The capture kit built a v3 artifact and pushed it to a local registry (28-buildx.txt, 28-manifest.json), but no kit-tck step ran against it.
The agent regression check
For agent runs, the planned check is docker-agent sessions diff --fail-on-divergence, which compares the tool calls of two recorded sessions, not the prose of the assistant. It stops at the first divergence. The capture kit ran it on recorded sessions (21-sessions-diff.txt). Two replays of one run are identical across five turns, and a run that called shell first diverges at turn 0 and exits 1. A relative reference such as -1 needs -- before it, or the parser reads it as a flag. The sessions section explains the session store.
Docker Sandboxes (sbx) and Docker Agent (docker-agent) sbx 0.47.0, docker-agent 1.149.0 · bf4169c · 2026-10-07 · Edition 2026.10