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
| Flag | Description |
|---|---|
--global, -g | Install into the machine-global scope |
--agent, -a <ids> | Agent ids to fan out to (comma-separated, or * for all) |
--copy | Copy skills instead of linking them |
--dry-run | Show what would change without touching anything |
--pin | Pin to the exact version given in the ref |
--tag <range|tag> | Range or dist-tag applied when the ref has no version qualifier |
--[no-]follow | Registry 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.reasonappears only whenactionisskipped;addedis empty unlessactionisextended. 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.