Skip to content

feat: add claude ACP sandbox target - #2189

Merged
EItanya merged 7 commits into
kagent-dev:mainfrom
the-mentor:feat/claude-acp-sandbox-target
Jul 10, 2026
Merged

EItanya merged 7 commits into
kagent-dev:mainfrom
the-mentor:feat/claude-acp-sandbox-target

Conversation

@the-mentor

@the-mentor the-mentor commented Jul 9, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Adds a claude target to docker/acp-sandbox/Dockerfile using @agentclientprotocol/[email protected] (wraps @anthropic-ai/claude-agent-sdk) on top of the node-base stage (Node ≥22 required)
  • Unlike the openclaw target, no sandbox-local gateway is needed — claude-agent-acp speaks ACP over stdio directly, so the shim runs it as its child: CMD ["--", "claude-agent-acp"]
  • Wires build-acp-sandbox-claude into the Makefile and adds acp-sandbox-claude to the build matrix in both ci.yaml and tag.yaml
  • Documents the full image family (including Claude) in docker/acp-sandbox/README.md

ACP handshake status

Verified locally at v0.58.1: initialize returns protocolVersion: 1, agentInfo.version: "0.58.1", authMethods: []. Authentication is via ANTHROPIC_API_KEY injected at runtime — no separate authenticate step.

Still to verify: full session/prompt round-trip reaches the model, and the in-memory session model holds across bridge reconnects.

Test plan

  • CI builds and pushes acp-sandbox-claude image successfully
  • Smoke test: docker run --rm -p 9000:9000 -e ANTHROPIC_API_KEY=<key> kagent/acp-sandbox-claude + websocat -1 ws://localhost:9000/acp → initialize succeeds
  • make build-acp-sandbox-claude works locally
  • make build-acp-sandbox now includes the claude target

🤖 Generated with Claude Code

the-mentor and others added 4 commits July 9, 2026 16:29
The initialize handshake round-trips against the built image
(protocolVersion 1, authMethods empty → env-key auth, no separate
authenticate step). Narrows the open item to the full prompt
round-trip and reconnect behavior.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Signed-off-by: Avri Chen-Roth <[email protected]>
Add the claude target to the CI build matrix (ci.yaml) and the release
push matrix (tag.yaml), plus the supporting Makefile pieces:
build-acp-sandbox-claude target, image-name/IMG vars, print-images
echo, and the build-acp-sandbox aggregate dependency.

Scope is the standalone image only — not wired into build-controller
or the digest-embedding (that is harness-backend integration, tracked
separately).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Signed-off-by: Avri Chen-Roth <[email protected]>
@the-mentor
the-mentor force-pushed the feat/claude-acp-sandbox-target branch from 008cfa3 to aa67df4 Compare July 9, 2026 13:29
@github-actions github-actions Bot added the enhancement New feature or request label Jul 9, 2026
- Add missing "from another shell" instruction to the claude smoke-test
  block (consistent with the hermes example above it)
- Add note that a successful initialize handshake does not confirm
  end-to-end prompt processing
- Clarify table entry: claude-agent-acp speaks to the shim over stdio;
  the shim still exposes ws://0.0.0.0:9000/acp externally

Signed-off-by: Avri Chen-Roth <[email protected]>
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Jul 9, 2026
@Prefix

Prefix commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

+1 would love to see this

@the-mentor
the-mentor marked this pull request as ready for review July 10, 2026 06:18
Copilot AI review requested due to automatic review settings July 10, 2026 06:18

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new ACP sandbox image target for Anthropic Claude by introducing a claude Docker build stage that runs claude-agent-acp under the existing acp-shim entrypoint, and wires the new image into local builds and CI/tag workflows.

Changes:

  • Added claude target to docker/acp-sandbox/Dockerfile that installs @agentclientprotocol/[email protected] and runs it as the shim child process.
  • Updated Makefile to build/push acp-sandbox-claude and include it in the build-acp-sandbox aggregate target and image-version output.
  • Updated CI/tag workflows and docker/acp-sandbox/README.md to include the new image target and usage notes.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
Makefile Adds image vars + build-acp-sandbox-claude target and includes it in aggregate build targets/output.
docker/acp-sandbox/README.md Documents the new claude target and runtime requirements (ANTHROPIC_API_KEY) plus smoke-test steps.
docker/acp-sandbox/Dockerfile Introduces claude stage built on node-base that runs claude-agent-acp via the shim.
.github/workflows/tag.yaml Adds acp-sandbox-claude to the release build matrix.
.github/workflows/ci.yaml Adds acp-sandbox-claude to the CI build matrix.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread docker/acp-sandbox/README.md Resolved
Co-authored-by: Copilot Autofix powered by AI <[email protected]>
Signed-off-by: Avri Chen-Roth <[email protected]>
@EItanya
EItanya merged commit 22208d1 into kagent-dev:main Jul 10, 2026
31 checks passed
@EItanya

EItanya commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Thanks so much for the contribution, are you planning on adding support for using this in as well?

@the-mentor

Copy link
Copy Markdown
Contributor Author

@EItanya yes I'm planning on working on it next.

@genaray

genaray commented Sep 15, 2026

Copy link
Copy Markdown

What about copilot, opencode, codex and so on? I would love to see them aswell

social4hyq pushed a commit to social4hyq/homebrew-core that referenced this pull request Sep 20, 2026
kagent 0.10.0

Created-by: HarmonybrewBot
Commit-by: HarmonybrewBot
Merged-by: HarmonybrewBot
Description: Created by `brew bump`

---

Created with `brew bump-formula-pr`.<details>
  <summary>release notes</summary>
  <pre><!-- Release notes generated using configuration in .github/release.yml at v0.10.0 -->

## What's Changed
### Features
* feat(streaming): configurable nginx, controller, and UI inactivity ti… by @yanivmn in kagent-dev/kagent#1973
* feat(helm): add controller service annotations by @anthonyhaussman in kagent-dev/kagent#2088
* feat: enable sharing of chat sessions by @onematchfox in kagent-dev/kagent#1935
* feat: substrate support for BYO and python runtimes for SandboxAgent CR by @jmhbh in kagent-dev/kagent#2043
* feat(substrate): bump agent substrate to 0.0.7 by @supreme-gg-gg in kagent-dev/kagent#2109
* feat(substrate): bump agent substrate to 0.0.8 by @jjamroga in kagent-dev/kagent#2140
* feat(helm/kagent): support deployment annotations by @anthonyhaussman in kagent-dev/kagent#2143
* feat: add nodeSelector support to agent helm charts by @the-mentor in kagent-dev/kagent#2145
* feat: expose icon, provider, documentation URL and version on agent A2A card by @QuentinBisson in kagent-dev/kagent#2188
* feat: add claude ACP sandbox target by @the-mentor in kagent-dev/kagent#2189
* feat(sandbox-agents): Store session state in `durableDir` volume for declarative sandbox agents by @jmhbh in kagent-dev/kagent#2171
* feat(helm): add UI HTTPRoute by @younsl in kagent-dev/kagent#2165
* feat(helm): bump bundled oauth2-proxy subchart to ~10.7.0 by @elihai-risk in kagent-dev/kagent#2254
* feat: default nodeSelector for agent deployments (--default-agent-node-selector) by @elihai-risk in kagent-dev/kagent#2259
* feat(helm): add podLabels for controller and UI pod templates by @elihai-risk in kagent-dev/kagent#2237
* feat(helm): add extraObjects for arbitrary manifests by @younsl in kagent-dev/kagent#2174
* feat(ui-test): Playwright ui tests foundation stage 0 by @cjlg-soloio in kagent-dev/kagent#2262
* feat: allow read-only shares to read A2A tasks by @QuentinBisson in kagent-dev/kagent#2191
* feat(controller): make Go (ADK) runtime agent image independently configurable by @QuentinBisson in kagent-dev/kagent#2021
* feat(helm): allow custom annotations on the default ModelConfig by @marians in kagent-dev/kagent#2201
* feat(ui-test): Playwright UI E2E suite — helpers + feature flows (stage 2) by @cjlg-soloio in kagent-dev/kagent#2264
* feat: serve A2A ListTasks from the task store by @QuentinBisson in kagent-dev/kagent#2187
* feat(models): add maxCompletionTokens for OpenAI by @anthonytwh in kagent-dev/kagent#2175
* feat(models): wire maxOutputTokens for native Gemini and Vertex by @anthonytwh in kagent-dev/kagent#2147
* feat: add envFrom support to agent deployment spec by @uncycler in kagent-dev/kagent#2321
* feat: add native AWS Bedrock Guardrails support to ModelConfig by @sanskar-singh-2403 in kagent-dev/kagent#2323
* feat(bedrock): configurable Bedrock read/connect timeout by @go-faustino in kagent-dev/kagent#2223
* feat: add deploymentAnnotations to agent deployment spec by @anthonyhaussman in kagent-dev/kagent#2359
* feat(helm/kagent): allow disabling default modelconfig by @anthonyhaussman in kagent-dev/kagent#2142
* feat(sts): send RFC 8707 resource and audience on token exchange by @QuentinBisson in kagent-dev/kagent#2106
* feat(sts): send RFC 8707 resource and audience on token exchange (Python) by @QuentinBisson in kagent-dev/kagent#2107
* Backport of 2407 (pg connection) to 0.10.x release by @supreme-gg-gg in kagent-dev/kagent#2399
* Backport 2409 (db session cleanup) to 0.10.x release by @supreme-gg-gg in kagent-dev/kagent#2403
* Backport of 2408 (s3 skills) to 0.10.x release by @supreme-gg-gg in kagent-dev/kagent#2405
* feat: configurable refresh interval for tool server controllers by @supreme-gg-gg in kagent-dev/kagent#2480
* feat: support file upload in agent chat by @supreme-gg-gg in kagent-dev/kagent#2429
### Bug Fixes
* fix(ui): chat interface overflows viewport causing input to be hidden below fold by @onematchfox in kagent-dev/kagent#2081
* fix(ui): avoid false stale chat send guard by @erauner12 in kagent-dev/kagent#2034
* fix(go-adk): extract system prompt from genai.GenerateContentConfig in Ollama and Bedrock model providers by @supreme-gg-gg in kagent-dev/kagent#2118
* fix(helm): support omitting image.registry in grafana-mcp chart by @michaelspinks in kagent-dev/kagent#2125
* fix(helm): support omitting image.registry in querydoc chart by @michaelspinks in kagent-dev/kagent#2124
* fix(security): patch CRITICAL/HIGH CVEs in golang-adk-full and app images by @jsonmp-k8 in kagent-dev/kagent#2133
* fix(go-adk): openai embeddings generation by @supreme-gg-gg in kagent-dev/kagent#2132
* fix(helm): omit empty repository segment in bundled image path by @michaelspinks in kagent-dev/kagent#2120
* fix: intermittent Postgres deadlock for concurrent memory searches by @supreme-gg-gg in kagent-dev/kagent#2146
* fix(deps): bump google-adk to 1.32.0 for Anthropic thinking blocks by @anxkhn in kagent-dev/kagent#2172
* fix: fix typos in part_converter comments by @mesutoezdil in kagent-dev/kagent#2195
* fix(adk): annotate serialize_metadata_value as str | dict by @anxkhn in kagent-dev/kagent#2173
* fix(ui): fix model name editing on the model config form by @Valyrian-Code in kagent-dev/kagent#1979
* fix: correct package comment in v1alpha2 groupversion_info by @mesutoezdil in kagent-dev/kagent#2183
* fix(crewai): unwrap Part before DataPart check so structured inputs are used by @anxkhn in kagent-dev/kagent#2231
* fix(helm): expose nodeSelector and tolerations for kagent-tools subchart by @the-mentor in kagent-dev/kagent#2213
* fix(helm): make the cluster DNS domain configurable by @shekhargit1912 in kagent-dev/kagent#2209
* fix: parse migration filenames the same way golang-migrate does by @mesutoezdil in kagent-dev/kagent#2194
* fix: build sandbox runtime outside QEMU emulation by @peterj in kagent-dev/kagent#2299
* fix: set kgateway.dev/a2a as appProtoco for BYO agents by @supreme-gg-gg in kagent-dev/kagent#2305
* fix(db): normalize agent name in memory vector search by @mesutoezdil in kagent-dev/kagent#2307
* fix(adk/bedrock): coerce nil tool-call args to empty object by @go-faustino in kagent-dev/kagent#2222
* fix: correct webhook typo in CLI help text by @tziyon31 in kagent-dev/kagent#2203
* fix(build): use AZURE_OPENAI_API_KEY env var name consistently by @mesutoezdil in kagent-dev/kagent#2310
* fix(security): scope task get, create, and delete to the owner by @mesutoezdil in kagent-dev/kagent#2265
* fix(adk): keep token refresh loop alive after a failed read by @mesutoezdil in kagent-dev/kagent#2330
* fix(acp-shim): drain child stdout during terminate to avoid teardown deadlock by @tomsen02 in kagent-dev/kagent#2338
* fix(adk): keep full session state when num_recent_events is set by @mesutoezdil in kagent-dev/kagent#2329
* fix(controller): wire up SessionSharesHandler in NewHandlers (#2363) by @onematchfox in kagent-dev/kagent#2420
* fix: ensure API key passthrough works for OpenAI embedding models by @onematchfox in kagent-dev/kagent#2494
* fix(adk): validate ask_user questions by @erauner12 in kagent-dev/kagent#2486
* Backport fix(golang-adk): resolve user identity from A2A call context to 0.10.x by @buravc in kagent-dev/kagent#2507
* fix(a2a): serve exact task reads from the persistent store by @erauner12 in kagent-dev/kagent#2484
* fix(ui): preserve post-login redirect target through `oauth2-proxy` sign-in by @onematchfox in kagent-dev/kagent#2532
### Documentation
* docs: fix duplicate descriptions and broken link in README by @mesutoezdil in kagent-dev/kagent#2068
* docs: fix typos and errors in component READMEs by @mesutoezdil in kagent-dev/kagent#2070
* docs: fix typos and list formatting in contributor docs by @mesutoezdil in kagent-dev/kagent#2069
* docs: replace outdated AutoGen reference in SECURITY.md by @mesutoezdil in kagent-dev/kagent#2110
* docs(python): fix kagent-langgraph README import to kagent.langgraph by @anxkhn in kagent-dev/kagent#2167
* docs(python): fix KAgentSession import path in kagent-openai README by @anxkhn in kagent-dev/kagent#2163
* docs: fix stale references and 

See merge request: Harmonybrew/homebrew-core!18335
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants