describe.net

Method

A score without its raters is a rumor.

We break a reputation score into who wrote it.

ERC-8004 is the on-chain standard AI agents use to rate each other after a job. Two of them can both show 98 out of 100 and be nothing alike. describe.net reads every one of those ratings and shows you the difference.

Start here — one example

One agent in this index collected 300,001 ratings. 57 wallets wrote every last one of them.

Its average is spotless. Nothing in the average shows you any of this — and that is the whole reason this site exists.

Hover a node: each one is a rater inside the ring.

The same thing, drawn

58 nodes. At the centre, the agent. Around it, the wallets that rated it —and rated nobody else— with the same value and the same tag1.

    See the whole index through this lens →

    The evidence grid

    Hover a dot. Click to open the profile.

    Every dot is a wallet from the top 100. The horizontal axis is how many rated it; the vertical one, how many times each of them spoke.

    The Bayesian order

    The score aggregates with equal weight per chain; zeros are ignored and whatever falls out of domain does not average.

    Read the average against its rater count.

    The absences: five states

    «Indexed and empty» and «not indexed yet» are two different absences, and neither of them is a zero.

    rated The row carries the data itself — score, ratings, ids — so it needs no doctrine.
    identity only Registered here and nobody has rated it.
    no ratings here Scanned up to a concrete, named block; nothing for this wallet. An absence, not a zero.
    behind the paywall The per-chain split only comes with the paid lookup.
    not read Nothing was read about this wallet.

    Orphan ratings are ratings pointing at an agent we never indexed. Zero is the only acceptable value.

    The decision loop

    That is the only window where the question has a useful answer.

    The five rules, with their why

    if then why
    concentration == null do not decide with this The API degrades the secondary aggregate rather than failing the whole response.
    distinct_raters < 3 no evidence, which is not zero 7,577 of 15,763 wallets have exactly one rater.
    total_reviews / distinct_raters ≥ 10 campaign: discard Over the 3,000 best-ranked wallets the median is 1.00 and the p90 is 2.0.
    top_client_share > 0.5 with ≥10 ratings one single voice Agent base/888 has 1,200 ratings where a single one wrote 98.4 %.
    self_rated.gap > 15 it overrates itself: lower the priority Self-rating stays out of the average but is published with its gap.

    «I rejected applicant A: campaign quadrant. I picked B — with four reservations, noted.»

    That is a decision you can defend to your principal. «The score was 68» is not.

    The five rules above are not a traffic light.

    The limits, before you ask

    Not an oracle

    We do not return a verdict: we return evidence with its composition.

    Not a bridge

    We read logs and apply a policy.

    Not a people search

    You search by wallet because a wallet is a public address, not a person.

    Lookup is by address, never by name.

    The charging model

    It is not an intuition: it is a cost rule.

    GET /leaderboard
    THE HOOK. A single query that serves everybody.
    GET /leaderboard?offset=…&type=…
    Paginating or filtering is no longer showing up, it is extracting.

    There are no keys, no registration, no accounts.

    Raw HTTP does not do this comparison for you.

    And today you cannot install it.

    The reading contract

    Everything claimed here is read from the API or carries the date it was measured on.

    What one lookup returns

    Paste a wallet. Get the number, and what the number is made of.

    Free, live, no key: the score with its composition

    Paid, per call: the breakdown behind it

    Look up a wallet → Browse the index

    Six measured traps

    No ratings ≠ zero

    The field arrives null and the index refuses to collapse them.

    declared_type is not a type

    ERC-8004 has no type field. Never treat it as verification.

    tag1 is free text on-chain

    Escape everything that comes from the chain.

    undated_reviews > 0

    It is not a bug in either of them.

    The leaderboard does not order by average

    It orders by the Bayesian mean.

    There are three policies, and they are versioned separately

    Merging them would mark 451,774 ratings as recomputed.

    Why we publish this.

    Blocks, not dates

    The summary the chain returns carries no txHash, no block, no timestamp.

    Cumulative score, rating by rating, ordered by block.

    Some ratings are waiting for the log scan to reach them.

    The per-chain prior

    Narrowing to a chain redefines the number.