RFC 0005: Sandbox proxy egress adapter model#2155
Conversation
Signed-off-by: John Myers <johntmyers@users.noreply.github.com>
Signed-off-by: John Myers <johntmyers@users.noreply.github.com>
Signed-off-by: John Myers <johntmyers@users.noreply.github.com>
Signed-off-by: John Myers <johntmyers@users.noreply.github.com>
Signed-off-by: John Myers <johntmyers@users.noreply.github.com>
Signed-off-by: John Myers <johntmyers@users.noreply.github.com>
Signed-off-by: John Myers <johntmyers@users.noreply.github.com>
Signed-off-by: John Myers <johntmyers@users.noreply.github.com>
|
Thanks for this RFC — the adapter/authorization/relay separation is a clean model. I wanted to flag #1633 (supervisor-proxied host-local endpoints) as a consumer of this design. The The RFC's local service adapter category is the natural home for this, but Phase 8 currently models only the three existing services ( A few questions:
Our use case: we're designing host-side API servers for fullsend (container builder, repo provisioner) and have an ADR and early experiments around it. Today the experiments bind to |
|
@maruiz93 have you tried using network_policies:
host_service:
name: host_service
endpoints:
- host: host.openshell.internal
port: 8080
binaries:
- path: /usr/bin/curlThe service you are running will need to be addressable by the driver infra you choose. For example with Docker the service you are running will need to be reachable by other containers in order for the sandbox workload to reach it through |
|
Yes — we tested exactly this pattern in fullsend-ai/experiments#28 (merged, 6 harness configs across 3 discovery methods × 2 network policies). It works, but requires three manual workarounds that motivate #1633: 1. allowed_ips:
- "{{HOST_IP}}/32" # rendered at runtime by the orchestrator2. Servers must bind to 3. The bridge IP varies by driver. Rootless Podman + pasta uses a link-local address ( These are the problems #1633 targets. The supervisor already solves the structurally identical problem for The experiment findings document all of this in detail: findings — "API servers must bind to all interfaces". |
russellb
left a comment
There was a problem hiding this comment.
Agent-assisted design review (principal-engineer pass, grounded in the current openshell-supervisor-network code). The direction is sound and the current-state findings check out — comments below focus only on actionable gaps. Inline notes cover: a leaky EgressDecision seam, scope (net-new capabilities bundled with the refactor), the identity-less fail-open change, generation-pinning, and migration/operational gaps.
Signed-off-by: John Myers <9696606+johntmyers@users.noreply.github.com>
|
@maruiz93 Thanks for the detailed #1633 context. c18e06a now names host-local endpoints as a prospective consumer of these boundaries and keeps the local-routing and destination contracts extensible for that work. The technical design says this should be an explicit local-routing adapter or destination mode, not a general loopback or SSRF exemption; authorization must happen before the supervisor opens the host-loopback connector, and supported runtimes must advertise the capability. RFC 0005 intentionally does not choose reserved hostname versus endpoint flag or add the feature to its compatibility milestone, so those policy and driver details remain in separate #1633 feature design while reusing EgressIntent, adapter-specific responses, and the unopened connector boundary. |
Summary
Drafts RFC 0005 for reshaping sandbox proxy egress around transport adapters, shared
EgressIntent/EgressDecisionauthorization, and relay-owned byte handling. The proposal covers CONNECT, forward HTTP, DNS, local services, native TCP, supervisor middleware, credential injection, WebSocket/body injection, JSON-RPC, MCP, and optional process identity for sidecar-style modes.Related Issue
N/A - RFC proposal.
Changes
Testing
mise run pre-commitpassesRFC-only documentation change. Ran
git diff --checkand ASCII scans on the RFC files. Pre-commit was intentionally not run for this RFC draft.Checklist