Pluck Studio / Bureau

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 ./.fp

The --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 ./keys

The 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/rpc

Names + 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