SkillHub

install

Install skills, whole registries, or skillsets into the current scope — each ref becomes a subscription.

skillhub install installs skills, whole registries, or skillsets into the current scope. Each ref becomes (or replaces) a subscription recorded in the lockfile. With no refs, it reconciles your existing subscription set — the fresh-clone path.

Aliases: add, i.

Synopsis

skillhub install [ref…] [--global] [--agent <ids>] [--copy] [--dry-run] [--pin] [--tag <range|tag>] [--[no-]follow] [--exclude <names>]

Flags

FlagDescription
--global, -gInstall into the machine-global scope
--agent, -a <ids>Agent ids to fan out to (comma-separated, or * for all)
--copyCopy skills instead of linking them
--dry-runShow what would change without touching anything
--pinPin to the exact version given in the ref
--tag <range|tag>Range or dist-tag applied when the ref has no version qualifier
--[no-]followRegistry installs: auto-include future skills (default: true). --no-follow freezes the member list at install time
--exclude <names>Registry installs: skill names to exclude (comma-separated)

Examples

skillhub install @studio/design-systems/tokens-workflow
skillhub install @studio/design-systems --no-follow --exclude legacy-skill
skillhub install sh:vercel-labs/agent-skills/changelog
skillhub install   # reconcile existing subscriptions (fresh clone)

JSON output

With --json, the data object contains:

  • scope (project | global), dryRun (bool), upToDate (bool).
  • added[], updated[], removed[], unchanged[] — each item { ref, name, version, previousVersion? }.
  • copyMode[] — skill names that fell back to copy.
  • agents[].
  • gitignore{ action: extended | unchanged | skipped, reason?: no-managed-block | malformed-block | not-a-git-repo | global-scope | dry-run, added[] }. Emitted by every command that can perform the write, but schema-optional, so a consumer pinned to an older shape keeps parsing — don't assume it's there. reason appears only when action is skipped; added is empty unless action is extended. See the managed block below.

The managed .gitignore block

Installing can reach an agent directory that did not exist when you ran skillhub init — a teammate's fan-out target, or an agent you installed since. When it does, install extends the managed .gitignore block to cover the new directory, so the never-touch guarantee holds for agents added after bootstrap. The extension is purely additive: nothing already inside the block is removed, reordered, or reformatted.

It refuses to act, without touching the file, when there is no well-formed block to extend — no .gitignore, one without the managed markers, or damaged markers. That is what keeps an init --no-gitignore decision honoured for the life of the project. The gitignore.reason field names which of those applied.

On this page