publish
Validate, scan, pack, and publish a skill version — single-dir or bulk.
skillhub publish validates, scans, packs, and publishes a skill version. A
single-dir publish is promptless; passing multiple directories is the bulk path,
which confirms each skill (use --yes to batch). A blocking local scan exits
with code 4 before any network call is made.
The target registry comes from the manifest's publishConfig, or you can
override it with --to <@owner/registry>. Visibility is not set here — there
is no --access flag. A registry's visibility (private or public) is chosen when
the registry is created, via registry create --visibility
or the dashboard.
Synopsis
skillhub publish [dir…] [--to <@owner/registry>] [--version <semver>] [--tag <tag>] [--type <type>] [--allow-warnings] [--yes] [--force]Flags
| Flag | Description |
|---|---|
--to <@owner/registry> | Target registry (@owner/registry); overrides the manifest's publishConfig |
--version <semver> | Exact version to publish; overrides the manifest's version metadata (cannot be used with a bulk multi-dir publish) |
--tag <tag> | Dist-tag to move on success (default: latest, per server policy) |
--type <type> | Skill type override: project, general, or meta |
--allow-warnings | Acknowledge benign structural warnings (nesting depth, entry count) and publish without prompting |
--yes | Confirm every skill in a bulk multi-dir publish without prompting |
--force | Upload despite blocking scan findings (registry admins only) |
Examples
skillhub publish --to @studio/design-systems
skillhub publish ~/.claude/skills/* --to @studio/design-systems --type general
skillhub publish --tag betaJSON output
With --json, the data object contains:
published[]— each{ ref, version, tag (string|null — null when a review policy withheld it), scanStatus: pass | warn | fail | pending, warnings[] (structural warnings recorded on the version) }.skipped[]— directories whose per-skill confirmation was declined.