Skip to main content

Publisher identity

Why. Integrity proves the bytes belong together. It does not prove who put them there. A skill signed by a key you have never heard of is intact, but that tells you nothing about whether to trust it. Provenance is the other half.

How. A publisher key is an identity on its own. Hashing the key gives a stable, portable identifier that needs no registry and no network. A publisher can then tie that identity to a name they control, and you can check the tie yourself. SkillSeal reports how strong the tie is; it never decides trusted for you.

What. On install, SkillSeal reports one of three levels.

LevelMeaning
cryptographicA domain the publisher named proved control of this key.
configTrusted on first use: the same key as last time, but not tied to a name.
unsignedNo signature at all. The publisher is unproven. Refused by default.

Tie a key to a domain

A publisher claims a handle and proves it by serving one file. Control of the domain is the proof, so no third party is trusted.

PUBLISHER_SEED="your-secret" skillseal publish ./my-skill --bind example.com --upload

Then serve the identity at a well known path on that domain:

https://example.com/.well-known/skillseal.json
{ "anchors": ["anchor:72e6c729c0a9865caf9a5fb67ac8c1c61dcf1d385f56b5ef64eba38bb713a70d"] }

On install, SkillSeal fetches that file, confirms it lists this key, and reports cryptographic. If the file is missing or does not list the key, the claim is treated as unverified. Weaker, never fatal.

First contact

For a publisher with no domain tie, the first install is trust on first use: the key is recorded, and a later line signed by a different key for the same name is surfaced rather than accepted. A domain tie upgrades this to cryptographic. A publisher's key history can also be kept as a signed, append only log, so a key change is auditable offline with no central authority.

Honest defaults

Publishing without setting PUBLISHER_SEED signs with a shared demo key, and the tool says so plainly: those signatures prove the bytes belong together, not who made them. Unsigned lines are refused unless you pass --allow-unsigned.