Development build, October 2026. UCompute is in development. There is no public release or download yet. This note describes behaviour as built in development builds. The protocol mechanics (the pairing confirmation, the relay check, the lockout, no session resumption, the revocation rules) are verified by automated tests on one computer; pairing, remote execution, revocation and connect-by-address have also run between the two-machine pairs listed at the end.
You have a laptop and a second computer. You want a prompt typed on the laptop to run on the other machine. The usual way to do this with a local model server is to bind it to every network interface and point the laptop at the other machine’s address. That works, and it also means the port is the whole trust boundary: any client on the network that can reach it can send prompts and read answers. UCompute Mesh takes a different route: two devices pair once with a short code; a paired device still refuses every off-device request until you allow it; each off-device request it does run is recorded without the prompt or the response; and you can revoke a device at any time.
UCompute Mesh lets you pair your own devices with a short code and choose which one runs a request. Each request runs whole on one device. (Tested with development builds between one Mac and one Windows laptop, and between that Mac and one Linux computer, all on the same local network; the exact scope is listed under “Where this has run”.)
Each UCompute device holds one Ed25519 key pair, generated on the device and kept across restarts. That key is the device’s identity. There are no certificates, no certificate authority and no accounts: the peer transport is QUIC with TLS 1.3 using raw public keys (RFC 7250), both ways. When two devices connect, each one proves it holds the private key for a public key the other has already pinned. If the key is not pinned, the handshake fails before any application data moves.
So pairing is the act of getting the other device’s public key into your pin list in a way you can trust, plus learning its name and service port. It grants no permission to run work; the policy layer below decides that.
Typing a long public-key fingerprint on a second machine is error-prone, so pairing uses a short code and a password-authenticated key exchange (SPAKE2). The order of events, as built:
Device A (shows the code) Device B (types the code)
───────────────────────── ─────────────────────────
opens a pairing endpoint,
120-second window, 6-digit code ──────▶ user types the code
◀────── TLS 1.3 connection (any key accepted here;
trust comes from the code, not the handshake)
◀────── SPAKE2 message B
SPAKE2 message A ──────▶
both derive the shared secret K
both read a 32-byte value exported from this TLS session
MAC_A = HMAC(K, "A" ‖ exporter ‖ idA ‖ idB) ──────▶
◀────── MAC_B = HMAC(K, "B" ‖ exporter ‖ idA ‖ idB)
each checks the other's MAC in constant time
only now: exchange device name and service port
both pin the other's key; both write an audit line
Three details carry the security. The relay and lockout checks ran in automated tests on one computer.
A QR variant carries the device’s public key, its address and a one-time secret that takes the place of the typed code as the SPAKE2 password. A device that scanned the QR accepts only that key inside the handshake; if another device answers at that address, nothing is pinned.
Once both devices hold each other’s keys, every connection between them is a mutually authenticated TLS 1.3 handshake. Some choices that follow from “the verdict is inside the handshake”:
Traffic between paired devices is encrypted and both ends are authenticated: QUIC with TLS 1.3 and device keys pinned at pairing. A packet capture that checked for readable prompt text ran on one computer; a capture between two machines has not been done yet.
A pinned key proves which device is on the other end. It does not decide whether that device may do anything. That is a separate policy layer:
Audit logs record each off-device request without the prompt or the response. The audit line for a sent request is written before the request leaves the device; if it cannot be written, nothing is sent.
You can revoke a paired device at any time. A revocation is a signed record naming the target device, with a per-issuer sequence number. A receiving device accepts it only if the issuer is itself pinned there and not revoked, the signature verifies under the issuer’s key, and the issuer and the target share a group there, so a stranger cannot cut off your devices. When a device re-pairs with a target it had revoked, it marks its own earlier records as superseded, so a replay of a revocation it has already seen cannot undo the re-pair (a record it never saw can still re-revoke; that is a known limit, and it fails closed). Every open connection to the revoked device closes at once, its key is refused inside the next handshake, and because there is no session resumption, there is no cached ticket to come back with. Other devices in the shared group receive the record over their existing connections and again on every reconnect until they confirm it.
In our two-machine tests, its connection closed less than a tenth of a second after the revoke (between 0.002 s and 0.061 s in four runs), and its next request was refused. Three of those runs were between the Mac and the Windows laptop, one between the Mac and the Linux computer.
Development builds, October 2026:
No platform is declared supported yet. macOS 26.2 on Apple M2 and Windows 11 on an Intel Core Ultra 7 258V with Arc 140V are experimental; Linux, other GPUs and phones (as clients) are planned.
UCompute runs models through a pinned release of llama.cpp (MIT; b11609 in the October 2026 development builds), downloaded on first use and verified against a pinned SHA-256 hash; UCompute does not write its own inference kernels. UCompute’s code is licensed under Apache-2.0. The source has not been published yet. When it is, this note will link to the modules and the tests that hold each rule above in place.
Corrections and questions: hello@ucompute.org. Please send anything security-related there rather than posting it publicly. UCompute is in development. There is no public release or download yet.
Follow new notes: Bluesky @ucompute.org or the Atom feed.