FINGERPRINT
The tuning fork of model identity. A fixed five-probe calibration set produces an Ed25519-signed ModelFingerprint/v1 cassette per scan. Comparing two scans surfaces drift as stable, minor, major, or — when the fingerprint hash diverges entirely — swap.
Phase 4 alpha
Calibration probe-set + scan + delta + MCP tool-surface enumeration ship in Phase 4. Public-vendor fingerprint history dashboards land in Phase 4+ once the studio reads fingerprint cassettes back out of the Kite Event Log.
Scan a target
pluck bureau fingerprint scan --vendor openai --model gpt-4o \
--keys ./keys --responder ./responder.js
--notarize --accept-public --out ./.fpThe --responder module default-exports a (probe, signal) => Promise<{responseText, tokens?}> function. This keeps the scanner transport-agnostic — wire OpenAI, Anthropic, OpenRouter, or a local Ollama install in 10 lines of glue.
Compare two scans
pluck bureau fingerprint delta ./from.json ./to.json --keys ./keysThe signed FingerprintDelta/v1 envelope encodes the per-probe diff plus the drift classification. Local cassettes are addressed as local:<sha256>; notarized cassettes are addressed by Rekor uuid.
MCP tool-surface
pluck bureau fingerprint mcp-enum http://localhost:8080/rpcNames + canonical schema hashes + description hashes — never verbatim prose — so an MCP server's tool list rides into a fingerprint cassette without echoing attacker-controlled bytes into the cassette body.
Predicate URIs
https://pluck.run/ModelFingerprint/v1
https://pluck.run/FingerprintDelta/v1