Engineering / trust-card
Generate, sign, attest, and verify holistic trust cards for OKF knowledge bundles and agent skills.
이 Skill의 서명되고 등급이 매겨진 출처 정보예요. 무결성, 작성자, 권한, 최신성을 검증 배지가 아니라 직접 따져 볼 근거로 보여줘요.
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.