Repository navigation
feat(release): publish the Claude Code agent's image - #288
Merged
Merged
Conversation
…mages The release workflow now publishes ghcr.io/scaleapi/agentenv-claude-code:src-<hex>, for linux/amd64 and linux/arm64, built from the agents bundle's claude-code folder, Claude Code's CLI included. It goes through the jobs that publish the infra images: built on a runner of each platform, checked with `claude --version` and an import of the agent's server, tagged as one multi-platform image, and recorded in the wheel and the release notes. Dependabot watches its digest-pinned bases. A run doesn't use it yet; that follows in core. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…lls is on PyPI The agent's requirements.txt is pinned to the release's agentenv-framework-protocol, and the pin is one of the image's sources, so its tag changes every release and its build needs that protocol on PyPI. The infra images are still published before the protocol; new agent-build and agent-publish jobs, the infra jobs' steps on the agents' list, run once the protocol is published, and the record, and so agentenv-framework, waits for them. Every job that reads the shipped bundles' folders (plan, both builds, record, framework) first runs shipped_bundles.py pin, which replaces the framework job's sed loop, so an image's tag, its build and the wheel all see the same sources. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This was referenced Oct 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why. Claude Code is the default agent. A remote agent deploy takes 56–63 s, and 51–58 s of that is building its image in the VM, on every run. This is the first of two PRs that let a deploy pull a published image instead, the way #277 does for the infra images. This one publishes the image. The next one registers it by digest when a run uses the shipped agent, with the build as the fallback.
Change
published_images.AGENT_IMAGESaddsagentenv-claude-code, built fromsrc/agent_env/agents/agents/claude-code/Dockerfilewith its folder as the context.bootstrap.PUBLISHED_IMAGESincludes it, so the wheel record and the release notes cover it.requirements.txtto itsagentenv-framework-protocolversion. That pin is one of the image's sources, so the image's tag changes every release, and its build needs that protocol version on PyPI. So:infra-planlists the missing infra images and the missing agent images separately (infra_images.py plan --only infra|agents).protocol, as before, andprotocolnow waits only for them.agent-buildandagent-publishjobs run onceprotocolis on PyPI. When the workflow is run by hand, they run once main's CI passes. They run the same steps asinfra-buildandinfra-publish, on the agents' list, and a test keeps the two pairs equal.infra-recordwaits for all four image jobs, andframeworkstill waits for the record.shipped_bundles.py pinreplaces the framework job's sed loop. It uses only the standard library, so the jobs that push images can run it.protocol.claude --versionandpython -c "import a2a_server"in the image.infra_build.py's stdlibIMAGEStable lists the image too. Its existing test keeps that table equal to the published list.nodeandpythonbases are already pinned by digest. The base-pin test from fix(env): pin the infra images' base images by digest, and let Dependabot bump them #283 now covers this image too.Costs of building after
protocolprotocolandframework. That adds one more image to GHCR per release.Publishing Claude Code's CLI is a deliberate decision. The image holds Anthropic's
claudenative build, under its Commercial Terms, and until now the image was only ever built where it ran. The maintainers decided to publish it, CLI included. The alternative was publishing everything except the CLI and downloading the CLI from Anthropic at container start.After merge
agentenv-claude-codepackage. Its access settings need the same lockdown as the other five: inherited repo access off, and Actions access for this repo only. The release'spublicstep warns if it isn't public.CLAUDE_CODE_VERSION. Changing it changes the sources, and the next release rebuilds the image as it does every release.Verified
shipped_bundles.py pinrewrites the three shipped requirements files to0.1.358, the same lines the sed loop wrote. It changes onlyagentenv-claude-code's tag (src-01eb123e…tosrc-a9de08bf…); the other five tags don't change.src-a9de08bf…, which is the tag an install computes.agentenv-framework-protocol0.1.358 installed.🤖 Generated with Claude Code


Confidence Score: 5/5
The PR appears safe to merge.Summary
This PR adds the Claude Code image to release publication, including checks, recorded digests, and release notes.
Diagram
%%{init: {'theme': 'neutral'}}%% flowchart TD CI[Main CI passes] --> Infra[Build and publish missing infra images] Infra --> Protocol[Publish protocol] Protocol --> Agent[Build and publish missing agent images] Agent --> Record[Record all image digests] Record --> Wheel[Build and publish framework wheel] Wheel --> Release[Create GitHub release]Reviews (2) · Last reviewed commit: "fix(release): build the Claude Code imag..." · Reviewed by Greptile