docker socket
│ (method+path allowlist)
┌───────▼────────┐
│ socket-proxy │ GET /events,/containers,/networks
└───────┬────────┘ POST /networks/*/connect|disconnect (nothing else)
events/inspect/ │
network connect │
┌───────▼────────┐ internal API ┌──────────────────────┐
│ controller │ ──register/drain──▶ │ notifier core (spec │
│ (privileged) │ POST /v1/sources │ 009): registry, │
└───────┬────────┘ │ pollers, delivery, │
reads key ───▶│ │ grants, channel+bot │
/run/remo/keys/<id>│ │ (UNPRIVILEGED) │
└──────────────────────┘
Summary
Implement the socket-watching controller enrollment model (Approach B, decided in #42). A privileged controller watches the Docker event stream and drives source enrollment, network attach, and liveness — replacing the in-container connector + presence protocol. The proven spec-009 core (registry / per-source pollers / delivery / grants) is reused unchanged: the controller calls the existing
POST /v1/sourceson behalf of each discovered container.Parent decision: #42. Key conveyance: host-managed per-project key mount (decided).
Architecture
The split is the point: only the controller touches Docker (via the proxy); the
internet-facing notifier + Telegram bot stay unprivileged.
Key conveyance — host-managed per-project mount (decided)
/run/remo/keys/<sourceId>(0400).Tasks
eventswatch (reconnect/replay-safe); on containerstart→ resolvesourceId(label/hostname convention), read key from/run/remo/keys/<sourceId>, deriveapi_urlfrom the project network name,network connectnotifier→project net (reuse PR Notifier: wildcard egress grants, convention-derived source connector, Option-A net wiring #45netwirelogic), register via/v1/sources. Ondie/stop→ deregister + drain +network disconnect(disconnect-when-last).remo.agentsh.enabled,remo.agentsh.port). Containers without it are ignored./run/remo/keys/<sourceId>, wires the agentsh + controller mounts.remo_notifierrole./v1/sources+ fake proxied docker (mirror thenetwire/feature test style — no live daemon needed).Supersedes / reuses
remo-notifier-source(Approach A). Once B lands, the Feature can be deprecated.netwirelogic (moves into controller) and wildcard grants (orthogonal, kept).Still required regardless
Open questions
containerson startup to rebuild state).Links