SkillHub

registry

List registries for an owner, create a registry, or invite a user to one.

skillhub registry manages registries: list the registries for an owner, create a new one, or invite a user to one. Visibility (private or public) is chosen at create time with --visibility — this is the only place visibility is set, never at publish.

An invite always issues a one-time redemption link and prints it once; an invite addressed to an email is also mailed. The result reports what the mail did, so the command never claims a delivery that did not happen.

Synopsis

skillhub registry <list|create|invite> [target] [user] [--role <role>] [--visibility <visibility>] [--description <text>]

Flags

FlagDescription
--role <role>Invite role: reader, publisher, or admin
--visibility <visibility>Registry visibility on create: private or public (default private)
--description <text>Registry description on create

Examples

skillhub registry list @studio
skillhub registry create design-systems --visibility private --description "Studio design skills"
skillhub registry invite @studio/design-systems freya --role publisher

JSON output

With --json, the data object is one of, by action:

  • list{ action: "list", owner, registries[{ id, owner{ type: user | org, handle }, slug, displayName, description, readme, visibility: private | public, defaultOrgRole: none | reader | publisher | admin, reviewRequired (bool), allowPrerelease (bool), createdAt, updatedAt }], nextCursor }.
  • create{ action: "create", ref, registry{ …same registry shape } }.
  • invite{ action: "invite", ref, role: reader | publisher | admin, invite{ id, target, email, githubHandle, invitedBy{ id, handle, displayName, avatarUrl }, acceptedAt, expiresAt, createdAt }, inviteUrl, delivery }.

invite.target is one of { targetType: "org", orgHandle, role: owner | admin | member } or { targetType: "registry", ownerHandle, slug, role: reader | publisher | admin }.

delivery is what the invitation email did — a discriminated union on status:

statusFieldsMeaning
sentto, redirected (bool)The message went out. redirected is true only in a non-production test mode that rewrites recipients — the invitee did not get it, so send them the link.
skippedreason: no-address | logged | not-configured | mail-disabledNothing was mailed. no-address is a GitHub-handle invitee, which has no address to resolve; the link is that invitation's delivery.
rate-limitedretryAfterSeconds (int ≥ 1)Your recent sending spent a per-caller budget. The invitation is still valid — hand over the link.
failedretryable (bool)The provider refused or errored. The invitation is unaffected.

The invitation and its email never share a fate: the invitation is committed before any mail is attempted, so inviteUrl works whatever delivery says.

viewerRole and subscribers also appear in the registry schema, but only the single-registry read populates them — a registry list payload never carries them.

On this page