Skip to content

Before you touch anything

Confirm the gateway's own state before and after every section below.

$ ssh edge-gateway 'systemctl is-active bootstrap-agent.service gateway-agent.service; \
    curl -s --unix-socket /run/bootstrap-agent/api.sock http://localhost/v1/status'
active
active
{"interface_version":1,"agent_version":"8df05ff-20260914T115157Z","state":"ready",
 "attestation_mode":"tpm","profile_version":163971955832716,
 "last_checkin":"2026-09-15T09:43:21Z"}

state is the agent's own vocabulary (no_config / bootstrapping / ready / error โ€” internal/localapi/state.go), not the platform's. There is no literal active value here; ready is its healthy terminal state and is what "the gateway is up and serving a profile" means.

Also confirm TPM2_PT_HR_TRANSIENT_AVAIL hasn't dropped โ€” a leaked TPM handle outlives any one command:

$ ssh edge-gateway 'tpm2_getcap properties-variable | grep -i transient'
TPM2_PT_HR_TRANSIENT_AVAIL: 0x2

Placeholders used throughout this site

edge-gateway is an SSH config alias, not the device's real hostname โ€” the device's own identifiers (hostname, EUI, serial, TPM fingerprint, organisation) never appear on this site. 8df05ff above is a git build SHA, not device identity, and is shown because ยง1 is specifically about identifying which build is running. Where a command touches device or org identity instead, the examples use placeholders ($DEVICE_ID, $TID, an all-0/x EUI).