HB-Eval
hbeval.com

Architecture

Where your data goes, what leaves your machine, and what we can see. Every arrow below reflects the implementation rather than an intended design.

Your agent

your infrastructure

Runs wherever it already runs. HB-Eval does not host it, proxy its model calls, or sit between it and its tools. Its control flow is unchanged.

one adapter call, or one import

HB-Eval SDK

in your process

This is where measurement happens. The five metrics are computed locally, in your process, from running tallies — about 0.002 ms per step, flat from a hundred steps to fifty thousand.

Safe Halt is decided here too. That matters: if the network is down, your policy still fires. A guard that needs a round trip is a guard that fails exactly when infrastructure is already struggling.

Python and TypeScript. Or nothing at all — one import derives signals from OpenTelemetry spans you already emit.

AES-256-GCM, HMAC-signed, off the agent's thread

The wire

what actually leaves

Sent

  • Metric values and step counts
  • Threshold breaches and halt decisions
  • Action names you pass to record_step
  • Measured monitoring overhead

Not sent

  • Prompts and model responses
  • Tool arguments and returned data
  • Anything your agent processed
  • Your model provider credentials

Telemetry uses the same encrypted, signed envelope as evaluation — live monitoring is not a lower-security path. Batches leave on a separate thread, so network latency never enters your agent’s execution time, and a failed send is dropped rather than raised: instrumentation is not permitted to be the reason a run breaks.

The exception worth knowing: on the evaluation path you submit a task deliberately, so its text does reach the Gateway to be scored. It is encrypted in transit and not retained after scoring.

HTTPS

Gateway

Railway · FastAPI

Authenticates, verifies the signature, rejects replayed requests, enforces quota, and scores evaluation runs against the fault battery. Dispatches alerts to Slack, PagerDuty or your webhook.

Holds the passport signing key — which is why passports are signed here and nowhere else. A key present in two deployments is a key with two chances of leaking.

row-level security, per account

Storage

Supabase · PostgreSQL

Sessions, metric history, halt decisions with the policy that caused each one, alert delivery records including the failures.

Agent secrets are encrypted at rest; the API key is stored only as a hash. Step-level snapshots are removed after 90 days by a job that actually runs — the last successful sweep is published on the status page.

What this architecture cannot do

  • Because the SDK sits beside your agent rather than in front of it, it cannot block a tool call. Safe Halt stops the next step; it never reverses the last one.
  • Because prompts and responses stay with you, we cannot tell whether an answer was correct. The metrics measure behaviour under fault, not truth.
  • Because the Gateway is a single instance in one region, an outage means telemetry is lost for its duration. Your agent keeps running and your policies keep firing — but the record has a hole in it.

The first two are deliberate trades. The third is a limitation, and it is stated on the status page rather than discovered during an incident.