Git-based Skills Package Manager for AI Agents
Declarative skill management like npm/Go modules — install, version, sync, and share AI agent skills
English | 简体中文
npx reskill@latest init
npx reskill@latest install github:anthropics/skills/skills/frontend-design@latest
npx reskill@latest list- One-click install — Install any skill from any Git repo with a single command
- Declarative config —
skills.json+skills.lockfor team consistency - Flexible versioning — Exact versions, semver ranges, branches, commits
- Multi-source — GitHub, GitLab, self-hosted repos, HTTP/OSS archives
- Multi-agent — Cursor, Claude Code, Codex, Windsurf, GitHub Copilot, and more
- Registry support — Publish and share skills via registry
Requirements: Node.js >= 18.0.0
npm install -g reskill # Global install
npx reskill@latest <command> # Or use npx directly| Command | Alias | Description |
|---|---|---|
init |
- | Initialize skills.json |
find <query> |
search |
Search for skills in the registry |
install [skills...] |
i |
Install one or more skills |
list |
ls |
List installed skills |
info <skill> |
- | Show skill details |
update [skill] |
up |
Update skills |
outdated |
- | Check for outdated skills |
uninstall <skill> |
un, rm, remove |
Remove a skill |
group |
- | Manage skill groups ¹ |
publish [path] |
pub |
Publish a skill to the registry ¹ |
login |
- | Authenticate with the registry ¹ |
logout |
- | Remove stored authentication ¹ |
whoami |
- | Display current logged in user ¹ |
doctor |
- | Diagnose environment and check for issues |
completion [action] |
- | Setup or remove shell tab completion |
¹ Registry commands (
group,publish,login,logout,whoami) require a private registry deployment. Not available for public use yet.
| Option | Commands | Description |
|---|---|---|
--no-save |
install |
Install without saving to skills.json (for personal skills) |
-g, --global |
install, uninstall, list, outdated, update |
Install/manage skills globally (user directory) |
-a, --agent <agents...> |
install |
Specify target agents (e.g., cursor, claude-code) |
-a, --agent <agent> |
list |
List skills installed to a specific agent |
--mode <mode> |
install |
Installation mode: symlink (default) or copy |
--all |
install |
Install to all agents |
-y, --yes |
install, uninstall, publish |
Skip confirmation prompts |
-f, --force |
install |
Force reinstall even if already installed |
-s, --skill <names...> |
install |
Select specific skill(s) by name from a multi-skill repo |
--list |
install |
List available skills in the repository without installing |
--skip-manifest |
install |
Skip all skills.json and skills.lock writes (for platform integration) |
--base-dir <dir> |
install, uninstall, list, outdated, update |
Project root to resolve skills.json, skills.lock and agent skill directories against |
-t, --token <token> |
install, find, group, publish, login |
Auth token for registry API requests (for CI/CD) |
-r, --registry <url> |
install, find, group, publish, login, logout, whoami |
Registry URL override for registry-enabled commands |
--tag <tag> |
publish |
Git tag to publish |
--access <level> |
publish |
Access level: public (default) or restricted |
-n, --dry-run |
publish |
Validate without publishing |
-g, --group <path> |
publish |
Publish skill into a group (e.g., kanyun/frontend) |
-j, --json |
list, info, outdated, doctor, group, find |
Output as JSON |
-l, --limit <n> |
find |
Maximum number of search results |
--skip-network |
doctor |
Skip network connectivity checks |
Run reskill <command> --help for complete options and detailed usage.
# List groups
reskill group list
reskill group list --tree
# Create / inspect / delete groups
reskill group create "Frontend Team" --description "Frontend skills"
reskill group info kanyun/frontend
reskill group delete kanyun/frontend --dry-run
reskill group delete kanyun/frontend -y
# Manage members
reskill group member list kanyun/frontend
reskill group member add kanyun/frontend alice bob --role developer
reskill group member remove kanyun/frontend alice
reskill group member role kanyun/frontend bob maintainerpublish --group <path> normalizes and validates the path before request.
For full group path rules, see CLI Specification - group.
# GitHub shorthand
npx reskill@latest install github:user/skill@v1.0.0
# GitLab shorthand
npx reskill@latest install gitlab:group/skill@latest
# Full Git URL (HTTPS)
npx reskill@latest install https://github.com/user/skill.git
# Full Git URL (SSH)
npx reskill@latest install git@github.com:user/skill.git
# GitHub/GitLab web URL (with branch and subpath)
npx reskill@latest install https://github.com/vercel-labs/agent-skills/tree/main/skills/web-design-guidelines
# Custom registry (self-hosted GitLab, etc.)
npx reskill@latest install gitlab.company.com:team/skill@v1.0.0
# HTTP/OSS archives
npx reskill@latest install https://example.com/skills/my-skill-v1.0.0.tar.gz
npx reskill@latest install oss://bucket/path/skill.tar.gz
npx reskill@latest install s3://bucket/path/skill.zip
# Registry-based (requires registry deployment)
npx reskill@latest install @scope/skill-name@1.0.0
npx reskill@latest install skill-name
# Install multiple skills at once
npx reskill@latest install github:user/skill1 github:user/skill2@v1.0.0For repositories containing multiple skills (monorepo), you can install a specific skill by path or install all skills from a parent directory:
# Shorthand format with subpath
npx reskill@latest install github:org/monorepo/skills/planning@v1.0.0
npx reskill@latest install gitlab:company/skills/frontend/components@latest
# URL format with subpath
npx reskill@latest install https://github.com/org/monorepo.git/skills/planning@v1.0.0
npx reskill@latest install git@gitlab.company.com:team/skills.git/backend/apis@v2.0.0
# GitHub web URL automatically extracts subpath
npx reskill@latest install https://github.com/org/monorepo/tree/main/skills/planning
# Point to a parent directory — auto-detects and installs all child skills
npx reskill@latest install https://github.com/org/monorepo/tree/main/skillsWhen the target directory has no root SKILL.md but contains subdirectories with SKILL.md files, reskill automatically discovers and installs all child skills. Each skill is saved separately in skills.json.
Skills can be installed directly from HTTP/HTTPS URLs pointing to archive files:
| Format | Example | Description |
|---|---|---|
| HTTPS URL | https://example.com/skill.tar.gz |
Direct download URL |
| Aliyun OSS | https://bucket.oss-cn-hangzhou.aliyuncs.com/skill.tar.gz |
Aliyun OSS URL |
| AWS S3 | https://bucket.s3.amazonaws.com/skill.tar.gz |
AWS S3 URL |
| OSS Protocol | oss://bucket/path/skill.tar.gz |
Shorthand for Aliyun OSS |
| S3 Protocol | s3://bucket/path/skill.tar.gz |
Shorthand for AWS S3 |
Supported archive formats: .tar.gz, .tgz, .zip, .tar
| Format | Example | Description |
|---|---|---|
| Exact | @v1.0.0 |
Lock to specific tag |
| Latest | @latest |
Get the latest tag |
| Range | @^2.0.0 |
Semver compatible (>=2.0.0 <3.0.0) |
| Branch | @branch:develop |
Specific branch |
| Commit | @commit:abc1234 |
Specific commit hash |
| (none) | - | Default branch (main) |
{
"skills": {
"planning": "github:user/planning-skill@v1.0.0",
"internal-tool": "internal:team/tool@latest"
},
"registries": {
"internal": "https://gitlab.company.com"
},
"defaults": {
"installDir": ".skills",
"targetAgents": ["cursor", "claude-code"],
"installMode": "symlink"
}
}reskill uses your existing git credentials (SSH keys or credential helper). For CI/CD:
# GitLab CI
git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.company.com/".insteadOf "https://gitlab.company.com/"Skills are installed to .skills/ by default and can be integrated with any agent:
| Agent | Path |
|---|---|
| Amp | .agents/skills |
| Antigravity | .agent/skills |
| Claude Code | .claude/skills |
| Claude Cowork 3P (Beta) | App-managed Claude-3p/local-agent-mode-sessions/skills-plugin/<org>/<account>/skills |
| Clawdbot | skills |
| Codex | .codex/skills |
| Cursor | .cursor/skills |
| Droid | .factory/skills |
| Gemini CLI | .gemini/skills |
| GitHub Copilot | .github/skills |
| Goose | .goose/skills |
| Kilo Code | .kilocode/skills |
| Kiro CLI | .kiro/skills |
| Neovate | .neovate/skills |
| OpenCode | .opencode/skills |
| Roo Code | .roo/skills |
| Trae | .trae/skills |
| Windsurf | .windsurf/skills |
Not every tool is in the built-in table. Declare your own alias → directory
under customAgents in skills.json, then use it anywhere a built-in agent
name is accepted (-a, defaults.targetAgents, list -a, uninstall):
{
"skills": {},
"defaults": { "targetAgents": ["claude-code", "cc-switch"] },
"customAgents": {
"cc-switch": {
"path": ".cc-switch/skills",
"globalPath": "~/.cc-switch/skills"
}
}
}path— project-level directory, relative to the project root (required).globalPath— absolute directory (a leading~expands to your home) used for-g/--globalinstalls. Global installs into a custom agent without aglobalPathare rejected.
You can also declare a custom agent inline with alias:path on the CLI. On a
successful project install the alias is written back into skills.json under
customAgents, so subsequent commands (reskill install, list -a, …) reuse
it without repeating the path:
reskill install github:user/skill -a cc-switch:.cc-switch/skills
# → skills.json now contains customAgents["cc-switch"] = { "path": ".cc-switch/skills" }By default, project-level commands resolve everything against the current
directory. --base-dir points them at a different project root instead —
skills.json, skills.lock and every agent directory move together:
# Installs into ./agents/foo/.claude/skills and ./agents/foo/.cursor/skills,
# reading and writing ./agents/foo/skills.json
reskill install github:user/skill --base-dir agents/foo -a claude-code cursorThis is useful when several agent definitions live side by side on one machine and each needs its own skill set:
agents/
├── foo/
│ ├── skills.json # foo's dependencies
│ ├── .claude/skills/ # foo's skills
│ └── .cursor/skills/
└── bar/
├── skills.json # bar's dependencies, independent of foo
└── .claude/skills/
Install into each root separately — one reskill call per root:
reskill install github:user/skill-a --base-dir agents/foo -a claude-code -y
reskill install github:user/skill-b --base-dir agents/bar -a claude-code -yRun these sequentially. The global cache is not concurrency-safe: two
reskillprocesses installing the same skill version at the same time can interfere with each other.
The same flag works for reading back and maintaining each root:
reskill list --base-dir agents/foo
reskill outdated --base-dir agents/foo
reskill update --base-dir agents/foo
reskill uninstall skill-a --base-dir agents/fooTo let a runtime pick these skills up, point its own config root at the matching
directory — for Claude Code, CLAUDE_CONFIG_DIR=agents/foo/.claude.
Notes:
- The directory must already exist; reskill will not create it.
--base-dircannot be combined with-g/--global, which always resolves to the user home directory.
Note: Publishing requires a private registry deployment. This feature is not available for public use yet.
Publish your skills to the registry for others to use:
# Group management examples
reskill group list
reskill group list --tree
reskill group create "Frontend Team" --description "Frontend skills"
reskill group info kanyun/frontend
reskill group member add kanyun/frontend alice bob --role developer
# Interactive login (recommended for humans — guides you through token setup)
reskill login
# Non-interactive login (for CI/CD — pass token directly)
reskill login --token <your-token>
# Validate without publishing (dry run)
reskill publish --dry-run
# Validate publish with target group
reskill publish --dry-run --group kanyun/frontend
# Publish the skill
reskill publishFor detailed publishing guidelines, see the CLI Specification.
After logging in with reskill login, the token stored in ~/.reskillrc is automatically used during reskill install to access private skills:
# Token is automatically read from ~/.reskillrc (requires --registry to match)
reskill install @scope/private-skill --registry https://your-registry.com
# Or use RESKILL_TOKEN env var (works without --registry)
RESKILL_TOKEN=<token> reskill install @scope/private-skill
# Or pass token directly (for CI/CD)
reskill install @scope/private-skill --registry https://your-registry.com --token <token>| Variable | Description | Default |
|---|---|---|
RESKILL_CACHE_DIR |
Global cache directory | ~/.reskill-cache |
RESKILL_TOKEN |
Auth token (takes precedence over ~/.reskillrc) | - |
RESKILL_REGISTRY |
Default registry URL | https://registry.reskill.dev |
RESKILL_NO_MANIFEST |
Skip skills.json and skills.lock writes (set to 1 to enable) |
- |
DEBUG |
Enable debug logging | - |
VERBOSE |
Enable debug logging (same effect as DEBUG) |
- |
NO_COLOR |
Disable colored output | - |
reskill checks for newer versions in the background and shows an upgrade tip after command execution.
# Install dependencies
pnpm install
# Development mode
pnpm dev
# Build
pnpm build
# Run tests
pnpm test
# Run integration tests
pnpm test:integration
# Type check
pnpm typecheckreskill was inspired by and references the implementations of these excellent projects:
- add-skill by Vercel Labs
- skild by Peiiii
- openskills by Numman Ali
MIT