Build with trust
Everything you need to install, verify, and understand agent skills. Security scanning, cryptographic signing, and full transparency.
Vett uses Sigstore for cryptographic signing of skill manifests. Every artifact is signed with ECDSA P-256 and recorded in a public transparency log, providing verifiable provenance.
Why Signatures Matter
The problem with trust in distributed systems.
Without signatures, you have to trust every hop between the source and your machine: the CDN, the network, the registry, the storage layer. Any of them could serve you different content than what was originally scanned.
- CDN cache could be poisoned
- MITM could modify the download
- Storage could be compromised
- Force-push could change source
- No proof of what was scanned
- Tampering is mathematically detectable
- Only Vett can produce valid signatures
- What you install = what we scanned
- Verification happens locally
- All signatures publicly auditable
Sigstore Integration
Modern signing with public transparency.
We use Sigstore's Rekor transparency log, the same infrastructure used by npm, PyPI, and Kubernetes. Every signature is recorded publicly for auditability.
Why ECDSA P-256?
ECDSA P-256 with SHA-256 is the algorithm used throughout the Sigstore ecosystem, ensuring compatibility with Rekor's hashedrekord entry type.
P-256 provides 128 bits of security—computationally equivalent to 3072-bit RSA—with smaller key and signature sizes.
Every signature is recorded in Rekor, a public append-only log. Anyone can verify when a manifest was signed by searching the log.
Signing Flow
How we sign a skill manifest.
1{
2 "mediaType": "application/vnd.dev.sigstore.bundle+json;version=0.2",
3 "verificationMaterial": {
4 "publicKey": {
5 "hint": "v1-ecdsa-2025-02-04"
6 },
7 "tlogEntries": [{
8 "logId": "c0d23d6ad406973f9559f3ba...",
9 "logIndex": "12345678",
10 "inclusionProof": { ... }
11 }]
12 },
13 "messageSignature": {
14 "messageDigest": { "algorithm": "SHA2_256", "digest": "..." },
15 "signature": "MEUCIQDxT8..."
16 }
17}Verification Flow
How the CLI verifies a downloaded artifact.
Verification happens locally on your machine. The CLI doesn't trust the registry's claim that something is valid—it verifies independently using the known Vett public key.
vett add owner/repo/skill
...
◇ Downloaded and verified
◇ Signature verified
◇ Integrity verified (Sigstore · Rekor transparency log)
◇ Installing to vett
◇ Installed to vettTransparency Log
Public accountability for all signatures.
Every signature is recorded in Rekor, Sigstore's public append-only transparency log. This provides:
Anyone can search the log to see what was signed and when. No hidden signatures possible.
Once recorded, entries cannot be modified or deleted. The log provides cryptographic proof of inclusion.
The log entry provides proof of when the signature was created, providing an auditable timeline.
# Using rekor-cli with the vett public key
rekor-cli search --public-key /path/to/vett-signing-public.pem
# Or browse the web interface
https://search.sigstore.devGit Provenance
Tracking where skills came from.
For Git-sourced skills, we record provenance information that ties the artifact back to a specific commit. This provides auditability even if the source repository changes later.
sourceUrlThe original URL used to fetch the skillgitRefThe branch or tag name (e.g., "main", "v2.1.0")commitShaThe exact commit SHA at fetch time (40 hex characters){
"sourceUrl": "https://github.com/cursor/skills/tree/main/frontend-design",
"gitRef": "main",
"commitSha": "abc123def456789012345678901234567890abcd"
}Content-Addressed Storage
Immutability through hashing.
Signed manifests are stored using their SHA-256 hash as the storage key. This provides immutability guarantees at the storage layer.
SHA-256 has 2^128 security against collision attacks. Finding two different manifests with the same hash is computationally infeasible.
If two skills have identical content, they share the same storage key. This is expected behavior, not a bug.
You can't upload different content to the same path—changing the content changes the hash, which changes the path.
Security Properties
What Sigstore signing guarantees.
Manifest bytes haven't been modified since signing
Signed by the Vett signing key
Signature recorded in public transparency log
Rekor entry timestamp proves when signing occurred