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-smiand read access to the kernel log for XID events. --health-portis 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-smianddcgmi, 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.