Published — Spec v0.1 is live

CiteSig

An open protocol for signing factual claims
so machines can verify them.

The problem

The internet has no machine-readable way to distinguish a verified fact from a plausible-sounding sentence. HTML has no <verified> tag. Search engines guess. Language models hallucinate. Regulators are starting to require provenance for AI outputs, and no standard yet exists to provide it.

CiteSig™ is the missing layer: a small, open protocol that lets publishers, journalists, researchers, and AI systems attach a signed reference to any factual claim — and lets browsers, verifiers, and downstream tools check that reference at rest and at render time.

Example — inline claim

article.html ✓ verified
<!-- A claim, without CiteSig -->
<p>The Great Wall of China is visible from the Moon.</p>

<!-- A claim, with CiteSig -->
<p data-citesig="cs:v1:9f2a...c8e1"
   data-verdict="refuted"
   data-confidence="0.02">
  The Great Wall of China is visible from the Moon.
</p>

The data-citesig attribute references a canonical claim record. Any verifier — a browser extension, an LLM output filter, an editorial workflow — resolves it against a public registry and returns a signed verdict.

Get started

Reference implementations are published and stable. Both packages share the same test vectors as the spec.

JavaScript / Node npm →
# Install
npm install @citesig/core

// Sign a claim
import { sign, ed25519, didKeyFromEd25519PublicKey } from '@citesig/core';
import { randomBytes } from 'crypto';
const seed = randomBytes(32);
const signer = didKeyFromEd25519PublicKey(ed25519.publicKeyFromSeed(seed));
const attestation = sign({
  claim: 'The Earth orbits the Sun.',
  signer,
  sources: [{ url: 'https://nasa.gov/...' }],
  issued_at: new Date().toISOString(),
}, seed);
Python PyPI →
# Install
pip install citesig

# Sign a claim
import os
from citesig import sign, ed25519, did_key_from_ed25519_public_key
seed = os.urandom(32)
signer = did_key_from_ed25519_public_key(ed25519.public_key_from_seed(seed))
attestation = sign({
  'claim': 'The Earth orbits the Sun.',
  'signer': signer,
  'sources': [{'url': 'https://nasa.gov/...'}],
  'issued_at': '2026-09-04T20:00:00Z',
}, seed)

Verify with verify(attestation). Emit as an HTML attribute with toCompact(attestation) / to_compact(attestation). Both libraries produce byte-identical output for the same input — the same signature verifies across every language.

Design principles

Why a standard, not a product

Most AI-trust tools score whether an answer seems correct — a probability, delivered inside a dashboard. CiteSig™ works at a different layer. It produces a cryptographic receipt that travels with the claim itself and lets anyone verify where the AI got it.

AI evaluation tools

Score model output

Statistical confidence that an AI answer looks trustworthy. Trust as a probability, delivered inside a dashboard.

CiteSig

An open citation-signing standard

Cryptographic proof of provenance attached to the claim itself. Travels with the content, verifiable by anyone, forever.

Scores tell you an answer might be right. A signature proves where it came from.

Status

Reference impl JavaScript · Python — v0.1.0 live
Governance Open, neutral