website/src/docs/skillz/installing-skills.md
dnx skillz add installs skills from a source into the AI coding agents you already have. Point it at a GitHub repository and skillz discovers every SKILL.md, detects your agents, and wires the skill into each one.
dnx skillz add anthropics/skills
That single command fetches Anthropic's reference skills, then either prompts you to choose which skills and agents you want or, when it is running inside an agent, installs non-interactively. This page walks the full lifecycle: choosing a source, narrowing to specific skills and agents, picking a scope, keeping skills current, and removing them.
If you have not installed the CLI yet, start with Getting Started.
<Warning>Skills run with your agent's full permissions. A skill is executable instructions plus optional scripts that your agent runs on your machine. Install only from sources you trust, and review a skill before you use it. After every successful install, skillz reminds you: Review skills before use; they run with full agent permissions.
The source argument tells skillz where to fetch skills from. skillz infers the kind of source from the string, so you pass one positional value and nothing else.
The most common form is a GitHub owner/repo shorthand:
dnx skillz add anthropics/skills
Every source form below is accepted. The first matching rule wins, and clones are always shallow (skillz fetches only the latest commit, not the full history).
| Source form | Example | What it does |
|---|---|---|
GitHub owner/repo | dnx skillz add anthropics/skills | Installs from the repository root. The default shorthand. |
| GitHub subpath | dnx skillz add anthropics/skills/document-skills/pdf | Installs only the skill at that path in the repo. |
| GitHub branch or tag | dnx skillz add owner/repo#main | Installs from a specific ref (#branch or #tag). |
| GitHub skill filter | dnx skillz add owner/repo@my-skill | Installs only the skill named my-skill from the repo. |
| GitHub URL | dnx skillz add https://github.com/owner/repo | Full URL, with or without a trailing .git. |
GitHub tree URL | dnx skillz add https://github.com/owner/repo/tree/main/skills/foo | A /tree/<ref>/<path> URL pins the ref and subpath. |
| GitLab shorthand | dnx skillz add gitlab:group/project | Installs from GitLab. Subgroups are supported (group/subgroup/project). |
| GitLab URL | dnx skillz add https://gitlab.com/group/project/-/tree/main/skills | GitLab uses /-/tree/ (note the - segment). |
| Generic git or SSH | dnx skillz add [email protected]:owner/repo.git | Any https, ssh://, git://, or scp-style git transport. |
| Local directory | dnx skillz add ./my-skills | A local path: ./, ../, an absolute path, or a Windows drive path. |
| Well-known HTTP(S) URL | dnx skillz add https://example.com/skills | A non-git site that serves skills via .well-known discovery. |
A few notes that save time:
my-skills (no ./ prefix) is treated as owner/repo shorthand, not a local path. Use ./my-skills when you mean a local directory.owner/repo#main@my-skill.Source: line that skillz prints shows https://<redacted>@host/....A well-known HTTP source fetches a
.well-known/agent-skills/index.json(or.well-known/skills/index.json) discovery document from the site and downloads the listed skills. Every fetch is pinned to the same origin as the index, and indexes verify a SHA-256 digest per skill.
A source can contain many skills. By default, when you do not pass any filter, skillz lists what it found and lets you select interactively. To narrow the set up front, use the options below.
To preview the available skills without installing anything, pass --list (or -l):
dnx skillz add anthropics/skills --list
Source: https://github.com/anthropics/skills.git
Found 2 skill(s)
Available Skills
pdf
the pdf skill
docx
the docx skill
Use --skill <name> to install specific skills
To install one or more specific skills by name, pass --skill (or -s). The option is repeatable:
dnx skillz add anthropics/skills --skill pdf --skill docx
You can also embed a single skill filter in the source string with @name:
dnx skillz add anthropics/skills@pdf
To install every skill from the source into every detected agent, non-interactively, pass --all:
dnx skillz add anthropics/skills --all
A successful run prints the Installation Summary and Installed N skill(s) panels followed by the safety reminder, the same shape shown under How skills reach each agent.
--all is a shortcut: it selects all skills, targets all agents, and skips every prompt.
If a --skill filter matches nothing, skillz lists what was available so you can correct the name, and exits with a non-zero code:
Source: /home/you/my-skills
Found 2 skill(s)
No matching skills found for: nope
Available skills:
alpha
beta
A skill is any folder that contains a SKILL.md with both a name and a description. If the source contains no valid skills, skillz reports No valid skills found. Skills require a SKILL.md with name and description. and exits non-zero. See Authoring Skills for the format.
By default skillz detects which agents are installed on your machine and targets them. To choose explicitly, pass --agent (or -a). The option is repeatable and accepts multiple values per token, and * means every supported agent:
# repeated flags
dnx skillz add anthropics/skills --agent claude-code --agent cursor
# space-separated values in one token
dnx skillz add anthropics/skills --agent claude-code cursor
# every supported agent
dnx skillz add anthropics/skills --agent "*"
A valid --agent run prints the Installation Summary and Installed N skill(s) panels shown under How skills reach each agent, naming each agent that was linked or copied.
skillz resolves the target agents like this:
claude-code, codex, opencode on a first run).--agent passed. skillz uses exactly what you specify, after validation.These are the headline agent identifiers. Names are case-sensitive.
| Agent | --agent identifier |
|---|---|
| Claude Code | claude-code |
| Cursor | cursor |
| GitHub Copilot | github-copilot |
| Codex | codex |
| Continue | continue |
| Gemini CLI | gemini-cli |
| Windsurf | windsurf |
skillz supports more than 50 agents. For the complete list, plus the exact directory each agent installs into, see the Reference.
Because identifiers are case-sensitive, copilot and Claude-Code are not valid. An invalid value fails fast and lists every valid name so you can copy the right one:
┌─Invalid agents───────────────────────────────────────────────────────────────┐
│ Invalid agents: bogus │
│ │
│ Valid agents: adal, aider-desk, amp, antigravity, augment, bob, claude-code, │
│ cline, codearts-agent, codebuddy, codemaker, codestudio, codex, │
│ command-code, continue, cortex, crush, cursor, deepagents, devin, dexto, │
│ droid, firebender, forgecode, gemini-cli, github-copilot, goose, │
│ hermes-agent, iflow-cli, junie, kilo, kimi-cli, kiro-cli, kode, mcpjam, │
│ mistral-vibe, mux, neovate, openclaw, opencode, openhands, pi, pochi, qoder, │
│ qwen-code, replit, roo, rovodev, tabnine-cli, trae, trae-cn, universal, │
│ warp, windsurf, zencoder │
└──────────────────────────────────────────────────────────────────────────────┘
skillz installs into one of two scopes. Understanding the difference tells you where skills live and who shares them.
Project scope is the default. skillz records the installed skills in a skills-lock.json file in your working directory and materializes the skill folders under ./.agents/skills. Commit skills-lock.json so everyone who clones the repository shares the same skill set. This is the right scope for skills your whole team should use on a given project.
Global scope (--global or -g) installs skills for your user account, across every project.
dnx skillz add anthropics/skills --global
In global scope the lock file lives at ~/.local/share/skillz/.skill-lock.json (honoring XDG_DATA_HOME if you set it), and the skill folders are materialized under ~/.agents/skills.
In both scopes skillz materializes each skill once in a canonical store, then makes each targeted agent point at it.
By default, skillz writes each skill once into the canonical store and creates a symlink from every targeted agent's directory back to it. Editing the one canonical copy updates the skill for every agent at once, so you maintain a single source of truth.
flowchart LR
S["Source (repo, URL, or local path)"] --> C["Canonical store (.agents/skills)"]
C -. "symlink" .-> A1[".claude/skills"]
C -. "symlink" .-> A2[".windsurf/skills"]
C --> A3["Universal agents (.agents/skills is the store)"]
Some agents read directly from the shared .agents/skills store, so their skills directory is that store and no symlink is needed. The Reference lists which agents read from the shared store and the directory each agent installs into.
To copy files instead of symlinking, pass --copy. Use it for sandboxed agents that cannot follow symlinks (for example, agents running in containers where symlinks across mounts break):
dnx skillz add anthropics/skills --copy --agent claude-code --agent windsurf
skillz also copies automatically in two cases, so you rarely need --copy by hand:
A successful install reports which agents were linked or copied and where each skill landed:
Source: https://github.com/owner/skills.git
Found 1 skill(s)
┌─Installation Summary─────────────────────────────────────────────────────────┐
│ Canonical: /your-project/.agents/skills/alpha │
│ Symlinked: Claude Code, Windsurf │
└──────────────────────────────────────────────────────────────────────────────┘
┌─Installed 1 skill(s)─────────────────────────────────────────────────────────┐
│ ✓ alpha │
│ → /your-project/.claude/skills/alpha │
└──────────────────────────────────────────────────────────────────────────────┘
Done! Review skills before use; they run with full agent permissions.
If everything worked, you should see the Installation Summary panel followed by an Installed N skill(s) panel and the safety reminder. To confirm later, run dnx skillz list (see the Reference).
By default skillz installs the skill at the source root if one exists there. If the root is not itself a skill, skillz discovers every nested skill instead. That fast path covers most repositories.
To find skills in nested and curated directories that the default scan does not reach, pass --full-depth:
dnx skillz add owner/curated-skills --full-depth
The install reports the same Installation Summary and Installed N skill(s) panels shown under How skills reach each agent; only the set of discovered skills differs.
--full-depth widens discovery: it scans nested directories and curated locations (such as skills/.curated) so skillz finds skills the default scan would skip. It does not change clone depth. Clones are always shallow regardless of this flag.
skillz never manages or prompts for credentials. It shells out to git, which uses your own setup: SSH agent keys, a git credential helper, gh authentication, or ~/.netrc. To avoid hanging on a missing credential, skillz sets GIT_TERMINAL_PROMPT=0, so an unauthenticated clone fails fast with a clear error instead of waiting at a prompt.
To install from a private repository, make sure your normal git auth already works, then run add as usual:
dnx skillz add owner/private-skills --agent claude-code
This prints the same Installation Summary and Installed N skill(s) panels shown under How skills reach each agent, once the clone authenticates.
Before you install, verify your access with one of:
ssh -T [email protected] # confirm your SSH key reaches GitHub
gh auth login # or authenticate the GitHub CLI
A working SSH key prints the well-known success line (GitHub closes the connection because it does not provide shell access):
Hi <user>! You've successfully authenticated, but GitHub does not provide shell access.
If a clone fails with an authentication error, skillz prints guidance pointing you back to your git credentials. See Troubleshooting for the full list of clone and auth failures.
dnx skillz update checks your installed skills for newer versions. It has the aliases upgrade and check.
dnx skillz update -g
Checking for skill updates...
Checking global skill 1/1: my-skill
Found 1 global update(s)
Update available: my-skill
Run: skillz add owner/repo/skills/my-skill -g -y
Updates available for 1 skill(s); no updates were applied.
update only reports; it never applies changes. It prints the exact skillz add ... -y command to run for each skill that has an update (prefix it with dnx when you run through dnx). Copy that command and run it yourself to apply the update. The output is explicit: no updates were applied.
Scope the check the same way you scope an install:
-g (or --global) checks global skills only.-p (or --project) checks project skills only.-y), it checks both scopes.When there is nothing to update, you get a clean report:
Checking for skill updates...
Checking global skill 1/1: my-skill
All global skills are up to date
The update check calls the GitHub API. If you hit a rate limit, set a GITHUB_TOKEN or GH_TOKEN environment variable (or sign in with gh auth login) and skillz uses it for the check. See Troubleshooting for rate-limit and timeout details.
dnx skillz remove uninstalls skills. It unlinks each agent's copy and removes the canonical store entry once no remaining agent references it, then updates the lock file.
To remove specific skills by name, list them:
dnx skillz remove alpha --yes
Successfully removed 1 skill(s)
To remove everything, pass --all:
dnx skillz remove --all
Successfully removed 1 skill(s)
To limit removal to specific agents, add --agent. To target your user-level skills, add --global.
Run dnx skillz remove with no names to remove interactively: skillz shows a multi-select prompt, then a confirmation that defaults to no. Declining cancels and removes nothing:
$ dnx skillz remove
Removal cancelled
If a named skill is not installed, skillz tells you and exits cleanly without changing anything:
No matching skills found for: nope
SKILL.md with dnx skillz init.