Claude-skill-registry-data managing-skills
Install, update, list, and remove Claude Code and OpenCode skills. Supports GitHub repositories (user/repo), GitHub subdirectory URLs, and .skill zip files. Can set up interoperability between Claude Code and OpenCode via symlinks. Use when user wants to install, add, download, update, sync, list, remove, uninstall, delete skills, or share skills between Claude Code and OpenCode.
git clone https://github.com/majiayu000/claude-skill-registry-data
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry-data "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/managing-skills" ~/.claude/skills/majiayu000-claude-skill-registry-data-managing-skills && rm -rf "$T"
data/managing-skills/SKILL.md<quick_start> Install a skill from GitHub:
# User-level (available everywhere) git clone https://github.com/user/repo ~/.claude/skills/repo # Project-level (as submodule) git submodule add https://github.com/user/repo .claude/skills/repo
Always ask the user which location they want before installing. </quick_start>
<install_locations> Skills can be installed in multiple locations depending on the tool:
Claude Code:
- User skills:
- available in all projects~/.claude/skills/<skill-name>/ - Project skills:
- available only in that project<project>/.claude/skills/<skill-name>/
OpenCode:
- User skills:
- available in all projects~/.config/opencode/skill/<skill-name>/ - Project skills:
- available only in that project<project>/.opencode/skill/<skill-name>/
Important: Always ask the user which location they want before installing. </install_locations>
<skill_reference_types>
<type name="github-repository"> A dedicated GitHub repo containing a skill.How to recognize:
- Shorthand:
user/repo - Full URL:
https://github.com/user/repo - May contain
but NO path after the branch/tree/<branch>
Install (User - Claude Code):
mkdir -p ~/.claude/skills git clone https://github.com/user/repo ~/.claude/skills/repo
Install (User - OpenCode):
mkdir -p ~/.config/opencode/skill git clone https://github.com/user/repo ~/.config/opencode/skill/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):
</type> <type name="github-subdirectory"> A skill living as a subdirectory within a larger repository.git -C .claude/skills/skill-name pull git add .claude/skills/skill-name
How to recognize:
- Contains
followed by a path within the repo/tree/<branch>/ - Example:
https://github.com/org/repo/tree/main/skills/my-skill - Differs from Type 1: there's a path AFTER the branch name
Parse the URL:
- Repository:
https://github.com/org/repo - Subpath:
skills/my-skill - Skill name:
(last path component)my-skill
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:
</type> <type name="skill-zip"> A `.skill` zip file hosted at any URL.# Read source URL SOURCE_URL=$(cat ~/.claude/skills/my-skill/.skill-manager-ref) # Re-run installation (same steps as above, overwrites existing)
How to recognize:
- URL ends with
.skill - Example:
https://example.com/skills/my-skill.skill
Parse the URL:
- Skill name: filename without
extension.skill
Install (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:
</type># Read source URL SOURCE_URL=$(cat ~/.claude/skills/my-skill/.skill-manager-ref) # Re-run installation (same steps as above, overwrites existing)
</skill_reference_types>
<operations> <operation name="remove"> **User skill:** ```bash 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):
</operation> <operation name="list"> ```bash # Claude Code ls ~/.claude/skills/ ls .claude/skills/rm -rf .claude/skills/skill-name
OpenCode
ls ~/.config/opencode/skill/ ls .opencode/skill/
</operation> <operation name="check-source"> **GitHub repo:** ```bash 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):
</operation> <operation name="post-install"> After installing any skill, check for and install dependencies:cat ~/.claude/skills/skill-name/.skill-manager-ref
</operation> <operation name="interop"> Make skills available to both Claude Code and OpenCode using symlinks.# Python dependencies if [ -f ~/.claude/skills/skill-name/requirements.txt ]; then pip install -r ~/.claude/skills/skill-name/requirements.txt fi # Node dependencies if [ -f ~/.claude/skills/skill-name/package.json ]; then cd ~/.claude/skills/skill-name && npm install fi
User-level (share skills globally):
First, check which tool already has skills:
ls -la ~/.claude/skills 2>/dev/null ls -la ~/.config/opencode/skill 2>/dev/null
If Claude Code has skills, make them available to OpenCode:
mkdir -p ~/.config/opencode ln -s ~/.claude/skills ~/.config/opencode/skill
If OpenCode has skills, make them available to Claude Code:
mkdir -p ~/.claude ln -s ~/.config/opencode/skill ~/.claude/skills
Project-level (share skills in a project):
If Claude Code has project skills, make them available to OpenCode:
mkdir -p .opencode ln -s ../.claude/skills .opencode/skill
If OpenCode has project skills, make them available to Claude Code:
mkdir -p .claude ln -s ../.opencode/skill .claude/skills
Important considerations:
- Only ONE directory should contain actual files; the other should be a symlink
- If both directories already exist with different skills, ask user which to keep as primary
- Symlinks should be committed to git for project-level interop (use relative paths)
- After creating symlinks, verify with
that the link points correctly </operation>ls -la
<error_handling>
<error name="clone-failed"> **Symptom:** `git clone` fails with "repository not found" or network errorResolution:
- Verify the URL is correct:
curl -I https://github.com/user/repo - Check if repo is private (requires auth):
gh auth status - For private repos, use SSH:
</error>git clone git@github.com:user/repo
Resolution:
- Ask user: "Skill already exists. Update it or reinstall fresh?"
- Update:
git -C <path> pull - Reinstall:
then clone again </error>rm -rf <path>
Resolution:
- Check URL format matches expected patterns (user/repo or full GitHub URL)
- Normalize shorthand
touser/repohttps://github.com/user/repo - Ask user to verify the URL </error>
Resolution:
- Check if skill uses different structure (look for README or other entry point)
- Warn user: "This doesn't appear to be a valid skill (no SKILL.md found)"
- Ask if they want to keep it anyway </error>
</error_handling>
<success_criteria> Installation is successful when:
- Target directory exists
- SKILL.md file is present in the directory
- For git repos:
directory exists (or is a submodule).git - For subdirectory/zip:
file exists with source URL.skill-manager-ref - Any dependencies have been installed
Update is successful when:
-
completes without errors (for git repos)git pull - New files are present after re-download (for subdirectory/zip)
Removal is successful when:
- Target directory no longer exists
- For submodules: no entry in
or.gitmodules.git/modules/
Important: After installing, updating, or removing skills, always tell the user they need to restart Claude Code/OpenCode for changes to take effect. </success_criteria>