Engineering / trust-card
Generate, sign, attest, and verify holistic trust cards for OKF knowledge bundles and agent skills.
Signed, graded provenance for this skill. Integrity, authorship, capability, and freshness as evidence you weigh, not a verified badge.
Builds a holistic trust card for an OKF bundle or an agent skill. The card
is itself an OKF concept (type: Card), so it lives in the bundle, version-
controls cleanly, and renders in any OKF viewer.
A card is graded evidence, not a verdict. It never stamps "verified". It
attaches every layer of proof the producer can supply, and the consumer
computes a trust gradient against its own policy. This is OKF's own asymmetry
applied to trust: producers are precise, consumers are forgiving — a layer
that can't be verified is reported UNVERIFIED, never a hard failure.
This matters because of two hard limits you cannot engineer around:
# Citations,
references/ with fetch dates). Unique to knowledge bundles; executable
skills have none because code has no sources.epistemic-L0..L2.The full layer-by-layer breakdown — what each proves, its trust anchor, and
whether it's solved or still open — is in references/layers.md. Read it before
explaining a card's output to a user.
The script is scripts/card.py (stdlib only; cryptography is used for local
ed25519 signing if present, and cosign is used for keyless Sigstore+Rekor if
on PATH).
bash# 1. Generate a card from a bundle or skill directory.python scripts/card.py generate <dir> \--identity did:web:example.com --expires 2027-01-01# -> writes <dir>/CARD.md and <dir>/CARD.manifest.json# -> auto-detects okf vs skill; warns if skill capability is INFERRED# 2. Sign the bound digest. Keeps the key OUTSIDE the bundle.python scripts/card.py sign <dir>/CARD.md --key ~/keys/card.key# uses cosign keyless (Sigstore+Rekor) if available, else local ed25519# 3. Attach an independent attestation (the vouching chain).python scripts/card.py attest <dir>/CARD.md \--kind scan --by did:web:scanner.example --result passpython scripts/card.py attest <dir>/CARD.md \--kind review --by did:web:auditor.example --result vouch# 4. Verify: recompute integrity from the live bundle, render the gradient,# optionally enforce a consumer policy (--json for a machine-readable gradient).python scripts/card.py verify <dir>/CARD.md --bundle <dir> \--policy integrity:STRONG,authorship:MEDIUM,capability:MEDIUM# 5. Conformance check (OKF's one hard rule + soft warnings).python scripts/card.py validate <dir>/CARD.md
generate then verify --bundle so the user sees the gradient
immediately. Always run verify against the live directory — that's what
catches tampering (the digest is recomputed, not trusted).--key to a path outside
the directory. The script enforces this by excluding *.key/*.pem from the
digest, but the key still shouldn't be committed.--policy. Policy syntax and example bars are in
references/grading.md.epistemic-L2 means
it asserts over a regulated domain (legal/medical/financial), so silent
corruption is high-impact even though it executes nothing.A card can be drawn as a shareable SVG book cover. Its digest seeds a palette,
one of six abstract print compositions, one of four layouts, and a typographic
voice. The skill's domain becomes the series line; the title and description
become cover copy; and a fixed colophon shows the six trust meters, rarity,
score, risk tier, capability model, digest barcode, and expiry. CARD.svg and
any hero.* art are decoration excluded from the integrity digest, so
styling a card never changes what it attests.
card.py verify --json emits the graded gradient as JSON, the input a
renderer reads (so the picture never re-implements grading).scripts/build-cards.mjs (pnpm cards),
which writes a CARD.svg per skill plus an aggregated cards.json feed;
pnpm cards:check is wired into CI to fail on a stale card.hero.png or hero.svg into a skill to replace the digest identicon
with real art.The full layout, the domain-to-color and trust-to-rarity mappings, the score
formula, and the feed shape are in references/rendering.md.
Be straight: this card gives verifiable origin, integrity, declared
capability, and content lineage, plus hooks for independent audit. It does
not prove the artifact is safe or does only what it claims — that needs
runtime sandboxing and human/automated audit, which the capability and
vouching layers point at but cannot replace.