Trust Card
Generate, sign, attest, and verify holistic trust cards for OKF knowledge bundles and agent skills. A card binds content, artifact, and capability provenance into one OKF concept and renders a graded trust gradient instead of a binary "verified" badge, and can be drawn as a shareable SVG cartridge. Use this skill whenever the user wants to make a skill card, trust card, or provenance card; render or visualize a card; sign or attest a bundle or skill; prove a bundle is unaltered; declare or check a permission/capability manifest; or decide whether a skill or knowledge bundle is safe to load, even if they only say "card", "sign it", "is this skill trustworthy", or "verify this bundle".
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.
The one idea that makes this work
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:
- A signature (or a transparency log, or a chain) proves origin and integrity. It can never prove behavior. A perfectly signed credential- stealer is a perfectly valid signature on malware.
- "Reflects what it does" is closed by sandboxing, audit, and declared-vs- observed checks — not by cryptography. So the card grades those separately and refuses to collapse them into one badge.
The three provenances a card binds
- content provenance — where each claim came from (OKF
# Citations,references/with fetch dates). Unique to knowledge bundles; executable skills have none because code has no sources. - artifact provenance — who shipped this exact byte sequence, unaltered (digest + signature + transparency log).
- capability provenance — what it will do. For a skill that's a
permission manifest (files/network/shell). For a knowledge bundle it's
epistemic: what it injects into context and what domain it asserts
authority over. A poisoned legal concept opens no socket; it silently
corrupts every downstream answer. That is the knowledge-bundle threat model,
and the card scores it as
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.
Commands
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
Workflow guidance
- Default to
generatethenverify --bundleso the user sees the gradient immediately. Always run verify against the live directory — that's what catches tampering (the digest is recomputed, not trusted). - Never write signing keys into the bundle. Pass
--keyto a path outside the directory. The script enforces this by excluding*.key/*.pemfrom the digest, but the key still shouldn't be committed. - Signing is optional and honest. With no signing tool and no key, the card is generated and marked unsigned rather than failing. Say so plainly.
- Read the output as a gradient. Don't report "valid/invalid". Report each
layer's grade and what it means. The point is to let the user set their own
bar via
--policy. Policy syntax and example bars are inreferences/grading.md. - For knowledge bundles, foreground the epistemic risk.
epistemic-L2means it asserts over a regulated domain (legal/medical/financial), so silent corruption is high-impact even though it executes nothing. - For skills with inferred capability, state clearly that shell/network were guessed from the code, not declared or enforced, and recommend a declared permission manifest plus a sandbox runtime as the real fix.
Visual card and render feed
A card can be drawn as a shareable SVG "cartridge", laid out like a Magic the
Gathering card. The frame color is the skill's domain, a cost pip shows the risk
tier, a rarity symbol and score box show the trust gradient, and the trust bars
and description sit in a parchment text box. 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 --jsonemits the graded gradient as JSON, the input a renderer reads (so the picture never re-implements grading).- This repo's reference renderer is
scripts/build-cards.mjs(pnpm cards), which writes aCARD.svgper skill plus an aggregatedcards.jsonfeed;pnpm cards:checkis wired into CI to fail on a stale card. - Drop a
hero.pngorhero.svginto 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.
What to tell the user about limits
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.
