skills
CLI Toolvercel-labs/skills
CLI to discover, install, and manage open skills for AI coding agents.
Overview
The CLI for the open agent skills ecosystem, supporting Claude Code, Codex, Cursor, OpenCode and many more agents. It installs skills from GitHub, GitLab, git URLs, local paths or direct downloads into project or global agent directories via symlinks or copies. It also offers commands to search, update, remove, list and scaffold skills.
README Preview
# skills\n\nThe CLI for the open agent skills ecosystem.\n\n\nSupports **OpenCode**, **Claude Code**, **Codex**, **Cursor**, and [75 more](#supported-agents).\n\n\n[](https://skills.sh/vercel-labs/skills)\n\n## Install a Skill\n\n```bash\nnpx skills add vercel-labs/agent-skills\n```\n\n## Use a Skill Without Installing\n\nGenerate a prompt for one skill, or start a supported coding agent interactively:\n\n```bash\nnpx skills use vercel-labs/agent-skills@web-design-guidelines | claude\nnpx skills use vercel-labs/agent-skills --skill web-design-guidelines --agent claude-code\n```\n\n`skills use` resolves sources the same way as `skills add`, writes the selected skill files to a temporary directory, and prints only the generated prompt to stdout unless `--agent` is provided. With `--agent`, it starts one supported agent interactively with the generated prompt.\n\n### Source Formats\n\n```bash\n# GitHub shorthand (owner/repo)\nnpx skills add vercel-labs/agent-skills\n\n# Full GitHub URL\nnpx skills add https://github.com/vercel-labs/agent-skills\n\n# Direct path to a skill in a repo\nnpx skills add https://github.com/vercel-labs/agent-skills/tree/main/skills/web-design-guidelines\n\n# GitLab URL\nnpx skills add https://gitlab.com/org/repo\n\n# Any git URL\nnpx skills add git@github.com:vercel-labs/agent-skills.git\n\n# Local path\nnpx skills add ./my-local-skills\n```\n\n### Private Repositories\n\nUse the same command for public and private repositories. The CLI uses the authentication already configured for the repository URL:\n\n```bash\n# GitHub shorthand or HTTPS (Git credential helper, GitHub CLI, then SSH fallback)\nnpx skills add acme/private-skills\n\n# SSH on GitHub, GitLab, or another Git host\nnpx skills add git@github.com:acme/private-skills.git\nnpx skills add ssh://git@git.example.com/acme/private-skills.git\n\n# HTTPS on any Git host (uses your configured Git credential helper)\nnpx skills add https://git.example.com/acme/private-skills.git\n```\n\nFor G
FAQ (2)
TroubleshootingHow to fix 'skills update' skipping skills with 'Multiple current paths match' warning?
Known bug in the skills CLI (confirmed in 1.5.26 through 1.7.0): in resolveSkillLocations, the ambiguity check (candidates.length > 1) runs before verifying whether the canonical path stored in skills-lock.json (lockSkills[name].skillPath) still exists upstream. It triggers when a repo contains the same skill in multiple directories (e.g. skills/<name>/SKILL.md plus .openclaw/skills/<name>/SKILL.md) or exposes duplicates via a committed symlink (e.g. .claude/skills -> ../skills). Workarounds until the fix (PR #2231) ships: 1) Patch the installed CLI — in dist/cli.mjs, check the locked path first and only flag ambiguity if it no longer exists upstream: const normalizedLockedPath = normalizeSkillPath(lockedPath); if (discoveredPaths.has(normalizedLockedPath)) { resolvedPaths.set(name, normalizedLockedPath); continue; } then evaluate candidates.length > 1 (push to ambiguousSkills), then candidates.length === 1 (resolve), else treat as deleted. 2) Remove the duplicate in the upstream repo: delete the extra mirrored copy or the committed symlink so each skill resolves to exactly one path — verify with find -L . -name SKILL.md after clone. 3) If you control neither, skip updating that source until a patched release lands.
TroubleshootingWhy does my skills.sh skill page still show old content after I updated SKILL.md, and how do I force a reindex?
skills.sh caches the indexed snapshot and does not re-fetch on every install. Observed behavior: installs made within roughly two hours of the stored snapshot do NOT refresh it, but a telemetry-enabled install made days later does trigger a re-snapshot from the current default branch (page and https://skills.sh/api/download/<owner>/<repo>/<skill> update within ~10 minutes). Fix/workaround: 1) Wait until well past the ~2-hour cache window since the last snapshot. 2) Run a telemetry-enabled install: npx skills@latest add <owner>/<repo> --skill=<skill-name>. 3) Verify the updated snapshot at the api/download URL and the public skill page. No maintainer action or manual reindex request is needed. Caveat: the /tele/audit security analysis is NOT re-run on re-snapshot, so the audit may still display the analysis of the older snapshot.