Skip to content

hookprobe: the lock pins the agent runtime, and the image stops installing a second Claude CLI that never ran - #40

Merged
itswl merged 1 commit into
mainfrom
probe-cli-from-the-lock
Nov 2, 2026
Merged

itswl merged 1 commit into
mainfrom
probe-cli-from-the-lock

Conversation

@itswl

@itswl itswl commented Nov 2, 2026

Copy link
Copy Markdown
Owner

The investigator's image stops installing the Claude Code CLI from npm, and the CLAUDE_CODE_VERSION build argument goes with it. The CLI that runs an investigation is the one inside the claude-agent-sdk wheel, so the claude-agent-sdk line in the investigator's lock is the agent-runtime pin, and Dependabot proposes it since #35. Node stays for MCP servers started with npx.

Why. The SDK runs its bundled binary before anything on PATH, and nothing here sets cli_path. Read inside the images:

image CLI the engine runs claude on PATH size, local build
published 0.9.2 2.1.235, bundled 2.1.259, never ran
main after #39 2.1.316, bundled 2.1.259, never ran 1.69 GB
this branch 2.1.316, bundled none 1.17 GB

The pin the Dockerfile documented had decided nothing since the SDK began bundling the CLI, and it was still read as the answer: the 2026-09-03 bump to 2.1.259 for a gateway's model ids changed nothing that ran. Pointing the engine at the npm CLI instead would keep a version Dependabot cannot see and run a CLI older than the one each SDK release ships with. The operator chose the lock.

Read back from this branch's image. The bundled CLI is a native executable and needs no Node; node and npx are still present. The real service completed a scripted turn against a recording stand-in for the model API, on an internal Docker network, under a third-party model name: an allowed read ran, the guard refused a write into results/ and no file appeared, and prompts stay verbatim. CI's docker job builds and boots the image without a key.

Also changed. Dependabot's comment no longer lists the CLI among the manual versions. The prod compose's memory note no longer calls the CLI a node process. A decision note records the choice, and the earlier note from the same day, which left it open, now points at it.

claude --version inside the image now fails; claude_agent_sdk/_cli_version.py names the CLI instead. Nothing is deployed, and the image change ships at the next release.

Gate: STACK GATE GREEN locally; CI read back before merging.

…ng a second Claude CLI that never ran

The SDK runs the CLI bundled in its wheel before anything on PATH, and nothing
here sets cli_path, so the npm CLI this Dockerfile pinned with
CLAUDE_CODE_VERSION never ran: the published 0.9.2 image ran the SDK's 2.1.235
while 2.1.259 sat unused on PATH. The build argument and the npm install go;
the claude-agent-sdk line in requirements.lock is the pin, and Dependabot
proposes it. Node stays for MCP servers started with npx.

Read back from a local build: the engine resolves the bundled 2.1.316, nothing
named claude is on PATH, node and npx are present, and the image is 1.17 GB
where the same lock built 1.69 GB. The real service in that image completed a
scripted turn against a recording stand-in model under a third-party model
name, with the guard refusing a protected write.

Dependabot's comment and the prod compose's memory note are corrected. A new
decision note records the choice, and the earlier note from the same day,
which left it open, now points at it.
@itswl
itswl merged commit c4c4518 into main Nov 2, 2026
8 checks passed
@itswl
itswl deleted the probe-cli-from-the-lock branch November 2, 2026 13:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant