Use cases

Four decisions, and what the engine won't say about them

Each of these runs on a free sample dataset in about thirty seconds. Each one also names its own limit.

Engine 0.3.6, core hash 4d24e9fc… Every figure on this page came out of a live call. Nothing is estimated.

01 · sample:agent_traces

Which of your agent runs will fail

800 runs across 4 agents, 5 tasks and 4 tools. Ranked raw, the engine refuses.

agent_traces — raw table

{ "result": "none",

"reasons": ["Insufficient features: found 2 viable arms, need 4. …"],

"retry": "unproductive",

"guidance": "Retrying the identical call will return the identical result." }

No ranking, no model_ref, no Verdict. retry: "unproductive" is the engine telling your retry loop to stop. Add reading: {"kind": "trace", "version": 1} and the same 800 rows clear at 4.285714 top-decile lift. The reduction derives each run's prior failure rate over strictly earlier runs — agent_prior_outcome_rate, agent_prior_n, tool_prior_outcome_rate — features that are not columns in the raw table.

What it refuses: the raw table. Two viable features where it needs four.

02 · sample:saas_churn

Which accounts are about to churn

800 accounts. 4.444444 top-decile lift, holdout validation on 480 train / 160 holdout / 160 reserved.

saas_churn — four conditions that only mean anything together

support_tickets > 3

logins_last_30d <= 14

tenure_months <= 13

monthly_charges > $157.41

→ 1% of accounts match all four, and they are

4.477611940298507× more likely to churn

rows 1–56 · act · L3

row 57 down · escalate · L1

The top of the list is not uniform. Acting on "the top 100" would action 44 rows the engine asked you to escalate.

What it refuses: below the published floor a partitioned run cannot judge either half. See case 5.

03 · sample:b2b_leads

Which leads are worth working

800 leads. 5.263158 top-decile lift, calibration error 0.044679.

b2b_leads — four conditions together

demo_requested = true

first_touch_days <= 7

page_view_tier = high

industry is_not_one_of [manufacturing, retail]

→ 1.25% of leads match the full pattern,

at 7.346938775510204× lift

What it refuses: to tell you what to change. On this dataset hs_explain_levers returns an empty set — the engine found no minimal change it has evidence for, and says so rather than inventing a next-best-action. principal_reasons comes back empty for the same reason.

04 · sample:sensor_stream

Which machines are about to fail

4 signals from 40 machines, every 6 hours for 30 days. 4,815 raw readings and 15 fault intervals reduce to 1,160 daily snapshots with trailing 1/3/7-day windows. 7.518539 top-decile lift.

9 snapshots · act · L3

~68 · escalate · L1

24 · refuse · L0 · low_likelihood

This is the run where all three bands appear at once. refuse is not an error — it is the engine declining to vouch, and it caps autonomy at observe-only.

sensor_stream — six leakage advisories, none removed

vibration_slope_3 high single-feature AUC (0.97) on held-out data;

possible leakage — verify this value is historically

known BEFORE the outcome. NOT removed. [advisory]

vibration_std_7 AUC 0.95 [advisory]

vibration_slope_7 AUC 0.93 [advisory]

vibration_std_3 AUC 0.91 [advisory]

temp_c_slope_7 AUC 0.89 [advisory]

temp_c_slope_3 AUC 0.86 [advisory]

What it refuses — and this is the part worth reading: a feature that predicts the outcome almost perfectly is usually a mistake in the data, not a discovery. The engine cannot tell which from the values alone, so it hands you the number and the question instead of a clean-looking model.

With this reduction the engine scores snapshots, not machines — n_entities: 40, median_rows_per_entity: 29, and the ranked ids read row 1127.

05 · sample:saas_churn with partitions: 2

When it can't judge, it says so in the handoff

800 rows, below the 1,250-row floor a partitioned run needs. The run comes back usability: "unjudged", with model_ref: null, verdict: null, and no band on any row.

gate verdict — refuses to be mistaken for a verdict on the run

"pooled: the POOLED corpus cleared the published lift >= 1.5 bar…

It is NOT a verdict on this run: the partitioned draws were not

judgeable, so no draw-level clearance was established.

Read usability and partitions.clearance_frequency."

clearance_frequency: { cleared: 0, of: 2, judgeable: 0 }

Then hand the analysis to another agent with hs_context_brief, and the brief refuses too:

hs_context_brief — the caveat travels with the artifact

"USABILITY: unjudged. The engine did not certify this run, so nothing

below is a certified finding… The drivers are reported because the

engine reported them; do not act on this ranking, and do not relay

them as a finding."

What it refuses: to let an uncertified result travel as a finding. The caveat is attached to the artifact, not to the conversation the artifact came from.

Regulated decisions

A decision an examiner can follow

Lending, insurance and merchant portfolios need three things a model ordinarily can't give an examiner: a decision traceable to its inputs, the same answer on a rerun, and a named human who owns it.

Hunter-Seeker returns all three — a signed Verdict carrying analysis_id, spec_hash and dataset_content_hash; a deterministic engine; and on_behalf_of naming the authenticated human, with person-level decisions capped at L2, and at L0 when no human is on the credential.

There is no free sample for this one yet.

Frequently asked questions

What is Hunter-Seeker?
Hunter-Seeker is a decision layer your AI agents call over MCP. It ranks a table by the likelihood of a yes/no outcome, scores single entities into act, escalate, or refuse, and signs every decision as an Ed25519 Verdict. The engine is deterministic — the same input produces the same output, byte for byte.
How is this different from letting the LLM decide?
An LLM authors a plausible-sounding number; Hunter-Seeker computes a calibrated one. Agents may generate copy — they may not invent the score. The engine validates on held-out data, refuses when the signal is too weak, and returns a signed Verdict, so the decision is evidence, not vibes.
What happens when the data can't support a decision?
The run comes back honest-empty: if nothing clears the lift bar, the engine refuses with structured reasons instead of returning weak rankings — and the run is refunded. A refuse band bills nothing. Refusing to guess is the feature, not a failure mode.
Do I need an account or an API key to try it?
No signup. Add the connector URL to Claude, ChatGPT, or Cursor — or run uvx hunter-seeker sample in a terminal. About sixty seconds later you have a signed Verdict on a free sample dataset. No email, no dashboard.
How do I verify a Verdict?
Any Verdict can be checked without credentials: call hs_verify_verdict over MCP, or verify offline with the open-source libraries hs-verify (pip) and @hunter-seeker/verify (npm) against the public keys at hunter-seeker.net/.well-known/jwks.json. Verification returns valid, invalid, expired, or unknown-key — nothing else, so the endpoint cannot be probed.

Give your agents a decision layer.

Add the connector, rank a table, and get back a band your agent can act on — signed, deterministic, and verifiable by anyone. No signup. Sixty seconds.
Start building
Start building