Install, update, list, and remove Claude Code skills. Supports GitHub repositories (user/repo), GitHub subdirectory URLs (github.com/user/repo/tree/branch/path), and .skill zip files. Use when user wants to install, add, download, update, sync, list, remove, uninstall, or delete skills.
/plugin marketplace add mikekelly/promode-linear/plugin install mikekelly-promode-plugins-promode-3@mikekelly/promode-linearThis skill inherits all available tools. When active, it can use any tool Claude has access to.
<first_action> When invoked for skill management:
<classify_request> Before any operation, classify what the user wants:
Operation type:
Source type (for INSTALL/UPDATE):
user/repo or github.com/user/repo without path after branch/tree/<branch>/ followed by a path.skillState both classifications before proceeding. </classify_request>
<workflow> ## Phase 1: Understand Request - Classify operation and source type - Identify target skill name - Determine install location (user vs project)Exit criteria: Operation type, source type, skill name, and location all known.
Exit criteria: Preconditions verified, conflicts identified.
<error_handling>Exit criteria: Commands completed without error.
<success_criteria>Exit criteria: Success criteria met, user reminded to restart. </workflow>
<install_locations> Skills can be installed in two locations:
~/.claude/skills/<skill-name>/) - available in all projects<project>/.claude/skills/<skill-name>/) - available only in that project<decision_criteria> Suggest user location when:
Suggest project location when:
Always ask the user which location they want before installing. </install_locations>
<quick_start> Install from GitHub repo:
mkdir -p ~/.claude/skills
git clone https://github.com/user/repo ~/.claude/skills/repo
List installed skills:
ls ~/.claude/skills/
ls .claude/skills/
Remove a skill:
rm -rf ~/.claude/skills/skill-name
After any operation, remind user to restart Claude Code. </quick_start>
<skill_reference_types> <type name="github_repository"> A dedicated GitHub repo containing a skill.
How to recognize:
user/repohttps://github.com/user/repo/tree/<branch> but NO path after the branchInstall (User):
mkdir -p ~/.claude/skills
git clone https://github.com/user/repo ~/.claude/skills/repo
Install (Project - as submodule):
mkdir -p .claude/skills
git submodule add https://github.com/user/repo .claude/skills/repo
Update (User):
git -C ~/.claude/skills/skill-name pull
Update (Project):
git -C .claude/skills/skill-name pull
git add .claude/skills/skill-name
</type>
<type name="github_subdirectory">
A skill living as a subdirectory within a larger repository.
How to recognize:
/tree/<branch>/ followed by a path within the repohttps://github.com/org/repo/tree/main/skills/my-skillParse the URL:
https://github.com/org/reposkills/my-skillmy-skill (last path component)Install (User or Project):
# Clone to temp directory
git clone --depth 1 https://github.com/org/repo /tmp/skill-clone-$$
# Copy subdirectory to target
mkdir -p ~/.claude/skills
cp -r /tmp/skill-clone-$$/skills/my-skill ~/.claude/skills/my-skill
# Create .skill-manager-ref with source URL
echo "https://github.com/org/repo/tree/main/skills/my-skill" > ~/.claude/skills/my-skill/.skill-manager-ref
# Cleanup
rm -rf /tmp/skill-clone-$$
Update:
# Read source URL
SOURCE_URL=$(cat ~/.claude/skills/my-skill/.skill-manager-ref)
# Re-run installation (same steps as above, overwrites existing)
</type>
<type name="skill_zip">
A `.skill` zip file hosted at any URL.
How to recognize:
.skillhttps://example.com/skills/my-skill.skillParse the URL:
.skill extensionInstall (User or Project):
# Download to temp
curl -L -o /tmp/skill-$$.zip "https://example.com/skills/my-skill.skill"
# Create target and extract
mkdir -p ~/.claude/skills/my-skill
unzip -o /tmp/skill-$$.zip -d ~/.claude/skills/my-skill
# If zip contained a single directory, move contents up
if [ $(ls -1 ~/.claude/skills/my-skill | wc -l) -eq 1 ] && [ -d ~/.claude/skills/my-skill/* ]; then
mv ~/.claude/skills/my-skill/*/* ~/.claude/skills/my-skill/
rmdir ~/.claude/skills/my-skill/*/
fi
# Create .skill-manager-ref with source URL
echo "https://example.com/skills/my-skill.skill" > ~/.claude/skills/my-skill/.skill-manager-ref
# Cleanup
rm /tmp/skill-$$.zip
Update:
# Read source URL
SOURCE_URL=$(cat ~/.claude/skills/my-skill/.skill-manager-ref)
# Re-run installation (same steps as above, overwrites existing)
</type>
</skill_reference_types>
<remove_skill> User skill:
rm -rf ~/.claude/skills/skill-name
Project skill (submodule):
git submodule deinit -f .claude/skills/skill-name
git rm -f .claude/skills/skill-name
rm -rf .git/modules/.claude/skills/skill-name
Project skill (not a submodule):
rm -rf .claude/skills/skill-name
</remove_skill>
<check_skill_source> GitHub repo:
git -C ~/.claude/skills/skill-name remote get-url origin
git -C ~/.claude/skills/skill-name rev-parse --short HEAD
Subdirectory or Zip (has .skill-manager-ref):
cat ~/.claude/skills/skill-name/.skill-manager-ref
</check_skill_source>
<post_install> After installing any skill, check for and install dependencies:
if [ -f ~/.claude/skills/skill-name/requirements.txt ]; then
pip install -r ~/.claude/skills/skill-name/requirements.txt
fi
</post_install>
<error_handling> Network failure during clone/download:
--depth 1 for large reposPermission denied:
sudo only if installing to system location (not recommended)Skill already exists:
Invalid skill structure:
<never_do>
sudo for skill installation<success_criteria> Installation is successful when:
Update is successful when:
Removal is successful when:
<output_format> Every skill management response MUST include:
<operation>INSTALL|UPDATE|LIST|REMOVE|CHECK</operation>
<skill_name>name of skill</skill_name>
<location>~/.claude/skills/ or .claude/skills/</location>
<status>SUCCESS|FAILED|BLOCKED</status>
<action_taken>What was done</action_taken>
<next_steps>Restart Claude Code / Additional steps needed</next_steps>
Responses missing any section are incomplete. </output_format>
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.