Everything here is self-hosted (Tower). In the cloud these routes are inert — the
cloud runs the same region without a physical device.
Lifecycle
- Announce — on first boot the box announces its claim code, public key, and
device-token hash (
POST /v1/devices/announce). - 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. - Attest & provision — the box records a TPM quote (attest) and provisions its operator + runtime tokens (provision).
- Run — the box holds one outbound relay
(
GET /v1/devices/self/events) to receive wakes and manage its companies/projects.
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 atrigger.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 torevoked, deletes
its runtime tokens (the egress gateway stops resolving them), and disables its
public link.