Reference

This page is the complete, precise reference for the skillz command surface, JSON output, exit codes, environment variables, file locations, and supported agents. It is meant for lookup, not for learning. To learn by doing, start at Installing Skills and Authoring Skills.

Every command prints the same per-command help at the terminal. Run dnx skillz <command> --help to see the synopsis, arguments, and options for that command.

Bash
dnx skillz add --help
Description:
Add a skill from a source
Usage:
skillz add [<source>] [options]
Arguments:
<source> Source to fetch skills from (e.g., owner/repo, URL, local path)
Options:
-g, --global Install globally
-a, --agent Target agent(s)
-s, --skill Skill name filter(s)
-y, --yes Skip prompts (non-interactive)
--all Install all skills to all agents
--copy Copy instead of symlinking
--full-depth Scan nested directories for skills
-l, --list List available skills without installing
-?, -h, --help Show help and usage information

The binary on your PATH is skillz. Install it with dotnet tool install -g skillz, or run it without installing via dnx skillz <command> (requires the .NET 10 SDK or later). Both forms accept the same commands, arguments, and options documented below.

Commands

skillz has five commands: add, remove, list, update, and init. Each command's options are independent. There are no shared global options beyond --help and --version (see Global flags).

skillz add <source>

Add skills from a source. Skills are discovered at the source, then materialized into a canonical store and linked into each target agent's skills directory.

dnx skillz add <source> [options]

Arguments

ArgumentArityRequiredDescription
sourceoneyesSource to fetch skills from (for example owner/repo, a full git URL, or a local path). If omitted, the command exits 1 with Missing required argument: source.

Options

OptionAliasTypeDefaultDescription
--global-gboolfalseInstall to the global scope (your home directory) instead of the current project.
--agent-astring (repeatable)(auto-detected)Target agent(s). Repeatable and space-separated (--agent claude-code cursor or --agent claude-code --agent cursor). --agent * targets every agent. See Supported agents.
--skill-sstring (repeatable)(all)Install only skills whose name matches the given filter(s). Repeatable.
--yes-yboolfalseSkip all prompts and run non-interactively.
--all(none)boolfalseInstall all skills to all agents. Implies --skill *, --agent *, and --yes.
--copy(none)boolfalseCopy skill files into each agent directory instead of symlinking. Use for agents that do not follow symlinks.
--full-depth(none)boolfalseWiden discovery to scan nested directories in the source, not only the source root. This does not change the git clone (clones are always shallow).
--list-lboolfalseList the available skills at the source without installing anything, then exit.

The default install mode is symlink: skillz materializes each skill once into a canonical store and creates a relative symlink from each agent directory back to it. Pass --copy to copy instead. When every selected agent shares one skills directory, copy is used automatically.

For sources, scopes, and install mechanics, see Installing Skills. For agent targeting, see Supported agents.

skillz remove [skills...]

Remove installed skills. With no skill names and an interactive terminal, skillz prompts you to select which skills to remove.

dnx skillz remove [skills...] [options]

Arguments

ArgumentArityRequiredDescription
skillszero or morenoSkill names to remove. Matched case-insensitively. With no names and no --all, runs interactively.

Options

OptionAliasTypeDefaultDescription
--global-gboolfalseRemove from the global scope instead of the current project.
--agent-astring (repeatable)(all)Limit removal to specific agent(s). Repeatable.
--yes-yboolfalseSkip prompts and run non-interactively.
--all(none)boolfalseRemove every installed skill.

In interactive mode, skillz shows a multiselect prompt followed by a confirmation prompt. The confirmation defaults to no. Declining the confirmation prints Removal cancelled and exits with code 130 (see Exit codes).

$ dnx skillz remove alpha
# exit 130
Removal cancelled

skillz list

List installed skills. With no options, lists the current project's skills.

dnx skillz list [options]

This command takes no positional arguments.

Options

OptionAliasTypeDefaultDescription
--global-gboolfalseList skills in the global scope instead of the current project.
--agent-astring (repeatable)(none)Filter the listing to specific agent(s). Repeatable.
--format(none)text | jsontextOutput format. json emits a JSON array to stdout (see JSON output).
--json(none)boolfalseShorthand for --format json.

JSON output is enabled when either --json is present or --format json is set (case-insensitive). Enabling JSON suppresses the banner and writes the array to stdout.

skillz update [skills...]

Check for available updates and print the exact command to apply each one.

dnx skillz update [skills...] [options]

Aliases: upgrade and check. dnx skillz upgrade and dnx skillz check are identical to dnx skillz update.

Warning

update only reports. It never modifies files or lock files. For each skill that has an update, it prints a skillz add ... command you can copy and run to apply it (run it as dnx skillz add ... if you use dnx). The command always exits 0, even when updates are available. Its output ends with no updates were applied.

Arguments

ArgumentArityRequiredDescription
skillszero or morenoOptional skill names to check. Scope is resolved the same way with or without names (see the scope options below).

Options

OptionAliasTypeDefaultDescription
--global-gboolfalseCheck global skills only.
--project-pboolfalseCheck project skills only.
--yes-yboolfalseSkip the interactive scope prompt. Non-interactive runs check both scopes.

With neither -g nor -p, an interactive terminal prompts you to choose Project, Global, or Both. Passing both flags, or running non-interactively, checks both scopes.

$ 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.

skillz init [name]

Scaffold a new skill directory containing a SKILL.md template. This command has no options.

dnx skillz init [name]

Arguments

ArgumentArityRequiredDescription
namezero or onenoSkill name. Creates <name>/SKILL.md. The name is sanitized to a slug. With no name, derives the slug from the current directory and writes SKILL.md in place.

If the target SKILL.md already exists, skillz does not overwrite it. It prints Skill already exists at <path> and exits 0.

$ dnx skillz init my-skill
Initialized skill: my-skill
Created:
my-skill/SKILL.md
Next steps:
1. Edit my-skill/SKILL.md to define your skill instructions
2. Update the name and description in the frontmatter
Publishing:
GitHub: Push to a repo, then skillz add <owner>/<repo>
URL: Host the file, then skillz add https://example.com/my-skill/SKILL.md

See Authoring Skills for the SKILL.md format and publishing workflow.

Global flags

These are provided on the root command and on every subcommand.

OptionAliasesTypeDescription
--help-h, -?boolShow help. On a subcommand, shows that command's help.
--version(none)boolPrint the installed skillz version and exit 0.

Running skillz with no arguments shows the banner and exits 0. Running dnx skillz --help shows curated top-level help. A bare -- token is removed before parsing, so dnx skillz add --agent codex -- owner/repo parses the same as without it.

JSON output

dnx skillz list --json (equivalently dnx skillz list --format json) prints a JSON array to stdout. Each element describes one installed skill.

Bash
dnx skillz list --json
JSON
[
{
"name": "alpha",
"path": "/home/you/project/.agents/skills/alpha",
"scope": "project",
"agents": ["Claude Code", "Windsurf"]
}
]
FieldTypeDescription
namestringThe skill's sanitized name (its on-disk directory name).
pathstringAbsolute path to the skill in the canonical store.
scopestring"project" or "global". "global" when listed with -g, otherwise "project".
agentsstring[]Display names of agents linked to this skill (for example Claude Code). Empty when the skill is not linked to any agent.

The array is written to stdout, so you can pipe it to a tool such as jq. Banner and progress output are suppressed in JSON mode.

Exit codes

skillz uses exactly three exit codes.

CodeNameMeaning
0SuccessThe command completed. Note that update exits 0 even when updates are available, and remove exits 0 when there is nothing to remove.
1FailureThe command failed (for example an invalid agent name, no valid skills found, or a file system error). The error message is written to stderr.
130CancelledThe operation was cancelled, either by declining an interactive confirmation or by pressing Ctrl+C.

Environment variables

VariableDefaultEffect
SKILLZ_CLONE_TIMEOUT_MS300000Git clone timeout in milliseconds (5 minutes). Must parse to a positive integer, otherwise the default is used. Raise it for large repositories or slow networks.
GITHUB_TOKEN(unset)A GitHub API token. Used only by update to raise GitHub API rate limits when checking for updates. Not used for cloning.
GH_TOKEN(unset)Fallback GitHub API token. Consulted by update after GITHUB_TOKEN. Same effect.
INSTALL_INTERNAL_SKILLS(unset)Set to 1 or true to include skills their authors marked as internal in discovery. By default such skills are hidden.
CLAUDE_CONFIG_DIR~/.claudeOverrides the Claude Code configuration directory used for detection and global installs.
CODEX_HOME~/.codexOverrides the Codex configuration directory used for detection and global installs.
VIBE_HOME~/.vibeOverrides the Mistral Vibe configuration directory used for detection and global installs.
XDG_DATA_HOME~/.local/shareRoot for the global lock location. The global lock lives at $XDG_DATA_HOME/skillz/.skill-lock.json.

XDG_CONFIG_HOME (default ~/.config) and XDG_STATE_HOME (default ~/.local/state) affect where skillz keeps its own configuration and logs, and where several agents resolve their global directories.

For private repositories, skillz shells out to git and uses your existing git credentials (SSH agent, credential helper, gh auth). See Troubleshooting for authentication and rate-limit guidance.

File locations

skillz writes a lock file per scope and materializes skills into a canonical store. Project scope is the current working directory; global scope is your home directory.

ScopeLock fileCanonical skills store
Projectskills-lock.json (in the current working directory)./.agents/skills
Global~/.local/share/skillz/.skill-lock.json (or $XDG_DATA_HOME/skillz/.skill-lock.json)~/.agents/skills

Non-universal agents receive a symlink from their own directory (for example .claude/skills/<name>) back into the canonical store. Universal agents use the canonical store directly. See Supported agents for per-agent directories.

Supported agents

skillz supports more than 50 agents (55 in total). It detects which agents are installed on your machine by probing each agent's configuration directory, and it detects which agent it is running inside by reading environment variables that agent hosts set. When run inside a detected agent, add runs non-interactively and targets that agent plus the universal agents.

Agent identifiers are case-sensitive (the identifier is github-copilot, not copilot). The --agent option is repeatable and accepts multiple values per token. --agent * targets all agents. "Universal" agents share the .agents/skills store, so installing a skill for one universal agent makes it visible to all of them.

In the table below, project directories are relative to the working directory and global directories are absolute (~ is your home directory, <config> is $XDG_CONFIG_HOME or ~/.config). Agents marked "universal" use the shared .agents/skills store at project scope.

IdentifierDisplay nameProject directoryGlobal directory
adalAdaL.adal/skills~/.adal/skills
aider-deskAiderDesk.aider-desk/skills~/.aider-desk/skills
ampAmp.agents/skills (universal)<config>/agents/skills
antigravityAntigravity.agents/skills (universal)~/.gemini/antigravity/skills
augmentAugment.augment/skills~/.augment/skills
bobIBM Bob.bob/skills~/.bob/skills
claude-codeClaude Code.claude/skills~/.claude/skills (via CLAUDE_CONFIG_DIR)
clineCline.agents/skills (universal)~/.agents/skills
codearts-agentCodeArts Agent.codeartsdoer/skills~/.codeartsdoer/skills
codebuddyCodeBuddy.codebuddy/skills~/.codebuddy/skills
codemakerCodemaker.codemaker/skills~/.codemaker/skills
codestudioCode Studio.codestudio/skills~/.codestudio/skills
codexCodex.agents/skills (universal)~/.codex/skills (via CODEX_HOME)
command-codeCommand Code.commandcode/skills~/.commandcode/skills
continueContinue.continue/skills~/.continue/skills
cortexCortex Code.cortex/skills~/.snowflake/cortex/skills
crushCrush.crush/skills~/.config/crush/skills
cursorCursor.agents/skills (universal)~/.cursor/skills
deepagentsDeep Agents.agents/skills (universal)~/.deepagents/agent/skills
devinDevin for Terminal.devin/skills<config>/devin/skills
dextoDexto.agents/skills (universal)~/.agents/skills
droidDroid.factory/skills~/.factory/skills
firebenderFirebender.agents/skills (universal)~/.firebender/skills
forgecodeForgeCode.forge/skills~/.forge/skills
gemini-cliGemini CLI.agents/skills (universal)~/.gemini/skills
github-copilotGitHub Copilot.agents/skills (universal)~/.copilot/skills
gooseGoose.goose/skills<config>/goose/skills
hermes-agentHermes Agent.hermes/skills~/.hermes/skills
iflow-cliiFlow CLI.iflow/skills~/.iflow/skills
junieJunie.junie/skills~/.junie/skills
kiloKilo Code.kilocode/skills~/.kilocode/skills
kimi-cliKimi Code CLI.agents/skills (universal)~/.config/agents/skills
kiro-cliKiro CLI.kiro/skills~/.kiro/skills
kodeKode.kode/skills~/.kode/skills
mcpjamMCPJam.mcpjam/skills~/.mcpjam/skills
mistral-vibeMistral Vibe.vibe/skills~/.vibe/skills (via VIBE_HOME)
muxMux.mux/skills~/.mux/skills
neovateNeovate.neovate/skills~/.neovate/skills
openclawOpenClawskills~/.openclaw/skills
opencodeOpenCode.agents/skills (universal)<config>/opencode/skills
openhandsOpenHands.openhands/skills~/.openhands/skills
piPi.pi/skills~/.pi/agent/skills
pochiPochi.pochi/skills~/.pochi/skills
qoderQoder.qoder/skills~/.qoder/skills
qwen-codeQwen Code.qwen/skills~/.qwen/skills
replitReplit.agents/skills (universal)<config>/agents/skills
rooRoo Code.roo/skills~/.roo/skills
rovodevRovo Dev.rovodev/skills~/.rovodev/skills
tabnine-cliTabnine CLI.tabnine/agent/skills~/.tabnine/agent/skills
traeTrae.trae/skills~/.trae/skills
trae-cnTrae CN.trae/skills~/.trae-cn/skills
universalUniversal.agents/skills (universal)<config>/agents/skills
warpWarp.agents/skills (universal)~/.agents/skills
windsurfWindsurf.windsurf/skills~/.codeium/windsurf/skills
zencoderZencoder.zencoder/skills~/.zencoder/skills

Passing an unknown identifier exits 1 and prints the full list of valid identifiers:

$ dnx skillz add ./local-path --yes --agent bogus
# exit 1
Invalid agents: bogus

See also

Last updated on June 05, 2026 by PascalSenn