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
| Flag | Description |
|---|---|
--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 publisherJSON 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:
status | Fields | Meaning |
|---|---|---|
sent | to, 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. |
skipped | reason: no-address | logged | not-configured | mail-disabled | Nothing was mailed. no-address is a GitHub-handle invitee, which has no address to resolve; the link is that invitation's delivery. |
rate-limited | retryAfterSeconds (int ≥ 1) | Your recent sending spent a per-caller budget. The invitation is still valid — hand over the link. |
failed | retryable (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.