Your AI agent is about to pay.
GenCheck makes sure it should not.
The cheapest offer an agent finds is often a lookalike storefront. Before it signs a payment, GenCheck sends the checkout URL to GenLayer validator consensus: independent validators fetch the page and the brand's real site, judge whether the domain actually belongs to that brand, and write the verdict on-chain — where anyone can check it. An agent pays only on a verified real.
GenCheck stops your agent paying a scam site
Your agent is about to pay. GenCheck checks the shop first — if it isn't the real store, the money never leaves the wallet.
Decisions the validator network has reached
Each card runs a new transaction against the live contract — the hash is yours to verify on the explorer.
What happens between a URL and a verdict
Transaction
The agent calls validate_checkout before signing the payment. The
hash is public immediately, so the decision is auditable whether or not the
agent proceeds.
Investigation
Each validator independently fetches the checkout page and the brand's official site inside the GenVM sandbox, and compares what it finds.
Judgment & vote
Every validator's LLM — different models from different operators — judges domain ownership and page content, then votes. Validators must agree on the verdict itself.
On-chain verdict
The agreed verdict is written to contract storage and cached per domain. A fetch that fails fails closed — unverifiable is never treated as safe.
Measured, not projected
Live URLs through real validator consensus on studio-dev. Methodology and the v1 → v5 prompt-fix arc are in the repo.
46 of 49 verdicts correct on the live contract — live OpenPhish phishing pages, wrong-seller sites, and legitimate checkouts.
Not one of 23 lookalikes was cleared for payment.
The other 9 failed closed or came back unsure. This run
separates the two, so a dead page is not counted as a catch.
Real checkouts blocked: two bot-block the validators, one was a genuine misjudgement. Disclosed rather than hidden.
One rule: no consensus-backed real, no payment
The gate lives in the agent's own payment path and fails closed — anything other
than a verified real blocks.
# reads are free; writes need a funded key claude mcp add gencheck \ --env GENCHECK_PRIVATE_KEY=0x… \ -- python -m gencheck.mcp_server
from gencheck import GenCheck, decide gc = GenCheck(private_key=os.environ["GENCHECK_PRIVATE_KEY"]) verdict = gc.validate(checkout_url, brand) action, why = decide(verdict) # fail-closed if action != "PAY": halt(why)
Point your agent at the skillfor your agent
curl -s /skill.md