Sync Claude Code skills across multiple machines using GitHub
npx claudepluginhub kunsanglee/sync-my-skillsSync Claude Code skills across multiple machines using GitHub. Push, pull, and manage your personal skills with a private GitHub repo.
Sync your Claude Code skills across multiple machines using GitHub.
Claude Code skills live in local files (~/.claude/skills/) and don't sync across devices through your account. If you use Claude Code on multiple machines — work, home, laptop — you've probably wanted your custom skills everywhere without manually copying files.
This plugin automates that: push skills to a private GitHub repo from one machine, pull them on another.
gh) — installed and authenticatedInstall via Claude Code plugin:
/plugin marketplace add kunsanglee/sync-my-skills
/plugin install sync-my-skills
Or install manually:
mkdir -p ~/.claude/skills/my-skills
curl -o ~/.claude/skills/my-skills/SKILL.md \
https://raw.githubusercontent.com/kunsanglee/sync-my-skills/main/skills/my-skills/SKILL.md
Run these commands inside Claude Code.
/my-skills setup
gh CLI~/.my-skills.yml)/my-skills push # Push all linked user-level skills
/my-skills push memo # Push a specific skill
/my-skills push memo recap # Push multiple skills
/my-skills push backend-init -p # Push project-level skill (auto-detect project)
/my-skills push backend-init -p retrievo # Push to a specific project
The first push copies the skill to the repo and replaces the original with a symlink. Subsequent pushes just commit and push changes.
/my-skills pull # Pull all updates + offer to link new skills
/my-skills pull memo # Pull a specific skill
/my-skills pull memo recap # Pull multiple skills
/my-skills pull -p retrievo # Show retrievo's skills, select which to pull
/my-skills pull backend-init -p retrievo # Pull a specific project skill directly
/my-skills list # Show all skills (user + project level)
/my-skills list -p retrievo # Show skills for a specific project
Example output:
Repo: username/my-skills (private)
── User Level ──
[linked] memo Create study notes from conversations
[linked] recap Summarize session work
[local only] backend-init Spring Boot project initializer
[other] skill-creator Create and improve skills (via plugin)
── Project Level ──
retrievo/
[linked] backend-init Spring Boot + Kotlin DDD project init
[remote] claude-api Build apps with Claude API
/my-skills unlink memo # Unlink a user-level skill
/my-skills unlink memo recap # Unlink multiple skills
/my-skills unlink backend-init -p # Unlink a project-level skill
Removes the symlink and restores the original from backup. The skill stays in the repo — only the local link is removed.
~/.claude/skills/memo → (symlink) → ~/.my-skills-repo/user/memo
↕ (git push/pull)
GitHub: username/my-skills
↕ (git push/pull)
[Other machine] ~/.my-skills-repo/user/memo ← (symlink) ← ~/.claude/skills/memo
~/.my-skills-repo/user/ (or projects/<name>/ for project-level) and the original is replaced with a symlink./my-skills push commits and pushes changes to GitHub. /my-skills pull on another machine fetches them.~/.my-skills-repo/
├── user/ ← user-level skills
│ ├── memo/SKILL.md
│ └── recap/SKILL.md
└── projects/ ← project-level skills (by project name)
├── retrievo/
│ └── backend-init/SKILL.md
└── execute/
└── frontend-init/SKILL.md
| Scope | Path | Applies to |
|---|---|---|
| User level | ~/.claude/skills/ | All projects |
| Project level | {project}/.claude/skills/ | That project only |
--project (-p) flag for project-level skills| Label | Meaning |
|---|---|
[linked] | Symlink connected to repo — synced |
[remote] | Exists in repo but not linked on this machine |
[local only] | Exists locally but not in repo |
[other] | Symlink pointing elsewhere (e.g. plugin-installed) |