about why this exists, what it does, where it goes
See the cat? See the cradle?
In Kurt Vonnegut's Cat's Cradle a child is shown the string figure and cannot find the cat or the cradle in it. There is nothing there but string, and the shapes the string makes between two pairs of hands. The book's invented religion has a word for the group of people your life is actually tangled with, whether or not you know it: a karass. It has another word for the groups people announce they belong to, the nation, the alumni association, the fan club: a granfalloon. A granfalloon is a label. A karass is a set of relationships.
Nearly everything the web tells you about a person is a granfalloon. A verified tick. A follower count. A bio. A badge you can buy. None of it is made of relationships, and all of it can be minted.
attest takes the other view. A key here has no profile, no badge and no score of its own. It is defined entirely by what it has signed, who has vouched for it, and what it turned out to be right about. Pull those strings away and there is nothing left, which is the point. You cannot buy a shape that is made only of other people's hands.
What it is
A public bag of signed statements about URLs and about keys, and a service that lets any web page use it without running accounts.
- You sign up once, with a passkey. Your phone or laptop holds the private key. We hold a handle and a public key, nothing else.
- Any site can put an upvote, a comment box, a vouch or a public statement on a page with one script tag. The site keeps no users, no passwords, no database. Static pages on a CDN work.
- Every statement is signed by your key, timestamped, and appended to a log anyone can mirror. Anyone can check a statement against the log and your public key without asking us.
- Counts are a plain cacheable GET. What a key has attested is a plain GET. The whole log is a plain GET.
Your identity is the key. You can prove a key is yours by naming it somewhere public, and you can also throw it away. A key that behaves badly can be abandoned, and its owner can start over from zero. Reputation belongs to the key. Mistakes are escapable, at the cost of the years it takes to earn standing again.
What is built today
| piece | how |
|---|---|
| Sign-up and sign-in | Passkeys (WebAuthn, ES256). The passkey's public key becomes a did:key. No email, no password, no recovery questions. |
| Silent signing | On sign-in your passkey signs a 30-day delegation to a device key that lives in the site's own browser storage and never leaves it. Upvotes are then signed locally with no prompt. Each site gets its own device key, so a site cannot act as you on another site. |
| Records | upvote, comment, vouch, statement, retract. Targets: a URL, a DOI, an ISBN, a key, a service handle, a content hash. One upvote per key per target; retraction is its own signed record. |
| Reads | /read?targets=… for counts and recent comments, /by/<did> for everything a key signed, /record/<id> for one envelope, /log?since=… for mirrors. |
| Live | One socket per page; counts push to everyone watching the same target. |
| Checking | A record's id is the SHA-256 of its canonical JSON. Its signature verifies against the device key in the delegation; the delegation verifies against the passkey's public key, which /by publishes. No call to us is needed for either. |
| Limits | Per-address and per-key rate limits on writes. Reads carry cache headers for CDNs. |
Why
Nothing on the web scores the people and outlets that feed us. The founder's phrase for it: "I liken this to the food and drug administration, or to a river; I am being fed pollutants and there isn't even any scoring." PageRank scored emitters once. The platforms took it away and score items, or nothing.
From the builder's side the same gap looks different. A small publication should not have to write its own sign-up, votes and comments, and should not have to hand its readers to a platform that then owns the relationship. Every small service rebuilds the same identity layer, badly, and each rebuild is another silo where reputation cannot travel.
Those are one problem. Signed statements are the anchor. Everything else, scores included, can be rebuilt by anyone from the log. The longer argument, with a fungus in it, is the essay Foundations of Trust.
What is different about it
We read forty-eight prior efforts before writing a line. Labelers on the AT Protocol, Community Notes, the Ethereum Attestation Service, Nostr reactions, Advogato's trust metric, EigenTrust, SybilGuard, Certificate Transparency, the web of trust, Keybase, the outlet raters. None combines ordinary sign-up with a key the person holds, signed statements about arbitrary URLs and keys, a read endpoint a static page can render, and trust computed by bounded flow with burnable identity. Each of the nearest is missing at least two of those. The flow-based trust math was worked out twenty years ago and shelved because nobody had an adversary worth it. The adversary has arrived.
- Emitters are scored, not items. An article inherits the standing of whoever wrote it and whoever vouched for it.
- The score is never global. When scoring lands, every answer will be "trusted as seen from this root", and the asker picks the root. A million fake keys vouching for each other in a cluster you never touched cannot reach you. There is no symmetric sybil-proof reputation function; there are asymmetric ones, and this is one.
- Nobody can be talked down. Negative statements are shown as evidence and never propagate. A key's standing falls only through its own record: claims that resolved false, vouches that resolved false.
- Public by construction. Statements are public records, so any analytics built on them are public too, to competitors as well. There will be no private dashboards.
- Slow trust. Standing rises at a bounded rate. Nothing irreversible should also be fast.
What comes next
In order. Each step is usable on its own.
1. A first tenant
A static news site replaces its placeholder votes with the widget, drops its plans for a users table, and keeps no server.
2. Vouches and proofs
Vouch: "I know this key's owner", one key about another. Vouching costs the voucher: each key has finite capacity to give, and a vouch for a key that is later abandoned or shown false counts against the voucher's own record. Proof of control, the Keybase move: a key claims a handle or a domain, posts a signed token there, and any other key can sign that it checked. Domains are free, since a passkey account can be bound to a domain the way AT Protocol binds handles. Authorship: a key claims a content hash, timestamped in the log. That proves precedence and attribution, that this key stood behind these bytes first, and it complements C2PA, which proves which camera or editor a file came out of.
3. Institutions
A masthead holds a key, signs its articles, and separately attests "this byline is a person in our employ". The author's own key is optional. A source writing under threat gets a pseudonymous key vouched for by an institution, as a first-class case.
4. Scoring as a labeler
Trust by flow from a root through vouches, with a capacity bound at each hop so a cluster's reach is limited by how many honest vouches it can attract. Edges age. Standing rises at a bounded rate. Counts shown to sites become trust-weighted from a root the site names. Scores publish in the AT Protocol label format, so any client that subscribes to labelers can subscribe to a root's view.
5. Track record
A claim with a resolution date. Statements that support or challenge it. A resolution that stands unless challenged within a window. A Brier score per key, feeding its standing. A key that is often right earns more than a key that is often vouched for.
6. Clients
A browser extension that scores what you are reading, on any site, from your own root, and never sends the service the URLs you visit: it reads from a mirrored log or asks by hash prefix. A batch endpoint for retrieval agents, which need to weight sources today and degrade in public when they cite slop. The first mass consumer of the graph may well be a model.
7. Custody
A second passkey on the same account. Key export. Migration of an account to another host, so this service going away does not take identities with it. A mirror run by someone else.
Ways in
This project is useful in more than one way, and not all of them involve using it.
- Take the approach. Read the source (MIT), copy the shape, or just the idea: let users sign their own statements with a key they hold. A signature made here matches across every project that checks it, which gives a person durable control over their record that walled gardens do not offer. Enough projects doing this, and the web of trust people have talked about since 1992 starts to exist.
- Critique it. This was built fast by one person with a reading list. What is missing? Who did it better, and why have we not heard of them? Tell us. We read forty-eight prior efforts and would rather find the forty-ninth now than later.
- Attack it. Mint a thousand keys and vouch for each other. Burn an identity and try to come back with standing. Steal a delegation and try to use it from another site. The threat model is in the devlog; the service is in staging; break it before the readers arrive.
- Build on it. Put the script tag on a page and stop running accounts, passwords and a comments database. Outsource your sign-in and your attestations, keep your content.
- Use it. Sign up, upvote, vouch for people you know. Every signed statement is one more string in the cradle.
- Read it. The log is public and the score is deliberately not part of the service. Compute your own root's view, study the graph, feed it to a retrieval agent. Competing scorers over the same records are the design, not a fork.
- Run one. Mirror the log, or host an instance. The promise that identities and statements outlive this service holds only if someone else holds a copy.
- Fund it. Donations go to
anselm.eth. There is no company behind this, no token, and nothing for sale. - Improve it. Contribute on GitHub, or point us at the similar effort you are already part of. We would rather join than duplicate.
What it will not do
- Publish a single number called "trustworthy". Every score names its root.
- Carry a left-right axis, or any party colours. Neutrality here is arithmetic, not policy.
- Sell, log or retain what anyone reads. The extension is designed so we cannot know.
- Keep private metrics. If it is in the log it is public; if it is not in the log we do not have it.
- Bind a key to a person against their will. You can leave. It will cost you years, and that cost is what makes the standing of everyone who stays mean something.
Lineage
Friedman and Resnick, The Social Cost of Cheap Pseudonyms (the newcomer-at-zero result, and the cost we knowingly pay). Cheng and Friedman, Sybilproof reputation mechanisms (no symmetric sybil-proof score exists; asymmetric flow from a source can be). Levien, the Advogato trust metric. Kamvar et al., EigenTrust. Yu et al., SybilGuard. Cao et al., SybilRank. Gyöngyi et al., TrustRank. The AT Protocol label record and NIP-73 target grammar. Community Notes and the per-rater quality weight. Vonnegut, Cat's Cradle, 1963.