fix: wire CLAUDE_CODE_EXECUTABLE so adapter uses pinned claude-code#447
Merged
thepagent merged 1 commit intoopenabdev:mainfrom Apr 18, 2026
Merged
Conversation
claude-agent-acp uses its bundled SDK cli.js by default, ignoring the globally installed @anthropic-ai/claude-code binary. Set CLAUDE_CODE_EXECUTABLE=/usr/local/bin/claude so the adapter actually runs the version pinned by CLAUDE_CODE_VERSION. Fixes openabdev#418
Collaborator
✅ Validated locallyBuilt
LGTM 👍 |
thepagent
approved these changes
Apr 18, 2026
brettchien
added a commit
to brettchien/openab
that referenced
this pull request
Apr 19, 2026
Before this change, `openab-claude:0.7.8-beta.7` ships: - claude-agent-acp@0.25.0 — hardcoded model list, no Opus 4.7 - claude-code@2.1.104 — knows up to Opus 4.6 only - ENV CLAUDE_CODE_EXECUTABLE=/usr/local/bin/claude (openabdev#447) With openabdev#447 making the pinned claude-code binary load-bearing, neither the adapter's availableModels nor the CLI's model resolver knows about Opus 4.7 — users get Sonnet 4.6 regardless of ANTHROPIC_MODEL=opus. This PR: - introduces `CLAUDE_AGENT_ACP_VERSION` ARG (pattern parity with `CLAUDE_CODE_VERSION` from openabdev#326/openabdev#412) - bumps adapter 0.25.0 → 0.29.2 (brings claude-agent-sdk 0.2.111+ whose availableModels includes Opus 4.7) - bumps claude-code 2.1.104 → 2.1.114 anthropics/claude-code#49512 (parallel-mkdir ENOENT race) was filed against 2.1.112 and is still OPEN but has zero comments. Inspection of the 2.1.114 install shows the CLI moved to a per-platform native binary (openabdev#2.1.113) and session state relocated from `/tmp/claude-<uid>/…/tasks/` to `$HOME/.claude/{projects,tasks}/`, so the vulnerable filesystem layout no longer exists — binary-grep for `/home-//tasks` returns 0 matches. 50 parallel `claude -p` calls as the same user (40ms stagger) produced 0/50 errors, 0 bytes stderr, and no `/tmp/claude-*` directories. Refs openabdev#326, openabdev#412, openabdev#418, openabdev#447 Closes nothing explicitly (no issue filed; repro + rationale in body). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
10 tasks
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.
Summary
Set
ENV CLAUDE_CODE_EXECUTABLE=/usr/local/bin/claudeinDockerfile.claudesoclaude-agent-acpactually uses the globally installed (and version-pinned)@anthropic-ai/claude-codebinary instead of its own bundled SDKcli.js.Problem
As documented in #418,
claude-agent-acpnever invokes the globally installed/usr/local/bin/claude. The adapter resolves its CLI path viaclaudeCliPath()which, for non-static npm installs, always falls through to the SDK-bundledcli.js. This means:CLAUDE_CODE_VERSION=2.1.104pinning in the Dockerfile has no effect on what actually runs in sessionsFix
The adapter checks
CLAUDE_CODE_EXECUTABLEenv var first (sinceclaude-agent-acp@0.6.0). Setting it to/usr/local/bin/claudemakes the pinned version load-bearing.Changes
How to verify
Then confirm the adapter uses the global binary:
Fixes #418
Discord Discussion URL: https://discord.com/channels/1490282656913559670/1495058349241405522