RFC 0020: OpenShell Worker Provider and Credential-Brokered Session Sandboxes - #55
RFC 0020: OpenShell Worker Provider and Credential-Brokered Session Sandboxes#55sallyom wants to merge 1 commit into
Conversation
Signed-off-by: sallyom <somalley@redhat.com>
|
Codex review: needs real behavior proof before merge. Reviewed August 2, 2026, 1:06 PM ET / 17:06 UTC. ClawSweeper reviewWhat this changesThe draft RFC proposes an optional OpenShell WorkerProvider that runs explicitly selected cloud sessions in credential-brokered child sandboxes. Merge readinessKeep this draft RFC open: it proposes a new optional worker-runtime and credential-boundary model that requires maintainer product and security-direction review, and its required Priority: P3 Review scores
Verification
How this fits togetherOpenClaw’s Gateway currently owns session placement, recovery, transcripts, and agent execution. The proposed OpenShell provider would move explicitly selected Cloud/OpenShell session runtimes into disposable child sandboxes while the Gateway retains session ownership and OpenShell brokers provider credentials. flowchart LR
Request[Cloud session request] --> Gateway[OpenClaw Gateway]
Gateway --> Placement[Explicit OpenShell placement]
Placement --> Delegation[Parent-bound delegation]
Delegation --> Worker[Disposable worker sandbox]
Worker --> Broker[OpenShell inference route]
Worker --> Runtime[Session runtime and tools]
Gateway --> Recovery[Transcript and recovery ownership]
Decision needed
Why: The RFC adds a new session-placement mode and explicitly leaves the final delegated API and authorization model unresolved. Choosing the permanent authority boundary, credential exposure guarantees, and compatibility contract requires maintainer intent. Before merge
Findings
Agent review detailsSecurityNone. Review metrics
Merge-risk optionsMaintainer options:
Technical reviewBest possible solution: Keep the RFC draft open, set Do we have a high-confidence way to reproduce the issue? Not applicable: this is a design RFC, not a report of broken existing behavior. It supplies a future smoke-test outline rather than a current-main defect reproduction. Is this the best way to solve the issue? Unclear: a dedicated OpenShell WorkerProvider may be a viable direction, but the RFC deliberately leaves its permanent delegation API and authorization model unresolved, so acceptance requires maintainer confirmation. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: not found in the target repository. Codex review notes: model internal, reasoning high; reviewed against af708f0ddb6f. LabelsLabel justifications:
EvidenceWhat I checked:
Likely related people:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (9 earlier review cycles; latest 8 shown)
|
Full rewrite. Same argument and same design, ~35% shorter: drops the repetition and hedging that accumulated across revisions, uses plainer language, and merges the migration, phasing, and rollback material into a single Rollout section instead of three. Adds crosslinks throughout to openclaw#58, #42026, openclaw#55, RFC 0025, the public microsoft/mxc backend docs, and the Windows Insider build that gates the primitive. Fixes two defects found while rewriting: a typo in the summary, and a capability named hostPathSharing in the Windows section that no longer matched the descriptor table after it was split into hostPathProjection and stagingChannel. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: ccc616c5-8e0a-4098-b8ef-c19695e5c27b
Fixes several factual errors, verified against microsoft/mxc at 0aaa2afa (2026-08-18). The earlier draft was written against a clone that was eight days stale, and the preview API had changed underneath it. Corrections: - Lifecycle was wrong. The real phases are provision, start, exec, stop, deprovision. The draft omitted exec and invented an attach phase the provider explicitly defers. - "Every operation is idempotent" was false and dangerous: provision mints a fresh identity on every call, so a naive retry leaks accounts. Replaced with per-operation semantics and a durable pre-provision record. - Detached execution is deferred upstream and a spawned process stays tethered to its caller, so the launcher cannot exit. It is a long-lived supervisor, not a bootstrapper, and that cost is now stated. - The caller-supplied identity bundle was removed upstream. Dropped the workloadIdentity capability and the claim built on it; appId is now described as inert forward-compatibility metadata rather than a mechanical link to package identity. - PR openclaw#55 was mischaracterized. It also contains the long-lived Gateway, and brokers model credentials so neither Gateway nor worker holds provider values, which solves a residual risk this RFC cannot. Now positioned as complementary and the better answer where available, differing by deployment context rather than by scope. - openclaw#58 proposes a launcher, it does not already build one. #42026 would make the unit of containment a live question, not a drop-in swap. - AppContainer dismissal was too glib. It is MXC's default Windows backend; the real objection is that it is an allowlist over the same token, and its universally available tier enforces filesystem policy by mutating DACLs on host paths. - The downgrade requirement was impossible as written. An older launcher cannot be taught to reject config it never knew; this needs a minimum version enforced by packaging. - Fallback no longer contradicts fail-closed: it means another provider of equal or greater strength, never uncontained. Threat model restructured around the right baseline. Several residual risks are unchanged from an uncontained Gateway rather than regressions - shared-ACL reach, local IPC, egress, and persistence, which is now confined to a throwaway account instead of the user's profile. Separated from the risks containment actually shifts or introduces: the host-side state store, the staging channel, and the launcher. Added a TCB table covering the SDK, the SYSTEM service, and the kernel, and noted that a compromised Gateway commanding an authorized desktop node is not contained by this boundary. Also drops the claim that the Gateway is unaffected. It needs no containment code, but a new principal means a different profile, registry hive, and credential store, and whether the Docker and SSH sandbox backends survive that is now an explicit phase 2 question. All MXC citations pinned to a commit with a verification date, since a load-bearing claim went stale within a week. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: ccc616c5-8e0a-4098-b8ef-c19695e5c27b
Follow-up pass on the re-check: - Clarify that probe is the launcher's own step, not a provider phase, and drop the suggestion that the launcher could reattach later, since no such API exists. - Admit the orphan case a write-ahead record cannot fix: a crash during provisioning can leave an identity that no launcher can address, and reclaiming it is an out-of-band operator task. Added to the readiness bar. - Fix a stale Non-Goals line that still described openclaw#55 as containing only a session's work, and restate the boundary as deployment context. - Correct the AppContainer argument again: the ACEs it needs are removable by a matching unprepare step, so the real objection is the elevated, machine-wide host-prep required before a per-user agent can run, not permanent damage. - Stop calling the launcher "the trusted computing base" where the TCB table already shows it is only the part we own. - Pin the README citation, show exec and supervision in Figure 1, and add readiness items for sandbox-backend survival and downgrade prevention. - Decision requested now states what a yes actually accepts: a second always-on process, a larger TCB, and an identity-only boundary. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: ccc616c5-8e0a-4098-b8ef-c19695e5c27b
Summary
Proposes an optional OpenShell WorkerProvider for Cloud Worker sessions. Each explicitly selected Cloud/OpenShell session receives a disposable child sandbox while OpenClaw retains placement, recovery, transcripts, and session ownership.
Motivation
The existing OpenShell SandboxBackend isolates selected tools but leaves the session agent loop in the Gateway. This RFC defines the narrower delegated control path required to isolate a selected session's complete worker runtime without exposing OpenShell client mTLS, the supervisor JWT, or model-provider credentials.
Scope
openshellWorkerProvider.inference.local.Implementation status
The accompanying OpenClaw and OpenShell branches implement the proposal. The OpenClaw branch has been rebased on current
origin/main; OpenShell restricts delegated child shape to the parent-owned template and permits read-only inference-route metadata.Validation
Follow-up
An OpenShell issue will be opened to track the delegated worker capability and cross-repository implementation work.