A CLI tool for managing AI agent skills with proper namespace resolution. Prevents skill name conflicts when installing from multiple repositories, supports multiple agents (Claude Code, Cursor, Kiro, etc.), and tracks updates via remote hash comparison.
Heads up — this project is built around evobug internal requirements and will change frequently and without warning. Breaking changes are expected. If you want a stable tool, fork it or pin a commit.
Scope: manages skills and Claude Code plugins. When
addsees a.claude-plugin/plugin.jsonin the target repo, the plugin is auto-installed into a local marketplace alongside any loose skills.Credit & relationship to Vercel
skills: inspired by and interoperable with Vercel Labs'skillsCLI (MIT). skillsmanager is an independent reimplementation — it does not vendor, fork, or copy any of their source. It can migrate from an existing Vercelskillsinstall by reading the.skill-lock.jsonfile format. Huge thanks to the Vercel team for the original concept and ecosystem.
AI coding agents (Claude Code, Cursor, etc.) use "skills" — markdown prompt files that extend agent capabilities. Skills come from GitHub repos and get installed into agent-specific directories. When two repos provide a skill with the same name (e.g., frontend-design), they clash in the slash command menu with no way to distinguish them.
skillsmanager solves this by auto-namespacing skills on install (impeccable:frontend-design, marketing:copywriting), rewriting cross-references, and managing the full lifecycle.
# Clone
git clone https://github.com/evobug-com/skillsmanager.git
cd skillsmanager
# Install dependencies
bun install
# Or run directly without linking:
bun run src/index.ts <command>After bun install, create a launcher in ~/.bun/bin/ (which should already be in your PATH after installing Bun):
cat > ~/.bun/bin/skillsmanager <<'EOF'
#!/usr/bin/env bash
exec bun run "$HOME/projects/skillsmanager/src/index.ts" "$@"
EOF
chmod +x ~/.bun/bin/skillsmanagerReplace $HOME/projects/skillsmanager with wherever you cloned the repo. If ~/.bun/bin is not in your PATH, add this to your shell rc (~/.bashrc, ~/.zshrc):
export PATH="$HOME/.bun/bin:$PATH"Then skillsmanager works from anywhere.
After bun install, create launcher scripts in ~/.bun/bin/ (which should be in your PATH):
Replace <path-to-repo> below with the absolute path to your cloned repo (e.g., C:\src\skillsmanager).
For bash / Git Bash:
REPO="<path-to-repo>"
cat > ~/.bun/bin/skillsmanager <<EOF
#!/usr/bin/env bash
exec bun run "$REPO/src/index.ts" "\$@"
EOFFor PowerShell / cmd:
set REPO=<path-to-repo>
echo @echo off > %USERPROFILE%\.bun\bin\skillsmanager.cmd
echo bun run "%REPO%\src\index.ts" %%* >> %USERPROFILE%\.bun\bin\skillsmanager.cmdThen skillsmanager works from anywhere.
| Command | Description |
|---|---|
add <owner/repo> |
Install skills from a GitHub repo |
remove <owner/repo> |
Remove all skills from a repo |
list |
List installed skills by repo/namespace |
update [owner/repo] |
Check for remote updates and reinstall changed skills |
check |
Detect namespace conflicts and show status |
fix [owner/repo] |
Retroactively namespace existing skills |
migrate [owner/repo] |
Migrate from the vercel skills CLI |
repair |
Fix stale /command cross-references and reconcile plugins (install any plugin from an already-tracked repo that isn't in the lock yet) |
skillsmanager add pbakaus/impeccableOn first run, you'll be prompted to:
- Select agents — which agents should skills be available to (auto-detects installed agents)
- Choose install mode — copy files (recommended) or symlink
- Pick a namespace — suggested based on repo name, or enter a custom one
Skills are installed to ~/.agents/skills/ (canonical) and copied/linked to each agent's skills directory.
# Interactive — prompts for namespace per repo
skillsmanager migrate
# Auto-accept suggested namespaces
skillsmanager migrate --yes
# Re-migrate everything as copies (fix symlink issues)
skillsmanager migrate --force --copy --yesskillsmanager checkShows namespace conflicts, repos without namespaces, and a summary of installed skills.
# Update all repos
skillsmanager update
# Update a specific repo
skillsmanager update pbakaus/impeccableCompares the remote Git tree SHA with the stored hash. Only re-installs when changes are detected.
# Scan for stale /command references across all skills
skillsmanager repair --dry-run
# Fix them
skillsmanager repairDetects references like /frontend-design that should now be /impeccable:frontend-design and rewrites them.
| Flag | Description |
|---|---|
--namespace <name> |
Override the auto-derived namespace |
--no-namespace |
Install without namespace (not recommended) |
--copy |
Copy files instead of symlinking (persisted) |
--agent <ids> |
Comma-separated agent IDs (e.g., claude-code,cursor) |
--force |
Re-process already-managed repos |
--dry-run |
Preview changes without applying them |
--yes, -y |
Skip confirmation prompts |
- Derives namespace from the repo name:
pbakaus/impeccable→impeccable,coreyhaines31/marketingskills→marketing - Strips common suffixes:
-skills,-skill,-pack,-plugin - If conflicts exist with already-installed skills, namespaces ALL skills from the repo
- Skips already-namespaced skills (those with
:in the name field)
Searches cloned repos in priority order:
.agents/skills/*/SKILL.md.claude/skills/*/SKILL.mdskills/*/SKILL.md**/SKILL.md(recursive fallback)
When namespacing, rewrites both:
- The
name:field in SKILL.md frontmatter - Intra-pack
/commandreferences (e.g.,/audit→/impeccable:audit)
- Canonical skills:
~/.agents/skills/— one copy per skill - Agent directories:
~/.claude/skills/,~/.cursor/skills/, etc. — copies or symlinks - Lock file:
~/.agents/.skillsmanager-lock.json— tracks repos, namespaces, hashes, settings - Vercel lock (read-only):
~/.agents/.skill-lock.json— read for migration, cleaned after
Claude Code, Cursor, Windsurf, Cline, Codex, Kiro, Amp, OpenCode, Gemini CLI, Warp, GitHub Copilot.
When skillsmanager add <owner/repo> detects a .claude-plugin/plugin.json at the repo root (or one directory deep), it:
- Installs the plugin into a local marketplace at
~/.agents/.skillsmanager-marketplace/plugins/<name>/. - Rewrites
plugin.jsonname(and all intra-plugin/commandcross-references) to use the chosen namespace, so plugins from different repos never collide. - Stamps
plugin.jsonversionas<upstream>+sm.<content-hash>— identical upstream content keeps the stamp stable (Claude reuses its cache), changed content rotates it (Claude refreshes). - Regenerates
~/.agents/.skillsmanager-marketplace/.claude-plugin/marketplace.json. - Patches
~/.claude/settings.jsonto register the marketplace inextraKnownMarketplacesand flip the plugin on inenabledPlugins. No manual/plugin marketplace addstep needed — restart Claude Code and the plugin is live. - Also installs any loose skills from the repo that live outside the plugin directory, using the existing skill flow.
Plugins are Claude Code only — other agents don't consume the plugin format.
add— installs the plugin, auto-enables it in settings. Restart Claude Code to pick it up.update— when the upstream tree hash changes, re-runs install, wipes~/.claude/plugins/cache/skillsmanager/<name>/so the next Claude launch copies the fresh content, and re-asserts the settings entry in case it was cleared manually.remove— uninstalls the plugin directory, wipes Claude's cache for it, removes theenabledPluginsentry, and drops the wholeskillsmanagermarketplace registration when the last plugin is removed.
Settings patching only touches the extraKnownMarketplaces.skillsmanager key and the <plugin>@skillsmanager entries inside enabledPlugins. Anything else in your settings file is left alone.
- Bun runtime
- yaml — YAML frontmatter parsing
- @clack/prompts — interactive CLI UI
- picocolors — terminal colors
MIT