Enrol
The agent installs, generates its keypair in the platform keystore, and enrols with a single-use, rate-limited token. The server pins its public key.
System
One shared Rust core with thin per-OS layers, a stateless signaling tier, a relay that only forwards ciphertext, and a browser console. Built to run under 500 endpoints in year one, and to scale the signaling and relay tier out later without a rewrite.
customer network your infrastructure (AU)
┌───────────────────┐ ┌──────────────────────────────┐
│ Windows / macOS │ 443 outbound │ signaling (stateless WS) │
│ ┌─────────────┐ │ ─────────────────▶ │ rendezvous, no session │
│ │ service │ │ │ state in process │
│ │ (Session 0)│ │ └───────────────┬──────────────┘
│ └──────┬──────┘ │ │
│ │ spawns │ DTLS-SRTP (ciphertext) ▼
│ ┌──────┴──────┐ │ ICE / STUN ──▶ direct ┌───────────────┐
│ │ session │ │ ═══════════════════════════════│ coturn relay │
│ │ helper │ │ TURN fallback │ ciphertext │
│ │ capture+in │ │ │ only │
│ └─────────────┘ │ └───────┬───────┘
└───────────────────┘ │
▼
┌──────────────────────────────┐
│ Next.js control plane │
│ passkey/TOTP · RBAC · audit │
│ browser: WebCodecs decode │
└───────────────┬──────────────┘
│
┌───────────────┴──────────────┐
│ Postgres (control plane) │
└──────────────────────────────┘Setting up a session
The agent installs, generates its keypair in the platform keystore, and enrols with a single-use, rate-limited token. The server pins its public key.
Agent and console meet at the stateless signaling service over a WebSocket. No session state is held in the process, so signaling scales horizontally.
The session is cryptographically authorised per connection. RBAC and tenant checks run before any media is negotiated.
ICE gathers candidates via STUN. Where a direct path fails, self-hosted coturn relays. The relay only ever sees DTLS-SRTP ciphertext.
DXGI Desktop Duplication on Windows, ScreenCaptureKit on macOS, behind one capture trait. Frames stay on the GPU until hardware encode (H.265, then H.264).
The browser consumes the media track and decodes with WebCodecs. Input, clipboard, and files travel over encrypted data channels, behind the consent indicator.
Windows split
A SYSTEM service in Session 0 owns enrolment, keys, networking, and updates. It cannot capture the interactive desktop, so a helper is launched into the active console session to capture and inject. Session changes are tracked with WTSGetActiveConsoleSessionId and session notifications, and the helper is relaunched on switch, lock, or RDP transitions.
macOS grant
Managed Macs receive PPPC configuration profiles via MDM, keyed to the Developer ID team identifier, granting Screen Recording and Accessibility to the signed bundle. Unmanaged Macs get a guided first-run flow that deep-links to the right System Settings pane and verifies the grant before the agent reports ready.
Architecture decision records, the data model, and the agent-to-server protocol are all documented in full.
Documentation →