From meta
Move a skill from one domain to another within a skills marketplace repo, keeping docs, versions, and git history in sync. Usage: migrate-a-skill <skill-name> <to-domain>. Use when the user says "migrate a skill", "promote this skill", "move <skill> to <domain>", or "demote <skill> to deprecated".
How this skill is triggered — by the user, by Claude, or both
Slash command
/meta:migrate-a-skill <skill-name> <to-domain><skill-name> <to-domain>The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Move a skill cleanly between domains: relocate the directory, fix every doc that references it,
Move a skill cleanly between domains: relocate the directory, fix every doc that references it,
bump both domain versions, and land it as a single commit. Assumes a marketplace repo laid out
like this one — domains as plugin dirs, each with skills/, README.md, CLAUDE.md, and
.claude-plugin/plugin.json.
Parse <skill-name> and <to-domain> from the arguments.
*/skills/<skill-name>/ under the repo root. That parent is the
source domain.
<to-domain>/.claude-plugin/plugin.json must exist.
Done when: you have a confirmed source domain, target domain, and skill path.
SKILL.md frontmatter — capture name and the description.Done when: you have the skill's display name (/<name>) and its Purpose line.
Use git mv <source-domain>/skills/<skill-name> <to-domain>/skills/<skill-name> so history is
preserved. If the skill ships supporting files (references, templates, scripts), they move with
the directory — confirm nothing the skill depends on lives outside its own folder.
Done when: the skill directory exists only under the target domain.
In both the source and target domains, edit README.md and CLAUDE.md:
## Skills table.| / | <Purpose> | to the ## Skills table, keeping the
table's existing ordering style.Notes:
_None yet._ placeholder under ## Skills. When adding the
first row, replace the placeholder with the table; when removing the last row, restore it.CLAUDE.md / README.md alone — they list domains, not skills.Done when: no doc in the source domain still lists the skill, and both target docs do.
Minor-bump the version in .claude-plugin/plugin.json for both domains — the target gained
a skill, the source lost one (e.g. 1.2.0 → 1.3.0).
Done when: both plugin.json versions are incremented.
Show the user a summary before committing:
<skill-name>, <source> → <target>Pick the commit type from the direction of the move:
| Move | Type |
|---|---|
into a stable domain (esp. from experimental) — a promotion | feat |
into deprecated — a demotion | chore |
| any other lateral move | refactor |
Message shape — scope is both domains, lower-cased imperative subject, body explains the why:
<type>(<source>,<target>): migrate <skill-name> from <source> to <target>
<one or two lines: what the skill does and why it's moving>. Bump <source> to
<new>, <target> to <new>.
On confirmation, git add the moved directory, both READMEs, both CLAUDE.mds, and both
plugin.jsons, then commit. Do not push.
Done when: a single commit captures the move, doc edits, and version bumps.
npx claudepluginhub xxkeefer/skills --plugin metaCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.