feat(codex): run remote workspaces without splitting app-server#101326
feat(codex): run remote workspaces without splitting app-server#101326steipete wants to merge 1 commit into
Conversation
|
Codex review: found issues before merge. Reviewed July 7, 2026, 6:32 AM ET / 10:32 UTC. Summary PR surface: Source +1122, Tests +2051, Docs +191, Other +50. Total +3414 across 44 files. Reproducibility: not applicable. This PR adds a new experimental Codex remote-execution mode, and current main does not expose the registry-backed Review metrics: 2 noteworthy metrics.
Stored data model Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review findings
Review detailsBest possible solution: Land the preview only after maintainers accept the remote-execution security boundary and fail-closed compatibility model, with the release-owned changelog entry removed and the live Docker proof retained in PR/release-note context. Do we have a high-confidence way to reproduce the issue? Not applicable: this PR adds a new experimental Codex remote-execution mode, and current main does not expose the registry-backed Is this the best way to solve the issue? Unclear as merge-ready: the architecture matches the canonical design issue and the inspected Codex 0.142.5 stdio/Noise contract, but the best solution still requires maintainer security/product acceptance and removal of the release-owned changelog edit. Full review comments:
Overall correctness: patch is correct AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against cd5c3fc3b779. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +1122, Tests +2051, Docs +191, Other +50. Total +3414 across 44 files. View PR surface stats
Security concerns:
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
9ffc6fd to
e7f7694
Compare
e7f7694 to
e084529
Compare
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
Closes #101282
Related: #101221, #94203
AI-assisted: yes. I understand the topology, compatibility boundaries, and fail-closed behavior in this change. Agent transcript: omitted.
What Problem This Solves
Remote Codex workspaces currently require operators to split Codex app-server from Gateway. That separates lifecycle, auth, hooks, thread state, local MCP integration, and filesystem ownership across hosts while depending on Codex's experimental app-server WebSocket transport.
Why This Change Was Made
This preview keeps Gateway and its managed Codex app-server together over stdio. Only Codex filesystem/process execution moves to one authenticated registry-backed exec-server environment. This matches Codex's supported control-plane ownership while using its existing Noise-authenticated remote executor path.
The implementation:
remoteWorkspaceRoot, and one explicit environment id;This is intentionally one target, with no pool selection or failover in OpenClaw. The infrastructure remains responsible for registry availability and executor registration.
Security boundary: child-environment filtering reduces accidental credential leakage, but it is not isolation from code running as the same OS user as the exec-server. Such code can inspect the exec-server parent process. Executors therefore need a dedicated user/container/process boundary and narrowly scoped, rotatable credentials.
User Impact
Operators can keep one canonical Gateway/app-server control plane while running Codex shell and filesystem work on a different machine. The feature is opt-in under
plugins.entries.codex.config.appServer.experimental.remoteExecution; existing local stdio and explicit remote app-server configurations are unchanged.Thread resume, explicit rebind, command-driven resume/model changes, side questions, and conversation transfer now preserve the correct execution topology and history without replaying native-owned context.
Evidence
Final head:
e0845291b548d93b2bf64eae3a68ebea673afaf8, rebased onto currentorigin/mainand reduced from four follow-up commits to one commit.Full Codex Docker suite on the rebased tree: 96 files / 2,025 tests passed in four one-worker shards (601 + 355 + 366 + 703).
Exact production Dockerfile build passed, including
build:docker, CLI import guards, runtime post-build, plugin assets, package import closure, and Control UI. Runtime smoke returnedOpenClaw 2026.6.11.Live Docker user-path proof used separate Gateway/app-server and Codex 0.142.5 exec-server containers with an authenticated registry/opaque Noise relay and a real
gpt-5.5turn. Resume worked; a later turn executed in/remote-workspace; direct child-secret probes were absent; the Gateway decoy workspace remained unchanged; registry register/connect/validate occurred; encrypted relay frames contained no plaintext probe. Result: 1 passed, 1 intentionally skipped in 202.12s.A subsequent managed-account live run stopped before thread start when cloud
PreToolUsehooks were present, proving the new fail-closed managed-hook guard. The positive relay run preceded that guard; the final Docker suite covers the guard and all resulting topology/history changes.Crabbox pool run
run_10e2c67bc313: 7 focused files / 426 tests passed. The broker became unavailable for later runs, so the final complete suite, production build, and live proof used Docker as the requested fallback.oxfmt, directoxlint,git diff --check, plugin manifest parsing, changelog attribution, docs MDX validation (699 files), and docs link audit (5,754 links, 0 broken) passed.Two fresh autoreviews reported no accepted/actionable findings; the final review specifically confirmed that isolating the history-fork regression from unrelated dynamic-tool construction preserves the behavior under test.
Dependency contract checked directly at exact Codex tag
rust-v0.142.5(26de83050b20f7e0ee211b9739e52ae00ce8032a):