Repository navigation
feat(pr-verify): give the capture's driven session Bash - #13746
Conversation
The broker now takes --in-sandbox, which sibling-init.sh passes, and adds it to every driver request. Under it, the driver launches Claude Code without --restricted, so Bash is in the default tools, and sets no CLAUDE_CODE_SUBPROCESS_ENV_SCRUB. The scrub's nested PID-namespace bwrap cannot start inside the sibling sandbox (ENOSPC). The driven managed settings drop the scrub and allow Bash with defaultMode "default". This is the launch shape of probe run 42248541058 (no-scrub variant). Local drives keep --restricted and the scrub, and the outer leg, which holds the real key, keeps its scrub. Refs: #13711 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…andbox launch Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The driver dropped --restricted, and the scrub of a kept CI key, for any launch that passed --in-sandbox, so a local drive could start Claude Code with Bash beside a real credential. buildLaunch now refuses the flag unless the launch keeps an unattended ANTHROPIC_API_KEY starting with ccd-dummy-, the key the launch broker hands its driver child. A pin test keeps the driver's prefix equal to the broker's KEY_PREFIX. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review Summary: ❌ FailedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
claude-review reviewed Code-review lane: no findings. I read every hunk of all 12 changed files in the full diff. I also read the unchanged code the changed lines call: What I checked
Verification. All test results in the PR body (77/77, 104/104, 79/79, 25/25) are author-claimed. I did not run any tests: this lane has no shell. The PR says the launch shape matches the probe by construction but has not been re-measured live. Out of scope. I scoped security out of this lane because the repository runs a separate security-review lane. Whether the trust boundary is acceptable without the scrub and Spend. The driven session can now run Bash tool calls, which may lengthen capture runs and spend more of the PR_VERIFY key's prepaid API credit within the proxy's existing token cap. This is not a hold. |
|
claude-security-review reviewed Security review: PR #13746 (give the capture's driven session Bash)No security issues found. I read all 12 changed files in full. This was a full review, not blocking-only: the lane had reviewed no earlier head. critical-findings: 0 What I checked1. Who reaches the change. Pull request code reaches it. Its plugin hooks and skills run in the driven session, which now has Bash and no subprocess scrub. The new settings are in 2. Whether it widens what that code can do. It does not. Plugin hooks already ran any code they liked inside the sibling sandbox, since
The only credential inside is the broker's random 3. Whether pull request code can swap in its own driver or init script. It cannot. The driver, the broker and 4. The key-holding outer leg. It is unchanged and keeps 5. Who can turn on
Trust controls and instruction surfaces
Spend (not a finding)The driven model can now run Bash, which may use more prepaid API credit through the key proxy. That spend is still limited by the proxy's per-job token cap and was already accepted under the owner's option A. |
Closes #13711
Summary
The PR capture's driven session gets Bash, so a plugin hook that fires on Bash tool events is now driven, not only recorded. The launch shape is the one runner probe 42248541058 (job
capture (no-scrub, null, 0)) ran and passed: no--restricted, noCLAUDE_CODE_SUBPROCESS_ENV_SCRUB,permissions.defaultMode: "default"andallow: ["Bash"]. Probe evidence and decision: issuecomment-6689445063.Fix
driver.mjs: a new--in-sandboxflag launches withIN_SANDBOX_FLAGS(--strict-mcp-configonly) and skips the scrub line. Launches without the flag keep--restrictedand the scrub, since local attended drives rely on them (features/skills/invoke/README.md:37).broker.mjs: takes--in-sandboxat start and adds it to every launch, ready and log request. A request cannot set it, because the strict parse refuses it.sibling-init.shstarts the broker with it.pr-verify-capture.yml: the driven settings drop the scrub and allow Bash. The outer key-holding leg keepsCLAUDE_CODE_SUBPROCESS_ENV_SCRUB: "1"and--restricted.bwrap: Creating new namespace failed: nesting depth or /proc/sys/user/max_*_namespaces exceeded (ENOSPC), run 42247376450). With it off, Bash sees only the sandbox's dummy key (sibling-init.sh:104), while the real key stays with the key proxy. The probe's driven Bash showedsentinel_bash=0andcurl/nodeegress refused.Verification
workflow.test.mjs77/77. Driver and brokernode --test104/104,driver.test.sh79/79,broker.test.sh25/25, markdownlint clean (worker run). A new test checks that the driven settings carry no scrub and allow Bash, that the outer leg keeps the scrub, and thatsibling-init.shpasses--in-sandbox..base(main), and the PR_VERIFY key is out of promotional credit (perf(pr-verify): set the capture key proxy's token-cap from a full measured capture #13724).Related
🤖 Generated with Claude Code