Sandbox changelog
This page is rendered directly from
images/sandbox/CHANGELOG.md,
the changelog shipped with the image package.
Next release
Section titled “Next release”Node.js 26.12.1 security runtime.
The Sandbox image moves from Node.js 26.12.0 to 26.12.1, so every variant ships the runtime from the October 21, 2026 Node.js security release. The hono package bundled with the embedded SDK is also patched. The image's Agent runtimes, image contract, and documented workflows are unchanged.
- Patched Node.js runtime. The Dockerfile's build stage is pinned to the
node:26-bookworm-slimdigest for 26.12.1. The runtime stage copies Node.js from that stage, so every variant (full,claude,codex,copilot,glm,opencode, andpi) gets the patched runtime. The release fixes four high-severity issues: an out-of-bounds write in the Brotli decoder that allows remote code execution (CVE-2026-111497), two TLS certificate hostname-verification bypasses (CVE-2026-105483, CVE-2026-106069), anddns.resolvecutting names off at a NUL character (CVE-2026-105482). - Patched
hono. The image lockfile moveshonofrom 4.13.7 to 4.13.13 for GHSA-5r4p-p66f-jhc7, whereserveStaticdecodes request paths twice and lets requests bypass middleware on static paths.@modelcontextprotocol/sdkbringshonointo the image through the embedded SDK. - Smoke check asserts the Node.js version. The image smoke check now fails unless the image's
node --versionmatches the release pinned in the repository's.nvmrc. A base-image digest that drifts from that release can no longer pass CI or publication.
Commits
Section titled “Commits”build(root): update node 26 runtime to 26.12.1fix(root): update hono for ghsa-5r4p-p66f-jhc7test(sandbox): assert the image node version
Embedded SDK 0.9.1.
The Sandbox image now embeds AML SDK 0.9.1 in place of 0.9.0. Image-hosted OpenCode workflows keep their native permission configuration while AML denials remain authoritative, and staged Includes and Skill packages stay readable when native external-directory access is denied. The image's installed Agent runtimes, image contract, and documented workflows are otherwise unchanged.
- OpenCode native permissions are preserved. The embedded SDK folds top-level and
agent.amltoolsandpermissionsettings into OpenCode's permission rules, including scalar permission strings, granular rules,external_directorymaps, and the legacywrite/patchaliases. Other nativeagent.amlfields are retained and OpenCode's coding prompt stays intact, while AML's portable denials are applied last under OpenCode's last-rule-wins behavior. Empty nativetoolsmaps prevent a wildcard or alias from overriding an AMLeditdenial. See OpenCode Agent. - Staged Includes and Skills remain readable under external deny. Staged inputs are associated with their
AgentRequestthrough a non-enumerableSymbol.forregistry, adding no publicAgentRequestfield. The OpenCode provider uses that association to allow only the invocation-private directory holding each staged<Include />and each staged<Skill />package whenpermission.external_directoryisdeny. Unrelated paths remain denied, including files outside a staged Skill package, while JavaScript Tools and structured output continue to work in the same run. See Include reference and Skill reference. - Release scope and history. The embedded SDK release also adds CI coverage for the real OpenCode permission path against the pinned binary. This entry contains no other dependency changes, so the image's installed Agent runtimes and image contract remain unchanged. See SDK changelog and Sandbox images.
Commits
Section titled “Commits”build(sandbox): embed sdk 0.9.1(2ffd83f)
Embedded AML SDK 0.9.0.
The Sandbox image now embeds AML SDK 0.9.0, replacing 0.8.1. Image-hosted workflows gain the built-in Claude Agent provider, ACP failure diagnostics that survive to the caller, structured-output repair that runs only after a normal completion, and per-prompt usage in run summaries. The image's installed Agent runtimes, image contract, and documented workflows are unchanged.
- Claude Agent provider available to image-hosted workflows. The embedded SDK exports the built-in
claudeAgent()provider, so workflows inside the image can launch the maintainedclaude-agent-acpadapter through the shared ACP lifecycle alongside Codex, Copilot, GLM, OpenCode, and Pi; the image already installs@agentclientprotocol/claude-agent-acp0.91.0. SDK 0.9.0 also addsAcpAgentLaunch.sessionMeta, letting custom ACP profiles forward vendor-defined_metaunchanged withsession/new. See Claude Agent, Provider authoring, and Compatibility. - ACP failures now preserve received output. The exported
AcpAgentErrorretains the ACPsessionIdand every prompt attempt in execution order, including text and messages received before a failure and thestopReasononce a prompt completed, while the original protocol or submission error stays as its cause. The structured-output repair prompt now runs only after a normalend_turn, so refusal, cancellation, and exhausted limits never trigger another prompt, and mismatched session-configuration values list the advertised values. See Error handling, Observability, and Runtime reference. - Usage from every completed ACP prompt. Run summaries produced inside the image preserve each completed ACP prompt's provider usage exactly once, including a structured-output repair prompt, and keep completed samples even when a later repair fails or is cancelled. Providers without prompt usage fall back to the turn's usage attribute, and missing usage adds no entry. See Observability.
- Refreshed SDK dependency baselines. Embedding SDK 0.9.0 also advances the clients bundled inside the image: ACP SDK 1.3.0 to 1.8.0, MCP SDK to 1.32.1, AWS S3 client to 3.1152.0, Daytona to 0.224.1, Modal to 0.11.0, and OpenCode SDK to 1.19.0, plus routine library bumps for execa, globby, hookable, p-limit, typebox, and yaml. See Sandbox images and SDK changelog.
Commits
Section titled “Commits”build(sandbox): embed sdk 0.9.0(5e0dadb)
Base image refresh and release-tooling dependency patch.
The Sandbox image is rebuilt on a freshly pinned Debian Bookworm runtime base and pins its release toolchain's transitive basic-ftp client to a patched version. Neither change alters the embedded Agent runtimes, image behavior, or documented workflows.
- Refreshed Debian Bookworm runtime base. The sandbox Dockerfile pins its runtime stage to a newer
debian:bookworm-slimdigest, moving it off the previous pin. Because every variant image (full,codex,copilot,glm,opencode, andpi) builds from that stage, each is rebuilt on the current base packages. The Node.js build stage and the installed Agent/tooling versions are untouched, so existing deployments see no runtime or interface change. - Patched transitive
basic-ftpin the release toolchain. The image package now declares an npmoverridesentry pinning the transitivebasic-ftpFTP client to patched 6.2.3, replacing the 5.3.1 resolved throughget-uriand the proxy-agent chain. That dependency belongs to the image's dev/release tooling and is excluded from the published image (npm ci --omit=dev), so the shipped runtime is unchanged while the stale transitive client is patched for builds and releases.
Commits
Section titled “Commits”fix(sandbox): override basic-ftp to patched 6.2.3(0595c98)build(sandbox): refresh debian bookworm base image(e63f4b5)
OpenCode runtime bump and patched transitive locks.
The Sandbox image upgrades its embedded OpenCode runtime from 1.18.18 to 1.18.30 and advances a patched transitive hono dependency in its locked dependency tree. The bump carries the OpenCode fix line forward across the full and opencode variants as well as the repository's pinned integration baseline and related docs, while the lock change needs no direct dependency or behavioral adjustment.
- OpenCode 1.18.18 → 1.18.30. The full and opencode image variants now embed
opencode-ai1.18.30. The repository's pinned OpenCode integration baseline is bumped to match, and the getting-started guide, the OpenCode provider page, and the image variant table are updated so the documented executable version matches what ships in the image. - Patched transitive hono lock. The sandbox image's lockfile advances the transitive hono HTTP library 4.13.2 → 4.13.7 to pull in upstream patches, with no direct dependency or behavioral change required.
Commits
Section titled “Commits”build(sandbox): upgrade opencode to 1.18.30(9c3b28e)build(sandbox): update patched hono lock(facfe37)
Dependency security fixes.
- Patch vulnerable transitive dependencies. The sandbox image's locked dependency tree now uses patched versions of the vulnerable transitive utilities
fast-uriandqs, so no direct dependency, API, or behavioral change is required.fast-uriadvances 3.1.5 → 3.1.7 andqsadvances 6.15.3 → 6.16.0, both address/query-string utilities pulled in through the runtime's HTTP stack, closing known security holes in the bundled transitive tree while existing workflows run unchanged.
Commits
Section titled “Commits”fix(sandbox): update vulnerable transitive dependencies(b468b46)
Sandbox release pipeline polish.
- Releases now publish their own overview and changelog. Each release pushes
DOCKERHUB.mdas the Docker Hub repository overview through Docker Hub's metadata API, using a read/write personal access token from the caller's normal Docker configuration that is kept separate from the temporary browser login used for image publication. The token is verified before building and the pushed overview is confirmed afterward;npm run sync:description --prefix images/sandboxresynchronizes just the overview. The release-itafter:bumphook also drafts and writes the sandbox changelog entry straight intoimages/sandbox/CHANGELOG.md. - Keyless signing is gated and safely awaited. Keyless Cosign signing now waits for the maintainer to press Enter before each signature, so device-flow links are not opened until you are ready. Publication pauses once before the signing batch and Cosign's normal browser flow is restored so logins return through the local callback, with a Windows URL-handler shim under WSL to avoid File Explorer windows.
- Signing can resume without rebuilding. If signing fails after every image and smoke completed,
npm run release:sandbox -- --recover-signingresumes from the already-pushed digests without rebuilding or rerunning smoke, and accepts the matching release tag anywhere in currentmainhistory.
Commits
Section titled “Commits”feat(sandbox): sync Docker Hub overview(02b39dc)feat(sandbox): automate release changelogs(3fb9674)fix(sandbox): restore browser signing flow(5619a72)fix(sandbox): await signing confirmation safely(cbb51ee)fix(sandbox): gate keyless image signing(41d9f8a)
- Publish
full,codex,copilot,glm,opencode, andpiimages from one Dockerfile. Versioned and moving tags keep the existing unqualified image as the full variant while allowing deployments to select a smaller single-Agent runtime. - Keep Node.js and npm, Python and pip, Git, jq, AML, and the selected Agent runtime in every variant while removing general-purpose build and diagnostic packages that Agents do not require by default.
- Build and check every variant independently, run each Agent's live smoke against its pushed digest, sign every digest, and move stable aliases only after the complete matrix succeeds.
- Retain
ghcr.io/we-are-singular/aml-agent-sandbox:devas the mutable, unpruned full image built frommain. This is the first completed variant release after the interrupted 0.4.0 publication.
- Update the embedded AML runtime to CLI 0.3.2 and SDK 0.7.0.
- Bring per-Agent execution timeouts, structured-output recovery and nesting, callable JavaScript tools, explicit parallel boundaries, and application observability into image-hosted AML workflows through the updated SDK.
- Embed AML CLI 0.3.1 and SDK 0.6.0 with bare-import resolution that remains visible behind mounted Workspaces.
- Smoke deterministic AML execution from a clean Workspace without local dependencies.
- Publish stable Docker Hub images as the version and
latest, while GHCRdevtracks pushes tomain. - Rename the source and GitHub release lane to Sandbox while retaining the
aml-agent-sandboximage name.
- Establish a Debian Bookworm/glibc runtime with Node.js 26, npm, Python 3, Git, and common Agent shell/network utilities.
- Remove duplicated OpenCode payloads and Pi's unused optional interactive assets from the headless ACP runtime.
- Run as the unprivileged
amluser with writable runtime and Workspace directories. - Pin the Codex, GitHub Copilot, GLM, OpenCode, Pi, and ACP executable versions used by AML's smoke matrix.
- Add local non-root conformance checks and package/version verification.
- Validate all five AML Agent providers through the Docker Sandbox and Workspace contract.