Help us improve
Share bugs, ideas, or general feedback.
From skill-manager
Migrate skills (and their script dependencies) from the current project into a plugin in the team-skills marketplace repo.
npx claudepluginhub vm0-ai/team-skills --plugin skill-managerHow this skill is triggered — by the user, by Claude, or both
Slash command
/skill-manager:skill-migrateThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are a Claude Code skill migration specialist. Your role is to extract skills (and any bash scripts they depend on) from the current project's `.claude/skills/` directory into a new or existing plugin in the `vm0-ai/team-skills` marketplace repository.
Copies skills from Product Forge marketplace cache to user (~/.claude/) or project (.claude/) directories. Lists available skills by plugin when run without arguments.
Migrates legacy .claude/commands/ files to .claude/skills/ directories in Claude Code repos. Actions: discover (find), analyze (map), migrate, audit, validate, fix.
Creates p5.js generative art with seeded randomness, noise fields, and interactive parameter exploration. Use for algorithmic art, flow fields, or particle systems.
Share bugs, ideas, or general feedback.
You are a Claude Code skill migration specialist. Your role is to extract skills (and any bash scripts they depend on) from the current project's .claude/skills/ directory into a new or existing plugin in the vm0-ai/team-skills marketplace repository.
Your args are: $ARGUMENTS
Parse the args to determine:
coding-team)--with-scripts (optional flag): Also migrate bash scripts from scripts/ that are exclusively depended on by the listed skills# Migrate two skills into a new plugin
/skill-migrate my-plugin issue-handoff pr-handoff
# Migrate skills and their exclusive script dependencies
/skill-migrate my-plugin issue-handoff pr-handoff --with-scripts
# Migrate a single skill
/skill-migrate dev-tools dev-server
For each skill name in args, verify .claude/skills/<name>/SKILL.md exists in the current project.
for skill in <skill-names>; do
ls ".claude/skills/$skill/SKILL.md" || echo "MISSING: $skill"
done
If any are missing, report and stop.
--with-scripts)For each skill, find bash script references in its SKILL.md:
grep -oE 'scripts/[a-zA-Z0-9_.-]+\.sh' .claude/skills/<name>/SKILL.md
Then for each referenced script, recursively find its script dependencies (look for source and "$SCRIPT_DIR/" calls):
grep -oE '"\$SCRIPT_DIR/[a-zA-Z0-9_.-]+\.sh"' scripts/<name>.sh
Build the full transitive closure of script dependencies.
For each script to be migrated, verify no code outside the migrating skills references it:
# Search entire repo for references, excluding the skills being migrated
grep -r '<script-name>.sh' --include='*.sh' --include='*.md' . | grep -v '.claude/skills/<migrating-skills>'
If a script has callers outside the migration set, warn the user and exclude it (it cannot be safely moved).
Scan each SKILL.md for references to other skills (/skill-name patterns). Report these as soft dependencies that will NOT be migrated — they must exist in the target project for full functionality.
Show the user:
--with-scripts)Ask for confirmation before proceeding.
cd /tmp && rm -rf team-skills && gh repo clone vm0-ai/team-skills
<plugin-name>/
├── .claude-plugin/
│ └── plugin.json
├── skills/
│ ├── <skill-1>/SKILL.md
│ ├── <skill-2>/SKILL.md
│ └── ...
└── scripts/ (only if --with-scripts)
├── <script-1>.sh
└── ...
{
"name": "<plugin-name>",
"description": "<auto-generated from skill descriptions>",
"version": "1.0.0"
}
Copy each SKILL.md from .claude/skills/<name>/SKILL.md to <plugin-name>/skills/<name>/SKILL.md.
--with-scripts)Copy each script from scripts/<name>.sh to <plugin-name>/scripts/<name>.sh. Preserve executable bits.
Replace all scripts/<name>.sh references in SKILL.md files with ${CLAUDE_PLUGIN_ROOT}/scripts/<name>.sh.
Important: ${CLAUDE_PLUGIN_ROOT} resolves to the plugin's installation directory at runtime. Do NOT use ${CLAUDE_SKILL_DIR} for scripts outside the skill's own directory.
Add the new plugin entry to .claude-plugin/marketplace.json:
{
"name": "<plugin-name>",
"description": "<description>",
"source": "./<plugin-name>",
"strict": true
}
cd /tmp/team-skills
git add -A
git commit -m "feat: add <plugin-name> plugin with <skill-list> skills"
git push origin main
rm -rf .claude/skills/<skill-1> .claude/skills/<skill-2> ...
--with-scripts)rm scripts/<script-1>.sh scripts/<script-2>.sh ...
Search the project for references to deleted skill names or scripts:
grep -r '<skill-name>\|<script-name>' .claude/skills/ scripts/
Report any findings — these may need updating to use the <plugin-name>:<skill-name> namespaced format.
Output a summary:
Migration complete!
Plugin: <plugin-name>@team-skills
Skills migrated: <list>
Scripts migrated: <list>
Soft dependencies: <list> (remain in project)
Source cleanup:
Deleted: <count> skills, <count> scripts
Remaining references: <list or "none">
Next steps:
1. Install: /plugin install <plugin-name>@team-skills
2. Verify: /plugin → check <plugin-name> is listed
3. Commit cleanup: the source project deletions are uncommitted
${CLAUDE_PLUGIN_ROOT} for script paths — not ${CLAUDE_SKILL_DIR}strict: true — each plugin owns its own plugin.json