Local CLI to administer installed agent skills across all major AI coding agents.
Command name:
skm· npm package:skills-admin
skills-admin focuses on everything that comes after installation — listing, auditing, deduplicating, and removing skills that are already on disk. Pair it with whatever installer you use (npx skills add, manual git clone, etc.); skm doesn't install or update from remote sources.
It scans every skill directory across 53 supported agents (Claude Code, Cursor, Codex, OpenCode, Cline, Warp, Droid, Kiro, OpenClaw, Antigravity, Gemini CLI, …) and gives you one tool to see and clean them up.
# Run without installing
npx skills-admin ls
bunx skills-admin ls
# Or install globally
npm install -g skills-admin
bun install -g skills-admin
# Then use the short command
skm lsskm ls— list every installed skill across every agent directory that exists on this machine, with kind (real dir / symlink / broken / file), size, description, and grouping.skm rm— remove a skill from one specific agent dir, multiple, or all at once. Interactive picker by default; non-interactive with--all -y.skm doctor— find broken symlinks, missingSKILL.md, and cross-location name collisions.--fixauto-cleans broken symlinks.
# Where is `cold-email` installed?
skm ls -n cold-email -g
# Show only broken symlinks
skm ls --broken
# Remove a skill from every agent dir (with preview first)
skm rm tempo-request --all --dry-run
skm rm tempo-request --all -y
# Remove only from one agent
skm rm tempo-request -a cursor -y
# Remove only from a specific path
skm rm tempo-request -p ~/.cursor/skills -y
# Audit health
skm doctor
# Clean broken symlinks left over from `npx skills remove`
skm doctor --fix --dry-run
skm doctor --fix -y- Location — a physical directory on disk (e.g.
~/.claude/skills). Same path is never listed twice, even when multiple agents share it (e.g. Cline + Warp both bind to~/.agents/skills). - Binding — an
(agent, scope)pair that resolves to a location. - Kind —
dir(real directory) ·link(symlink) ·BROK(broken symlink) ·file(stray file). - Scope —
global(in user home) vsproject(relative to cwd). A single location can cover both.
Discovery is cwd-independent: $HOME is always considered alongside the current working directory, so OpenClaw's bare skills/ directory at ~/skills is found no matter where you run skm from.
skm ls [options]
-s, --scope <scope> global | project | all (default: all)
-a, --agent <agents...> filter by agent name (claude-code, cursor, codex, ...)
-n, --name <name> filter to a single skill name
-p, --path <paths...> filter to specific absolute skills-dir paths
-g, --group-by-name group output by skill name (show duplicates)
-l, --long show extra columns (symlink target)
-k, --kind <kinds...> filter by kind: link | dir | broken | file
--broken shortcut for --kind broken
--json emit JSON
skm rm [names...] [options]
-s, --scope <scope> global | project | all (default: all)
-a, --agent <agents...> restrict to specific agents
-p, --path <paths...> restrict to specific absolute skills-dir paths
--location-id <ids...> restrict to specific location ids (the absolute path)
--all remove from EVERY matching location without picker
-y, --yes skip confirmation prompts
--dry-run print what would happen without deleting
skm doctor [options]
-s, --scope <scope> global | project | all (default: all)
-a, --agent <agents...> restrict to specific agents
-p, --path <paths...> restrict to specific absolute skills-dir paths
--fix delete broken symlinks (others are reported only)
--dry-run with --fix, print without deleting
-y, --yes skip confirmation when --fix is set
--json emit JSON
When a Claude Code entry is a symlink pointing at ~/.agents/skills/<name> (the universal canonical source), deleting the source breaks Claude. Two-phase recipe:
# Phase 1: materialize Claude's symlink into a real directory
SRC=~/.agents/skills/<name>
DST=~/.claude/skills/<name>
TMP=~/.claude/skills/.skm-migrate-<name>
[ -d "$SRC" ] && [ -L "$DST" ] || { echo "preconditions fail"; exit 1; }
cp -R "$SRC" "$TMP" && rm "$DST" && mv "$TMP" "$DST"
# Phase 2: now safe to delete from every other dir
skm rm <name> --all -yskm ls --json | jq '
group_by(.name) | map(select(length>1)) |
map({name: .[0].name, count: length, locations: map(.location.path)})
'skm ls -p ~/.claude/skillsOnce skills are installed, they sprawl: copies, symlinks, dead links from upstream removals, accidental duplicates across agents. There's no built-in way to ask "where is seo-audit actually installed?" or "delete this skill from Cursor but keep it in Claude". skills-admin covers that gap.
This tool deliberately does not install or update from remote sources — many installers already do that well. skm picks up where they leave off.
skills-admin knows about 53 AI coding agents — Claude Code, Cursor, Codex, OpenCode, Cline, Warp, Droid, Kiro, OpenClaw, Antigravity, Gemini CLI, GitHub Copilot, Continue, Goose, Crush, Roo Code, Windsurf, Zencoder, and more. Environment variables (CLAUDE_CONFIG_DIR, CODEX_HOME, VIBE_HOME, XDG_CONFIG_HOME) are honored.
Only directories that actually exist on disk and contain at least one entry are shown.
- Install / update / sync from remote sources — use a dedicated installer like
npx skills addor plaingit clone - Edit
SKILL.md— open it directly with$EDITOR ~/.claude/skills/<name>/SKILL.md - Full-text search inside skill content — use
rg <query> ~/.claude/skills - Convert between symlink and copy in-place
- Track install source per skill (no manifest)
- Manage MCP servers, hooks, plugins (planned for future siblings)
git clone <repo-url> && cd <repo-dir>
bun install
bun run bin/skm.ts ls # run locally
bun run typecheck # tsc --noEmit
chmod +x bin/skm.ts
bun link # makes `skm` available globallySource layout:
.
├── bin/skm.ts # CLI entry (Commander)
├── src/
│ ├── core/
│ │ ├── agents.ts # agent skill directory registry (53 agents)
│ │ ├── locations.ts # path discovery + cross-scope dedupe
│ │ └── scan.ts # walks dirs, parses SKILL.md frontmatter
│ ├── commands/
│ │ ├── ls.ts
│ │ ├── rm.ts
│ │ └── doctor.ts
│ └── ui/format.ts # tables + colors
└── skills/skm/SKILL.md # the agent-facing skill that teaches `skm`
MIT.