@@ -23,7 +23,7 @@ inbound ports.**
2323## The loop (all outbound)
2424
2525```
26- register -> POST /api/connector/register enroll once, get a per-connector token
26+ create -> authenticated Cloud settings mint a revocable org-scoped token once
2727poll -> POST /api/connector/poll long-poll; lease the next queued job
2828execute -> openadapt-flow run ... the governed admission gate + Replayer,
2929 against the CUSTOMER'S own storage
@@ -39,22 +39,24 @@ the *same* fail-closed `openadapt-flow run` you would run locally.
3939``` bash
4040pip install openadapt-flow
4141
42- # 1. Enroll this machine once (mints + persists a per-connector token, 0600).
43- openadapt-flow connector enroll \
42+ # 1. In app.openadapt.ai, open Dashboard → Settings →
43+ # Customer-controlled connector, create a connector, and copy its token once
44+ # into this machine's service manager or secret store.
45+ export BYOC_CONNECTOR_TOKEN=' <shown-once token>'
46+
47+ # 2. Run the daemon (poll -> execute -> report -> ack, until interrupted).
48+ openadapt-flow connector run \
4449 --control-plane-url https://app.openadapt.ai \
45- --enrollment-secret " $BYOC_ENROLLMENT_SECRET " \
4650 --org-id org_your_clinic \
4751 --profile /opt/openadapt/deployment.yaml \
4852 --storage-backend local \
4953 --storage-root /srv/openadapt # a full-disk-encrypted customer volume
50-
51- # 2. Run the daemon (poll -> execute -> report -> ack, until interrupted).
52- openadapt-flow connector run
5354```
5455
55- Enrollment persists to ` ~/.openadapt/connector.toml ` (mode 0600 — it holds the
56- token). A bare ` connector run ` reads it back. Every flag also resolves from an
57- env var (` CONTROL_PLANE_URL ` , ` BYOC_CONNECTOR_TOKEN ` , ` BYOC_ORG_ID ` , ...).
56+ Every flag also resolves from an environment variable
57+ (` CONTROL_PLANE_URL ` , ` BYOC_CONNECTOR_TOKEN ` , ` BYOC_ORG_ID ` , ...).
58+ ` connector enroll ` remains available for mock/development control planes; live
59+ Cloud token creation is authenticated and organization-scoped in the dashboard.
5860
5961## Data boundary and safety
6062
@@ -95,8 +97,9 @@ authorizing a fresh run.
9597## Enabling the lane (control plane)
9698
9799The lane is off by default. An operator enables it with
98- ` BYOC_ENABLED=true ` ** and** a configured ` BYOC_ENROLLMENT_SECRET ` , and flips the
99- org's ` deployment_kind ` to ` byoc ` . See openadapt-cloud ` src/lib/byocLane.ts ` .
100+ ` BYOC_ENABLED=true ` and authenticated run callbacks
101+ (` RUNNER_SHARED_SECRET ` ), then sets the organization's ` deployment_kind ` to
102+ ` byoc ` . See openadapt-cloud ` src/lib/byocLane.ts ` .
100103
101104## What works today vs. what remains for production
102105
@@ -112,9 +115,9 @@ org's `deployment_kind` to `byoc`. See openadapt-cloud `src/lib/byocLane.ts`.
112115
113116** Remaining for production:**
114117
115- * ** Hardened auth .** Enrollment is a single org-shared secret today; production
116- wants per-org (ideally short-lived, rotating) enrollment tokens, plus
117- mTLS/private-link between the Connector and the control plane .
118+ * ** Private transport options .** Connector tokens are organization-scoped,
119+ revocable, and stored only as hashes in Cloud. Deployments that require
120+ mTLS/private-link add that transport at the customer network boundary .
118121* ** Full policy materialization.** The delivered safety block governs * dispatch*
119122 and the two fail-closed gates above; materializing every safety key into the
120123 engine's runtime config (so e.g. the delivered grounding endpoint is the one
0 commit comments