What HB-Eval measures, how each part works, how they differ, and how to go from nothing to a first evaluation and a first monitored run.
Start Here
Capability benchmarks answer one question: what can this agent do under clean conditions? They say almost nothing about what happens when a tool call fails, the context degrades, or an input turns adversarial — and that gap between benchmark performance and behaviour under failure is what HB-Eval measures directly, by injecting faults on purpose and scoring what survives.
The platform gives you five ways to use that measurement, and each answers a different question:
Reference
| Metric | Measures | Range |
|---|---|---|
| PEI Planning Efficiency Index | Whether the plan is coherent and economical rather than wasteful. Repeated re-planning drives it down. | 0–1 |
| FRR Failure Resilience Rate | Whether the agent keeps functioning when a fault is injected, rather than collapsing. | 0–1 |
| IRS Intentional Recovery Score | Whether recovery from failure was deliberate rather than accidental. Defined only on faulted episodes — recovery is meaningless with nothing to recover from. | 0–1, or undefined |
| TI Traceability Index | Whether the agent's behaviour can be followed and audited step by step. | 0–5 |
| CSI Consistency Stability Index | Whether the agent behaves the same way across repeated runs, or drifts. Needs several runs, so it is undefined within a single session. | 0–1, or undefined |
Undefined is not zero
IRS with no injected fault, or CSI within a single run, were not measured — they are reported as undefined, everywhere in the platform, and never coerced to zero. A zero would claim a measured failure on a dimension nothing examined.
Tiers are governed by the weakest required metric, not the average — an agent cannot average its way to trustworthiness by excelling on some dimensions while failing a critical one.
Five Minutes
1. Install the SDK
pip install hb-eval-sdk
2. Create an agent and copy its keys from Dashboard → Agents.
3. Run your first evaluation
from hb_eval_sdk import HBEvalClient
client = HBEvalClient(api_key=..., aes_key=..., signing_secret=...)
def my_agent(system_prompt: str, question: str) -> str:
return call_your_model(system_prompt, question)
base_task = {
"system": "You are a customer support agent.",
"question": "A shipment is three days late. Respond appropriately.",
}
report = client.evaluate_with_battery(base_task, my_agent, n_scenarios=18)
print(report["verdict"], report["aggregate_metrics"])Post-Hoc Scoring
Evaluation runs a fault-injection battery against an agent and returns a verdict once it finishes. There are two paths, and they answer different trust questions.
| Local (Path B) | Verified (Path A) | |
|---|---|---|
| Who runs the agent | Your machine | The platform, calling your endpoint |
| Your model keys | Never leave your machine | Not applicable — the platform calls your agent's own API |
| Tamper resistance | Self-reported responses | Nobody in the middle — the result is verified |
| Cost | Free | Requires a paid plan |
| Needs | A callable agent_runner | A public HTTPS endpoint + explicit consent |
Local — evaluate_with_battery
report = client.evaluate_with_battery(
base_task, my_agent, n_scenarios=18,
)Verified — request_verified_evaluation
report = client.request_verified_evaluation(
agent_url="https://my-agent.example.com/run",
base_task=base_task,
consent=True, # the platform will call this endpoint
n_scenarios=30,
)Already have a LangChain, LangGraph or CrewAI agent? Adapters wrap it into the shape both paths expect — see the Evaluate page for framework-specific snippets.
Real-Time
Evaluation judges a run once it is over. Monitoring watches an agent while it executes, recomputing the metrics after every step, so a collapse is visible at the step it happens rather than in a post-mortem.
Per-step signals are computed locally, in your process — real-time monitoring cannot afford a network call per step, and that is also why basic monitoring is free. Only the session summary, sent in small periodic batches, reaches the platform.
with client.monitor(agent_id="my-agent") as m:
for step in agent.run(task):
m.record_step(
action=step.name,
success=step.ok,
had_fault=step.fault_injected,
recovered_intentionally=step.deliberate_recovery,
traceable=step.has_reasoning,
)
if m.should_halt:
break
print(m.summary)Sessions and live metrics appear on the Monitoring dashboard as they happen.
Measurement That Acts
Detecting a collapse is only half of what a safety mechanism owes you — the other half is stopping before the damage compounds.halt_policyturns a sustained breach into a halt decision.
with client.monitor(
agent_id="my-agent",
halt_policy={"metric": "frr", "below": 0.5, "for_steps": 3},
) as m:
for step in agent.run(task):
m.record_step(...)
if m.should_halt:
print(m.halt_reason)
breakSustained, not instant
One bad step is noise. A guard that fires on noise gets switched off, so the metric must stay under the floor for several consecutive steps.
Cooperative, not forced
Nothing is killed mid-step — that is how transactions end up half-applied. The session raises should_halt; your loop decides how to stop.
Off unless you ask
No halt_policy means observation only. Stopping an agent without being asked is not a default anyone should inherit.
Public Statistics
Published studies measure agents under controlled conditions. The Observatory publishes aggregate reliability statistics from agents running in actual deployments, so the two can be compared.
Contribution is opt-in, set from Settings, and off by default. Identifiers are dropped before a contribution is written — never stored, not merely hidden — and figures are withheld until at least five independent accounts have contributed.
View live statisticsNo Dashboard Needed
HB-Eval is a remote MCP server. Add one URL to an MCP-capable assistant, sign in once, and ask in plain language — the assistant discovers and calls the tools itself.
Server URL
https://hbeval-reliability-os-production.up.railway.app/mcp
Claude
ChatGPT
Gemini
What you can ask
| list_my_agents | "What agents do I have?" |
| get_reliability_metrics | "What does FRR measure?" |
| get_reliability_trend | "Is my agent improving?" |
| retrieve_qualified_memory | "How was this handled before?" |
| explain_verdict | "Why did this verdict come out this way?" |
| evaluate_agent_reliability | "Run a reliability check on my agent." (paid plan) |
Only get_reliability_metrics and list_my_agents work with no agent on the account yet — the rest need one created first.
Full Walkthrough
Register
Create an account at hbeval.com — free, no card.
Create an agent
Dashboard → Agents → New. Copy the API key, AES key and signing secret shown once.
First evaluation
Run the Quickstart snippet above with your own agent_runner. You get a verdict and the five metrics.
First monitored run
Wrap your agent loop in client.monitor(...). Watch it on the Monitoring dashboard while it runs.
Optional: Safe Halt
Add a halt_policy once you know which metric matters most for that agent.
Optional: Observatory
Turn on contribution in Settings if you want your (anonymised) results included in the public aggregate.
Optional: connect MCP
Add the server URL to Claude, ChatGPT or Gemini and ask about your agents directly.
Decision Guide
| If you want to… | Use |
|---|---|
| Score an agent before shipping it | Evaluation (local) |
| Prove a result to someone else | Evaluation (verified) |
| Watch reliability while an agent works | Monitoring |
| Stop a collapsing agent automatically | Safe Halt (on top of Monitoring) |
| See how the industry compares | Observatory |
| Do any of this without opening a dashboard | MCP |