From skill-manager
Choose which centralized skill plugins the current project uses, written to the project's .claude/settings.local.json. Use when the user opens a repo and wants to wire up their skills, says "set up skills for this project", "which skills does this project use", "enable/disable a plugin here", or "configure plugins for this project".
How this skill is triggered — by the user, by Claude, or both
Slash command
/skill-manager:configure [plugins or 1 3 5][plugins or 1 3 5]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
Set which centralized plugins this project enables. The chosen set becomes the project's enabled set — the engine enables the picks and disables the rest — written to `.claude/settings.local.json` (personal, gitignored; merged, never clobbered). The engine resolves the selection and computes the change; **always preview the plan and confirm before applying.**
Set which centralized plugins this project enables. The chosen set becomes the project's enabled set — the engine enables the picks and disables the rest — written to .claude/settings.local.json (personal, gitignored; merged, never clobbered). The engine resolves the selection and computes the change; always preview the plan and confirm before applying.
The engine is the source of truth at every step: it numbers the menu, resolves the reply, and diffs against current state. Don't enumerate, renumber, or map plugin names yourself — pass the user's raw reply through.
Show the numbered menu (and what's already on):
python3 "${CLAUDE_PLUGIN_ROOT}/bin/skillctl" configure
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. The numbers, ✓ markers, and skills are ground truth; don't renumber or invent entries.
Get the selection. If the user already gave plugins or numbers (as args or in chat), use that. Otherwise ask in plain text to reply with the numbers to enable (e.g. 1 3 5, a range 1-3, all, or none) — this open-ended reply doesn't fit AskUserQuestion's fixed options. Pass their reply through unchanged.
Preview the plan (writes nothing):
python3 "${CLAUDE_PLUGIN_ROOT}/bin/skillctl" configure --select "<user reply>"
Add --shared only if the user wants the choice committed for the whole team (writes .claude/settings.json). The engine prints enable / disable / keep on / result, or "No changes" — relay those lines verbatim. It may also print a stays on line: a plugin enabled in the other scope that this scope can't turn off (re-run as the engine suggests, e.g. with/without --shared); surface it so the user isn't surprised it's still on. If it errors on a bad index/name, show the message and re-ask (back to step 2).
Confirm before applying with AskUserQuestion. Read the plan's disable line to choose the options:
If enable and disable are both empty ("No changes"), skip the confirmation — there's nothing to apply.
Apply the confirmed choice, reusing the exact --select string the plan echoed in its apply command:
python3 "${CLAUDE_PLUGIN_ROOT}/bin/skillctl" configure --select "<names>" --apply # Apply (exact set)
python3 "${CLAUDE_PLUGIN_ROOT}/bin/skillctl" configure --select "<names>" --apply --keep-enabled # keep current ones on
Carry through --shared if it was used in step 3.
Tell the user to run /reload-plugins (or start a new session) to load them.
For a single quick toggle without the menu: skillctl enable <plugin> / skillctl disable <plugin>.
After applying, fill this skeleton from the engine's output, copying values verbatim and dropping lines that don't apply:
Enabled: {newly enabled, or "—"}
Disabled: {newly disabled, or "—"}
Stays on (other scope): {plugins from a "stays on" line, if any} — still enabled via the other scope; re-run as the engine suggested to turn them off there.
Now on: {full enabled set} → {settings file}
Scope: {this project only (settings.local.json) / shared with the team (settings.json)}
Next: run /reload-plugins — then this project can use those plugins' skills as /{plugin}:<skill>.
If the user cancelled, say so and report the unchanged enabled set instead.
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.