From skill-manager
Remove a skill from a central plugin, or delete an entire plugin from the marketplace, then push the removal. Use when the user says "remove this skill", "delete this skill from the marketplace", "deprecate this skill", "delete this plugin", or "unregister a plugin". Destructive and pushes to git; user-invoked only.
How this skill is triggered — by the user, by Claude, or both
Slash command
/skill-manager:remove [skill or plugin][skill or plugin]opusThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Delete a central skill (or a whole plugin), clean up the catalog and bump the version, commit, and push. The engine renders a numbered menu and resolves the pick itself — you never enumerate or map names, and because a skill index encodes its plugin there's no ambiguity to resolve.
Delete a central skill (or a whole plugin), clean up the catalog and bump the version, commit, and push. The engine renders a numbered menu and resolves the pick itself — you never enumerate or map names, and because a skill index encodes its plugin there's no ambiguity to resolve.
Show the numbered menu:
python3 "${CLAUDE_PLUGIN_ROOT}/bin/skillctl" remove
Paste the engine's menu straight into your reply — it prints a Markdown table; copy it verbatim (don't wrap it in a code block, so it renders) so the user can read it without expanding the raw tool output. Plugins get a bare number (2), each skill a compound index (2.3). Those numbers are ground truth; don't renumber or invent entries.
Get the pick. If the user already named a target (as args or in chat), use it. Otherwise ask in plain text to reply with a number — a skill index like 1.2, or a plugin number like 2 to delete the whole plugin (this open-ended reply doesn't fit AskUserQuestion's fixed options). Pass their reply through unchanged.
Preview the deletion (writes nothing):
python3 "${CLAUDE_PLUGIN_ROOT}/bin/skillctl" remove --select "<their reply>"
The engine prints exactly what it would delete (the skill, or the plugin and all its skills). Relay that verbatim. If it errors on a bad index/name, show the message and re-ask (back to step 2).
Confirm before deleting with AskUserQuestion — this is destructive and pushes to git:
Apply the confirmed deletion, reusing the same --select value the preview echoed:
python3 "${CLAUDE_PLUGIN_ROOT}/bin/skillctl" remove --select "<ref>" --force
Report using the Output skeleton, including the two-command marketplace-update + reload steps the engine prints (/plugin marketplace update <marketplace> then /reload-plugins; custom marketplaces don't auto-refresh, so /reload-plugins alone won't pick up the change). Surface any push-failure WARNING. Removing a plugin can't clean up its enablement in other projects — mention that if relevant.
For direct, name-based removal (e.g. scripting), skillctl remove-skill <skill> [--plugin P] --force and skillctl remove-plugin <plugin> --force still work and resolve the same way.
--select are the source of truth. The engine resolves the index to a real skill/plugin and prints what it will delete; never delete by a name you inferred yourself. Always run the preview (step 3) and get the user's explicit OK (step 4) before --force.WARNING — until the push lands, the removal is local-only.Fill this skeleton from the engine's output, copying values verbatim. Drop a line if it doesn't apply:
Removed: {skill {name} from {plugin} (now v{version}) / plugin {name} and all its skills}
⚠️ Push failed: {verbatim WARNING} — committed locally, not on the remote yet.
Cleanup: {only if the engine noted {plugin} has no skills left} → run the menu again and pick its plugin number to remove it too.
Apply it (required after every removal): custom marketplaces don't reliably auto-update — not even new sessions — so run these two commands each time (substitute the real marketplace name for {marketplace}): /plugin marketplace update {marketplace} then /reload-plugins.
Heads up: {plugin removal only} enablement of {plugin} in other projects must be cleaned up manually.
If the user cancelled, say so and confirm nothing was deleted.
npx claudepluginhub zakattack9/agentic-coding --plugin skill-managerGuides test-driven development for Django applications using pytest-django, factory_boy, and Django REST Framework. Covers red-green-refactor workflow, conftest fixtures, and coverage reporting.