Skip to main content
A device is a Naïve Tower: a box that runs the region on hardware you own. A device is a first-class entity in the control plane — it is claimed by an owner, bound to a company, and can host the runtime for multiple companies and projects managed from the same box.
Everything here is self-hosted (Tower). In the cloud these routes are inert — the cloud runs the same region without a physical device.

Lifecycle

  1. Announce — on first boot the box announces its claim code, public key, and device-token hash (POST /v1/devices/announce).
  2. Claim — the owner signs in / registers and binds the box to their company, completing KYC + kit selection (POST /v1/devices/claim/{code}). The registration lock means a box is claimed once.
  3. Attest & provision — the box records a TPM quote (attest) and provisions its operator + runtime tokens (provision).
  4. Run — the box holds one outbound relay (GET /v1/devices/self/events) to receive wakes and manage its companies/projects.
See claim & provisioning for the deep dive on what runs on the box.

Waking box-resident agents

Inbound events (email, SMS, a hook POST, a Loop tick) are routed by the trigger router. When the bound agent lives on a box, the event is relayed over the box’s outbound SSE as a trigger.wake; the box runs the agent locally and acks the delivery (/v1/devices/self/deliveries/{id}/ack). Sensitive payloads are sealed to the device’s encryption key before they leave the cloud.

Reaching a box from anywhere

By default a box opens no inbound ports — it only reaches out. Turn on the opt-in public link and a {slug}.tower.usenaive.ai URL reaches the box panel/API over the box’s outbound tunnel via the Naïve edge relay. See the public link and the tunnel API.

Revoking a device

Revoking a device is the kill switch: it flips the device to revoked, deletes its runtime tokens (the egress gateway stops resolving them), and disables its public link.
See Revoke and the security model.