Docs pages

Delivery and Provider Agents

Two small programs produce the evidence each delivery week is certified from. Both are single files that run on Node.js 22 with no other dependencies.

Agent Run by Where Signs every minute
Delivery Agent the buyer on the delivered node a heartbeat: the GPUs' UUID hash, the XID count, a recent Solana slot; and answers inspectors' health probes
Provider Agent the seller on the seller's management plane BMC power and link state, DCGM GPU health

Neither reads workloads, files or SSH sessions. Each signs with its own key, which can sign evidence for one ticket and nothing else: it can never move funds.

Download

Each takes --help.

1. Create the agent's key

On the machine the agent will run on:

node hourglass-delivery-agent.mjs --generate-key ./delivery-agent.json --ticket TICKET_ID

(hourglass-provider-agent.mjs for the seller.) It writes the key file, readable only by you, and prints the agent's public key with the binding action.

2. Bind it to the ticket

Open the ticket in the app. Under Delivery Agent (buyer) or Provider Agent (seller), paste the public key, or the whole printed line, and choose Bind. Your wallet signs once. From then on the service accepts that ticket's evidence only from that key.

3. Run it for the week

node hourglass-delivery-agent.mjs --api https://hourglasscompute.com --ticket TICKET_ID --keypair ./delivery-agent.json --health-port 8443
node hourglass-provider-agent.mjs --api https://hourglasscompute.com --ticket TICKET_ID --keypair ./provider-agent.json

Start it before the week begins and leave it running; it stops on its own when the week is over and every record has been delivered. Records are written to a spool folder next to the key first and sent each minute, so a network outage loses nothing: they are sent when the connection returns.

Delivery Agent

  • Needs nvidia-smi and read access to the kernel log for XID events.
  • --health-port is where it serves the fixed health endpoint, /.well-known/hourglass/health. The node's health URL, given when the node was accredited, must reach this port (the seller routes it, usually through a TLS proxy).

Provider Agent

  • Needs nvidia-smi and dcgmi, and BMC access through Redfish or IPMI, set in the environment:
Variable For
BMC_REDFISH_SYSTEM_URL, BMC_REDFISH_NETWORK_URL Redfish power and link state
IPMI_HOST IPMI instead of Redfish
BMC_USERNAME, BMC_PASSWORD BMC credentials
PROVIDER_NETWORK_INTERFACE the node's front-end interface
NVIDIA_SMI_PATH, DCGMI_PATH, KERNEL_XID_LOG tool and log locations, when not the defaults

The buyer's SSH key, on the seller's side

The Provider Agent can fetch the buyer's encrypted key for a ticket, open it with your seller key file and install it:

node hourglass-provider-agent.mjs --api https://hourglasscompute.com --ticket TICKET_ID --keypair ./provider-agent.json \
  --wallet-keypair ./seller-wallet.json --x25519-key ./hourglass-seller-x25519.json \
  --authorized-keys /home/ubuntu/.ssh/authorized_keys

--print-access prints the key instead of installing it. The agent checks the key against the hash the buyer committed on chain before using it. --wallet-keypair is your seller wallet as a Solana keypair file, used only to sign in. You can also open the key in the app, on the ticket.

What counts as healthy

An hour is healthy when all 8 GPUs are visible, their UUIDs match the accredited record, no gating XID occurred (48, 64, 74, 79, 95, 119, 120) and the node was reachable for at least 55 of 60 minutes. The committee certifies hours from the buyer's heartbeats; when the buyer's agent is silent and no fault is open, clean Provider Agent records count. Missing records open review; they never cut a payment on their own.