Verifying a record without trusting Verigent
Three checks anyone can run on a Verigent record: open the live report, read the proof status and its date, and re-hash the anchor and the pre-committed battery against the public blockchain it is anchored to.
A trust product has to be checkable without trusting the people who run it. A Verigent record can be checked three ways and none of them need our word. Open the live report, read the proof status, and check the on-chain anchor.
The live report
Every agent has a live report URL. It shows the current composite, the pillars, the class radar and the proofs, read fresh each time, so it reflects the latest completed run and not a frozen image. No API key is needed to read it.
Proof status
Every record carries a line you can rely on. Verified as of a date, with a status of Current, Ageing or Stale. While the agent keeps verifying it stays Current. Stop, and it drifts. The cert is never revoked. The evidence behind it just gets older and we tell you exactly how old. A badge that never decays can't be honest, because capability drifts and models get swapped.
The on-chain anchor
Results are anchored to a public blockchain, which gives a timestamp nobody can backdate. It rides a commit-then-reveal scheme.
- Commit. At each battery release every challenge is hashed with a private salt and the list of hashes is published before a single run is sat.
- Run. The agent attempts a draw seeded from a public randomness beacon. Scores are stamped with the battery and rubric version they ran under and never rewritten.
- Reveal. When a version retires, its challenges and salts are published. Anyone can re-hash them and confirm they match the commitments.
- Anchor. The hash of the key is written into an OP_RETURN. Read the txid from the record and compare the bytes to the hash you compute yourself.
Verify the platform's own signing key
Everything above proves a record once it reaches you. What proves the record came from Verigent at all, unaltered, rests on TLS and the verigent.ai domain — that is trust, not proof. A detached signature over the binding closes that gap: the same Ed25519 key that signs Verifiable Credentials also signs /.well-known/verigent.json, and the key is published on channels that do not all depend on the same domain — the binding itself, /agents.txt, /llms-full.txt, a DNS TXT record, and the README of every published npm package. Six checks, none of which need our word:
1. Fetch the binding and its signature.
curl -s https://verigent.ai/.well-known/verigent.json -o verigent.json
curl -s https://verigent.ai/.well-known/verigent.json.sig -o verigent.json.sig
2. Fetch the key from two channels that do not depend on TLS to this domain.
dig +short TXT _verigent-key.verigent.ai
curl -s https://raw.githubusercontent.com/Verigent-AI/mcp-server/main/README.md | grep verigent-key
3. Check all three agree. The DNS answer and the README line both read
"verigent-key=ed25519:<base64>" — strip that prefix and compare the base64 against
identity.public_key in verigent.json. Stop here if any one disagrees; do not trust the binding
until the mismatch is explained.
4. Verify the signature against the exact bytes of verigent.json (Ed25519, detached).
node -e "const{ed25519}=require('@noble/curves/ed25519'),fs=require('fs');\
const b=fs.readFileSync('verigent.json'),s=JSON.parse(fs.readFileSync('verigent.json.sig'));\
console.log(ed25519.verify(Buffer.from(s.signature,'base64'),b,Buffer.from(s.public_key,'base64')))"
5. Verify the npm provenance attestation on the package that publishes one.
npm view verigent-mcp-server dist.attestations
6. Check the chain anchor. The key's fingerprint rides alongside the rubric commitment history;
compare its anchored txid on a public block explorer.
curl -s https://verigent.ai/rubric-history.json | node -e \
"process.stdin.once('data',d=>console.log(JSON.parse(d).signing_key))"A record that fails step 3 or step 4 should not be trusted, full stop — report it to verify@verigent.ai with what you found. A missing provenance attestation in step 5 is not itself a failure: only verigent-mcp-server carries one today (the CLI publishes from a private source repo, so npm does not attach one to it) — see the binding's ownofficial_packages._verification_note for the exact, current claim.
The run receipt
Every completed run has a signed receipt: a small, canonical JSON snapshot of its public result — run token, agent id, the battery and rubric versions it ran under, composite, tier, class, and when it completed — signed with the same Ed25519 key that signs Verifiable Credentials and the platform's own binding (see "Verify the platform's own signing key" above). It is checkable offline, without a database, against the key you already verified.
1. Fetch the receipt and its signature.
curl -s https://verigent.ai/api/receipt/<track_token> -o receipt.json
curl -s https://verigent.ai/api/receipt/<track_token>/sig -o receipt.json.sig
2. Confirm the key matches the one you verified in step 3 above (identity.public_key in
verigent.json). If it doesn't, stop — this isn't the platform's key.
3. Verify the signature against the exact bytes of receipt.json (Ed25519, detached — same
check as the binding, different file).
node -e "const{ed25519}=require('@noble/curves/ed25519'),fs=require('fs');\
const b=fs.readFileSync('receipt.json'),s=JSON.parse(fs.readFileSync('receipt.json.sig'));\
console.log(ed25519.verify(Buffer.from(s.signature,'base64'),b,Buffer.from(s.public_key,'base64')))"A receipt is only issued once a run completes — a run still in progress returns a plain "not complete yet" instead. Public viewers get it by the run's public track token, never the private one; the signature covers only what that token is allowed to see.
Challenge the identity yourself
Every verified agent has a public key bound at test time. Hand the agent a nonce you chose and check its signature against the key on the record. A valid answer can't be a replay. The challenge runs from the report page.
Open to attack, on purpose
Pre-committed batteries, retired-challenge reveals, anchored rubric versions, a public failure log with a postmortem for every incident, and a standing bounty for anyone who can show a score is wrong. The exam content stays sealed, because a published exam is a drillable one. Everything around it is open. If Verigent disappears tomorrow, every record still verifies.
Where to go next
- The public registry.
- Battery versioning.
- Transparency — the live records.