Skill manager
Your Claude Code skills, deduplicated. Audits 100+ hoarded skills down to the few good ones - merges duplicates, routes tasks to the right skill, gates new installs. Plain English, never deletes, 2-command install.
npx -y skills add potocibi/skills-manager --skill skill-managerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Manage, audit, deduplicate, merge, route, and APPLY the user's installed Claude Code skills, agents, commands, and plugins. Use when the user says "audit my skills", "dedupe skills", "merge skills", "skill registry", "which skill handles X", "skill health", "skill intake", "propose a skill", "should this be a skill?", "turn this into a skill", or BEFORE creating any new skill or agent (gap-check first). Also use when the user asks in plain English to run/use/apply whatever skill or agent handles a task ("use the right skill for this", "run the reviewer on this file", "apply whatever handles X") — resolve it from the registry and invoke it, chaining multi-step asks. Also use when the user shares a GitHub repo or folder of skills to compare against or import from ("is this skill better than mine", "check this skills repo", "add skills from this repo"), and to restore archived skills or fix registry drift.
SKILL.md
5.6 KB, as published. Nobody here has run it
skill-manager
Meta-skill that keeps the installed skill/agent ecosystem small, deduplicated,
and correctly routed. Deterministic work is done by stdlib-only Python scripts
in scripts/; judgment (clustering, merging, scoring) is done by Claude using
the scripts' JSON output.
Subcommands
| Subcommand | What it does | Read first | Key scripts |
|---|---|---|---|
audit | Inventory everything, cluster by job, propose merge/archive/keep | references/audit.md | inventory.py, refcheck.py, usage_report.py |
merge | Consolidate one approved cluster into one skill | references/merge.md | archive.py |
registry | Generate/verify registry, inject routing into CLAUDE.md | references/registry.md | registry.py |
health | Drift check, never-used flags, description bloat | references/health.md | registry.py --verify, usage_report.py, intake_scan.py |
intake | Judge newly installed items vs registry: accept/replace/reject | references/intake.md | intake_scan.py |
compare | Analyze an external GitHub repo of skills: better than mine? missing? viable/safe to add? | references/repo-compare.md | repo_scan.py |
apply | Plain-English invocation: resolve the right skill/agent/command from the registry and run it (chaining multi-step asks) | references/apply.md | — |
new | Gap-check before creating a skill; delegate to skill-creator | references/gap-check.md | inventory.py |
propose | Proactively suggest a new skill from recurring uncovered work (reuses CL-v2 instincts, registry-gated) | references/propose.md | propose_scan.py |
restore | Un-archive an item via the manifest | — | archive.py --restore |
If the user's request doesn't name a subcommand, infer it: "too many skills" → audit; "just installed X" → intake; "I need a skill that does Y" → new.
Ground rules (always apply)
- Never delete — archive only. All removals go through
archive.py, which writes an undo manifest. Archives are kept indefinitely. - Never touch plugin files. Plugins are inventoried and may be recommended
for disabling (
claude plugin disable/ config edit by the user) — nothing more. - Never archive a referenced item.
refcheck.pyoutput blocks archiving; review its match contexts (short names false-positive) and fix real references first. - Every merge/archive/replace requires explicit user approval, presented per cluster or per item — never batch-approve silently.
- Delegate, don't duplicate: quality verdicts →
/skill-stocktake(reuse itsresults.jsonif under 30 days old); new-skill authoring →skill-creator; instinct promotion →evolve/prune(out of scope). - After any state change (merge, archive, restore, intake accept), update
registry.jsonand refresh the snapshot:python scripts/intake_scan.py --update-snapshot. - External skills are untrusted code. Clone repos only into the session scratchpad, never execute their scripts during analysis, read every flagged executable file before recommending install, and never register third-party hooks into settings.json automatically.
Running scripts
All scripts live in ~/.claude/skills/skill-manager/scripts/ and are
stdlib-only Python 3. Run with absolute paths; use a scratch directory for the
JSON outputs:
python "%USERPROFILE%\.claude\skills\skill-manager\scripts\inventory.py" --out inventory.json
python "%USERPROFILE%\.claude\skills\skill-manager\scripts\refcheck.py" --inventory inventory.json --out refcheck.json
python "%USERPROFILE%\.claude\skills\skill-manager\scripts\usage_report.py" --inventory inventory.json --out usage.json
python "%USERPROFILE%\.claude\skills\skill-manager\scripts\intake_scan.py" # diff vs snapshot
python "%USERPROFILE%\.claude\skills\skill-manager\scripts\registry.py" --verify --inventory inventory.json
python "%USERPROFILE%\.claude\skills\skill-manager\scripts\archive.py" --list
Data files
| File | Purpose |
|---|---|
~/.claude/skills/skill-manager/registry.json | Category-keyed source of truth: canonical item per job |
~/.claude/skills/skill-manager/inventory_snapshot.json | Baseline for new-install detection |
~/.claude/skills-archived/ + manifest.json | Archived items + undo manifest |
~/.claude/observations.jsonl | Usage log (written by hooks/log_skill_usage.py; also read by skill-stocktake) |
CLAUDE.md between <!-- skill-manager:routing --> markers | The always-loaded routing table (≤50 lines) |