The open agent skills ecosystem — rewritten in Rust.
A drop-in, feature-equivalent Rust replacement for the
Vercel skills CLI.
Single static binary, zero runtime dependencies, full API compatibility.
Supports Cursor, Claude Code, Windsurf, Codex, and 35 more.
skills add qntx/skillsShell (macOS / Linux):
curl -fsSL https://sh.qntx.fun/skill | shPowerShell (Windows):
irm https://sh.qntx.fun/skill/ps | iexCargo:
cargo install skills-cliFrom Source:
git clone https://github.com/qntx/skill.git
cd skill
cargo install --path skills-cliskill manages portable instruction sets ("skills") for AI coding agents.
A skill is a directory containing a SKILL.md file with YAML frontmatter that
describes behaviour an agent should adopt. This project provides:
| Crate | Description |
|---|---|
skill |
Core library — discovery, parsing, installation, lock-file management, provider registry |
skills-cli |
Binary (skills) — interactive CLI with the same UX as the TypeScript original |
The Rust port achieves 100 % command parity with the original TypeScript CLI while adding the performance and reliability benefits of a native compiled binary.
- 39 supported agents — Cursor, Claude Code, Windsurf, Cline, Codex, Roo Code, GitHub Copilot, Kilo Code, and many more
- All source types — GitHub shorthand (
owner/repo), GitHub / GitLab URLs with branch + subpath, local paths, well-known HTTP endpoints, direct git URLs - Plugin manifests —
.claude-plugin/marketplace.jsonandplugin.jsondiscovery for Claude Code ecosystem compatibility - Symlink-first install — canonical storage + per-agent symlinks (or junctions on Windows); copy mode available
- Lock files — global (
~/.agents/.skill-lock.json) and project-scoped (skills-lock.json) for reproducible setups - Extensible providers —
HostProvidertrait for adding custom skill hosts beyond GitHub / GitLab / well-known - Telemetry-aware — opt-in anonymous telemetry (respects
DO_NOT_TRACK/DISABLE_TELEMETRY) - Cross-platform — Linux, macOS, Windows (with native junction support)
# GitHub shorthand (owner/repo)
skills add qntx/skills
# Full GitHub URL
skills add https://github.com/qntx/skills
# Direct path to a skill in a repo
skills add https://github.com/qntx/skills/tree/main/skills/code-review
# GitLab URL
skills add https://gitlab.com/org/repo
# Prefix shorthand
skills add github:owner/repo
skills add gitlab:owner/repo
# Local path
skills add ./my-local-skills
skills add /absolute/path/to/skills
# Well-known HTTP endpoints
skills add https://example.com # checks /.well-known/skills/index.json| Option | Description |
|---|---|
-g, --global |
Install to user directory instead of project |
-a, --agent <agents...> |
Target specific agents (e.g., claude-code, cursor). Use '*' for all |
-s, --skill <skills...> |
Install specific skills by name (use '*' for all skills) |
-l, --list |
List available skills without installing |
--copy |
Copy files instead of symlinking to agent directories |
-y, --yes |
Skip all confirmation prompts |
--all |
Install all skills to all agents without prompts (shorthand for --skill '*' --agent '*' -y) |
# List skills in a repository
skills add qntx/skills --list
# Install specific skills
skills add qntx/skills --skill frontend-design --skill code-review
# Install a skill with spaces in the name (must be quoted)
skills add owner/repo --skill "Convex Best Practices"
# Install to specific agents
skills add qntx/skills -a claude-code -a cursor
# Non-interactive installation (CI/CD friendly)
skills add qntx/skills --skill frontend-design -g -a claude-code -y
# Install all skills from a repo to all agents
skills add qntx/skills --all
# Install all skills to specific agents
skills add qntx/skills --skill '*' -a claude-code
# Install specific skills to all agents
skills add qntx/skills --agent '*' --skill frontend-design| Scope | Flag | Location | Use Case |
|---|---|---|---|
| Project | (default) | ./<agent>/skills/ |
Committed with your project, shared with team |
| Global | -g |
~/<agent>/skills/ |
Available across all projects |
| Method | Description |
|---|---|
| Symlink (Recommended) | Creates symlinks from each agent to a canonical copy. Single source of truth, easy updates. |
| Copy | Creates independent copies for each agent. Use when symlinks aren't supported. |
Note: On Windows, junctions are used instead of symlinks for directory linking.
| Command | Aliases | Description |
|---|---|---|
skills add <source> |
a, install, i |
Add a skill package from any source |
skills remove <name> |
rm, r |
Remove installed skills |
skills list |
ls |
List installed skills |
skills find <query> |
f, s, search |
Search the skills registry |
skills check |
Check for available skill updates | |
skills update |
upgrade |
Update all skills to latest versions |
skills init |
Scaffold a new SKILL.md |
|
skills experimental-install |
Restore skills from skills-lock.json |
|
skills experimental-sync |
Sync skills from node_modules |
List all installed skills. Similar to npm ls.
# List all installed skills (project and global)
skills list
# List only global skills
skills ls -g
# Filter by specific agents
skills ls -a claude-code -a cursorSearch for skills interactively or by keyword.
# Interactive search (fzf-style)
skills find
# Search by keyword
skills find typescript# Check if any installed skills have updates
skills check
# Update all skills to latest versions
skills update# Create SKILL.md in current directory
skills init
# Create a new skill in a subdirectory
skills init my-skillRemove installed skills from agents.
# Remove interactively (select from installed skills)
skills remove
# Remove specific skill by name
skills remove web-design-guidelines
# Remove multiple skills
skills remove frontend-design web-design-guidelines
# Remove from global scope
skills remove --global web-design-guidelines
# Remove from specific agents only
skills remove --agent claude-code cursor my-skill
# Remove all installed skills without confirmation
skills remove --all
# Remove all skills from a specific agent
skills remove --skill '*' -a cursor
# Remove a specific skill from all agents
skills remove my-skill --agent '*'
# Use 'rm' alias
skills rm my-skill| Option | Description |
|---|---|
-g, --global |
Remove from global scope (~/) instead of project |
-a, --agent |
Remove from specific agents (use '*' for all) |
-s, --skill |
Specify skills to remove (use '*' for all) |
-y, --yes |
Skip confirmation prompts |
--all |
Shorthand for --skill '*' --agent '*' -y |
use skill::SkillManager;
use skill::types::{DiscoverOptions, InstallOptions, InstallScope, InstallMode, AgentId};
#[tokio::main]
async fn main() -> skill::Result<()> {
let manager = SkillManager::builder().build();
// Discover skills in a directory
let skills = manager
.discover_skills(std::path::Path::new("./my-repo"), &DiscoverOptions::default())
.await?;
// Install a skill for a specific agent
let opts = InstallOptions {
scope: InstallScope::Project,
mode: InstallMode::Symlink,
cwd: None,
};
for skill in &skills {
manager.install_skill(skill, &AgentId::new("cursor"), &opts).await?;
}
// List installed skills
let installed = manager.list_installed(&Default::default()).await?;
println!("Installed: {}", installed.len());
Ok(())
}Click to expand the full list of 39 supported agents
| Agent | Skills Dir | Global Skills Dir |
|---|---|---|
| Amp | .agents/skills |
$XDG_CONFIG_HOME/agents/skills |
| Antigravity | .agent/skills |
~/.gemini/antigravity/skills |
| Augment | .augment/skills |
~/.augment/skills |
| Claude Code | .claude/skills |
~/.claude/skills |
| OpenClaw | .agents/skills |
~/.openclaw/skills |
| Cline | .agents/skills |
~/.agents/skills |
| CodeBuddy | .codebuddy/skills |
~/.codebuddy/skills |
| Codex | .agents/skills |
$CODEX_HOME/skills |
| Command Code | .commandcode/skills |
~/.commandcode/skills |
| Continue | .continue/skills |
~/.continue/skills |
| Cortex Code | .cortex/skills |
~/.snowflake/cortex/skills |
| Crush | .crush/skills |
~/.crush/skills |
| Cursor | .cursor/rules/skills |
~/.cursor/rules/skills |
| Droid | .droid/skills |
~/.droid/skills |
| Factory Code | .factory/skills |
~/.factory/skills |
| Gemini CLI | .gemini/skills |
~/.gemini/skills |
| GitHub Copilot | .github/skills |
~/.github/skills |
| Goose | .goose/skills |
~/.config/goose/skills |
| iFlow CLI | .iflow/skills |
~/.iflow/skills |
| Junie | .junie/skills |
~/.junie/skills |
| Kilo Code | .kilocode/skills |
~/.kilocode/skills |
| Kimi K2 | .kimi/skills |
~/.kimi/skills |
| Kiro | .kiro/skills |
~/.kiro/skills |
| Kode | .kode/skills |
~/.kode/skills |
| MCPJam | .mcpjam/skills |
~/.mcpjam/skills |
| Mistral Vibe | .vibe/skills |
~/.vibe/skills |
| Mux | .mux/skills |
~/.mux/skills |
| Neovate | .neovate/skills |
~/.neovate/skills |
| OpenCode | .opencode/skills |
~/.opencode/skills |
| OpenHands | .openhands/skills |
~/.openhands/skills |
| Pi | .pi/skills |
~/.pi/skills |
| Qoder | .qoder/skills |
~/.qoder/skills |
| Qwen Code | .qwen/skills |
~/.qwen/skills |
| Replit | .agents/skills |
$XDG_CONFIG_HOME/agents/skills |
| Roo Code | .roo/skills |
~/.roo/skills |
| Trae | .trae/skills |
~/.trae/skills |
| Trae CN | .trae/skills |
~/.trae-cn/skills |
| Windsurf | .windsurf/skills |
~/.windsurf/skills |
| ZenCoder | .zencoder/skills |
~/.zencoder/skills |
Skills are directories containing a SKILL.md file with YAML frontmatter:
---
name: my-skill
description: What this skill does and when to use it
---
# My Skill
Instructions for the agent to follow when this skill is activated.
## When to Use
Describe the scenarios where this skill should be used.
## Steps
1. First, do this
2. Then, do thatname— Unique identifier (lowercase, hyphens allowed)description— Brief explanation of what the skill does
metadata.internal— Set totrueto hide the skill from normal discovery. Internal skills are only visible whenINSTALL_INTERNAL_SKILLS=1is set.metadata.tags— Array of tags for categorization and search.
---
name: my-internal-skill
description: An internal skill not shown by default
metadata:
internal: true
tags: [internal, wip]
---The CLI searches for skills in these locations within a repository:
- Root directory (if it contains
SKILL.md) skills/,skills/.curated/,skills/.experimental/,skills/.system/- Agent-specific directories:
.claude/skills/,.cursor/skills/,.windsurf/skills/, etc.
If .claude-plugin/marketplace.json or .claude-plugin/plugin.json exists, skills declared in those files are also discovered:
{
"metadata": { "pluginRoot": "./plugins" },
"plugins": [
{
"name": "my-plugin",
"source": "my-plugin",
"skills": ["./skills/review", "./skills/test"]
}
]
}This enables compatibility with the Claude Code plugin marketplace ecosystem.
- Feature parity — Every command, source format, agent, and behaviour from the Vercel TypeScript implementation is faithfully reproduced.
- Zero runtime dependencies — Single static binary; no Node.js, npm, or npx required.
- Library-first — The
skillcrate exposes a cleanSkillManagerAPI so agent frameworks can embed skill support directly. - Security by default — Path traversal protection on subpaths and skill names; plugin manifest paths validated against base directory.
- Extensible — Custom agents via
AgentRegistry::register(), custom providers via theHostProvidertrait, feature-gated network and telemetry.
| Flag | Default | Description |
|---|---|---|
network |
off | Enables reqwest-based network operations (GitHub API, well-known fetching) |
telemetry |
off | Enables anonymous usage telemetry to https://add-skill.vercel.sh/t |
The CLI binary enables both flags. Library consumers can opt in selectively.
| Variable | Description |
|---|---|
CODEX_HOME |
Override Codex config directory (default: ~/.codex) |
CLAUDE_CONFIG_DIR |
Override Claude Code config directory (default: ~/.claude) |
XDG_CONFIG_HOME |
Override XDG config base (default: ~/.config) |
INSTALL_INTERNAL_SKILLS |
Set to 1 or true to include internal skills |
GITHUB_TOKEN / GH_TOKEN |
GitHub API token for update checks (falls back to gh auth token) |
SKILLS_API_URL |
Override the skills search API endpoint (default: https://skills.sh) |
DISABLE_TELEMETRY / DO_NOT_TRACK |
Set to 1 or true to disable telemetry |
This project is a drop-in replacement for the
Vercel skills CLI (npx skills).
- Same CLI interface, flags, and aliases
- Same
SKILL.mdformat and YAML frontmatter schema - Same lock-file format (
skill-lock.jsonv3,skills-lock.jsonv1) - Same agent directory structures and detection logic
- Same source parsing rules (GitHub, GitLab, local, well-known, git)
- Same telemetry endpoint and event schema
- Same installation semantics (canonical + symlink/junction)
Skills are generally compatible across agents since they follow a shared Agent Skills specification. However, some features may be agent-specific:
| Feature | Claude Code | Cursor | Windsurf | Codex | Cline | Roo Code | OpenCode |
|---|---|---|---|---|---|---|---|
| Basic skills | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
allowed-tools |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
context: fork |
✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Hooks | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
Ensure the repository contains valid SKILL.md files with both name and description in the frontmatter.
- Verify the skill was installed to the correct path
- Check the agent's documentation for skill loading requirements
- Ensure the
SKILL.mdfrontmatter is valid YAML
Ensure you have write access to the target directory. On Windows, you may need to run as Administrator for junction creation.
Windows requires Developer Mode or Administrator privileges for symlinks. The CLI automatically falls back to junctions for directories.
- Path traversal protection — All subpaths and skill names are validated to prevent directory escape attacks.
- Plugin manifest sandboxing — Paths declared in
.claude-plugin/manifests must be contained within the base directory and start with./. - No arbitrary code execution — Skills are passive markdown instruction files; they do not execute code during installation.
- Dependency audit — Minimal dependency tree; only well-known crates from the Rust ecosystem.
- Agent Skills Specification
- Skills Directory
- Claude Code Skills Documentation
- Cursor Skills Documentation
- Windsurf Skills Documentation
- Codex Skills Documentation
- Cline Skills Documentation
- Roo Code Skills Documentation
- OpenCode Skills Documentation
- GitHub Copilot Agent Skills
- Vercel Agent Skills Repository
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project shall be dual-licensed as above, without any additional terms or conditions.