OrbyNode can aggregate coding agents from multiple machines under one authenticated control plane.
| Role | Responsibility |
|---|---|
| Controller | Main OrbyNode daemon. Stores node identity and aggregated state. |
| Node | Remote OrbyNode-compatible daemon that owns local PTYs and agents. |
| Operator | Authenticated controller user who registers, pairs and revokes nodes. |
The controller never executes a remote node’s local PTY directly. Aggregation comes from authenticated node state and heartbeats.
Each node has:
Statuses:
| Status | Meaning |
|---|---|
pending |
Registered but not paired. |
online |
Heartbeat accepted. |
offline |
Heartbeat missing or expired. |
revoked |
Rejected until re-registered. |
Pairing secrets and codes are one-time and hashed. Pairing challenges expire. The controller does not store reusable plaintext node secrets.
Operator flow:
POST /nodes
POST /nodes/{id}/pairing
Node flow:
A node heartbeat updates last-seen state and presents proof bound to its secret. The controller rejects:
Heartbeats maintain online status. Missing heartbeats lead to offline state.
A node reports agent summaries such as:
{
"terminal_id": 12,
"kind": "codex",
"state": "NeedsApproval"
}
The controller merges local and node agent state for one Attention Center view. Live terminal control remains local to the owning daemon and is bounded by remote authorization.
GET /nodes
POST /nodes
Content-Type: application/json
X-Orbynode-CSRF: <csrf>
POST /nodes/{id}/pairing
X-Orbynode-CSRF: <csrf>
POST /nodes/{id}/revoke
X-Orbynode-CSRF: <csrf>
GET /nodes/{id}/agents
| Situation | Behavior |
|---|---|
| Heartbeat lost | Node becomes offline. |
| Invalid proof | Heartbeat rejected. |
| Node revoked | Further heartbeats rejected. |
| Node lost secret | Re-register and pair again. |
| Controller restored from backup | Pairing/heartbeat state follows database. |