CLI
The package is @skst/skill; the command is skst. Run it with npx or install it.
npx @skst/skill add alice/code-reviewer # one-off
npm i -g @skst/skill && skst add alice/code-reviewer
add installs into the shared .agents/skills/ directory (plus each detected agent's
own skills dir — Claude Code, Cursor, Codex, …) so any agent can use what you install.
Commands
skst add <owner>/<skill> # install a skill (aliases: a, install, i)
skst find [query] # search the registry (aliases: f, search, s)
skst top # most-installed skills (--trending / --hot / --json)
skst list # list installed skills (alias: ls; --json)
skst update [skill…] # update installed skills (aliases: check, upgrade)
skst remove [skill…] # uninstall (aliases: rm, r)
skst use <owner>/<skill> # print a skill's prompt, no install
skst init [name] # scaffold a new SKILL.md
skst publish [owner/skill] # publish the current skill directory
skst versions <owner>/<skill># list a skill's versions
skst unpublish <owner>/<skill>
skst experimental_sync # sync skills from node_modules (-y to skip prompts)
skst login | logout | whoami # auth
Run skst <command> --help for the full flag list.
Syncing skills from node_modules
Some skills ship inside npm packages. skst experimental_sync scans your
node_modules (scoped and top-level) for any SKILL.md, then installs each one
into the standard .agents/skills/ directory (and every detected agent's skills
dir), recording hashes in the lockfile so re-runs only update what changed:
skst experimental_sync # discover + sync, with a confirmation prompt
skst experimental_sync -y # sync without prompts (CI / scripts)
It's marked experimental_ because the npm-package-as-skill convention isn't part
of the agentskills.io standard yet — the flag name may change.
Where add installs from
The source format decides where a skill comes from:
| You type | Resolves to |
|---|---|
owner/skill | the Skill Studio registry artifact (default) |
owner/skill --remote=github | the same name, but from GitHub instead |
github.com/owner/repo | a GitHub repo (blob fast-path, else clone) |
./path or /abs/path | a local directory |
Bare owner/skill goes to the registry first; if it isn't published there, the CLI tells
you to pass a github.com URL or add --remote=github rather than silently cloning.
skst add alice/code-reviewer # registry
skst add alice/code-reviewer --remote=github # force GitHub
skst add github.com/you/skills-repo # a repo (public, or private via gh/git)
You can pin a ref and pick a skill: owner/repo#branch@skill-name.
Common add flags
-g, --global # install for all projects (~/) instead of this project
-a, --agent <a…> # target specific agents (space-separated, or '*')
-s, --skill <s…> # pick skills when a repo has several (or '*')
-y, --yes # skip prompts
-l, --list # list a source's skills without installing
--copy # copy files instead of symlinking
--dry-run # resolve + print would-be writes, touch nothing
Preview without installing
--dry-run (or SKST_DRY=1) resolves a skill and prints exactly what would be
written — every target path and the lockfile — without touching disk:
skst add alice/code-reviewer --dry-run
Signing in
skst login opens a browser device flow — approve, and you're in. No token to copy.
skst login --no-browser # print the verification URL + code instead of opening a browser
skst login --paste # paste an access key from skst.dev/settings/tokens
skst login --token KEY # non-interactive / CI (or set SKILL_STUDIO_TOKEN)
skst whoami # show the signed-in user
skst logout # clear credentials
Private GitHub repos
skst add github.com/you/private-skills works when gh or git is authed — private
repos use your existing GitHub credentials.
Environment variables
SKILLS_API_URL # point every command (search, API, downloads) at another instance
SKILL_STUDIO_TOKEN # auth token for CI / headless (skips interactive login)
SKST_DRY=1 # same as --dry-run
So you can run the CLI against a local dev server or a self-hosted registry:
SKILLS_API_URL=http://localhost:9797 skst add alice/code-reviewer --dry-run
skst login --url http://localhost:9797 # ...or persist it once