Back to the catalog

sync-my-skills

Sync and manage your custom Claude Code skills across multiple machines using a private GitHub repository. Push, pull, list, and unlink skil

Open source Open in the app JSON README (API)

About

Sync and manage your custom Claude Code skills across multiple machines using a private GitHub repository. Push, pull, list, and unlink skills with simple commands — supports both user-level and project-level skills.

Details

Kind
Plugins
Topic
Version control
Publisher
kunsanglee
Origin
marketplace
Category
ferramentas
Last push
2026-04-05T06:53:07Z
Repository state
ativo
License
MIT
Added
2026-08-30 01:48:58
Updated
2026-08-30 01:48:58
Origin id
kunsanglee/sync-my-skills/sync-my-skills

README

# sync-my-skills

[한국어](README.ko.md)

Sync your Claude Code skills across multiple machines using GitHub.

## Why

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.

## Prerequisites

- [Claude Code](https://claude.ai/code)
- [GitHub CLI (`gh`)](https://cli.github.com/) — installed and authenticated
- Git

## Installation

Install via Claude Code plugin:

```
/plugin marketplace add kunsanglee/sync-my-skills
/plugin install sync-my-skills
```

Or install manually:

```bash
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
```

## Usage

Run these commands inside Claude Code.

### Initial Setup

```
/my-skills setup
```

- Verifies your GitHub account via `gh` CLI
- Creates a **private** repo (or clones an existing one)
- Generates a config file (`~/.my-skills.yml`)
- If skills already exist in the repo (from another machine), offers to link them

### Push Skills (Local → GitHub)

```
/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.

### Pull Skills (GitHub → Local)

```
/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
```

### List Skills

```
/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
```

### Unlink Skills

```
/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.

## How It Works

```
~/.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
```

1. When you push a skill, it's copied to `~/.my-skills-repo/user/` (or `projects/<name>/` for project-level) and the original is replaced with a symlink.
2. After that, editing the skill directly modifies the file in the repo directory (through the symlink).
3. `/my-skills push` commits and pushes changes to GitHub. `/my-skills pull` on another machine fetches them.

## Repo Structure

```
~/.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
```

## User Level vs Project Level

| Scope | Path | Applies to |
|-------|------|------------|
| User level | `~/.claude/skills/` | All projects |
| Project level | `{project}/.claude/skills/` | That project only |

- Default scope is user level
- Use `--project` (`-p`) flag for project-level skills

## Status Labels

| 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) |

## FAQ

**Q: Will my existing skills be deleted?**
A: No. Original skills are backed up to `~/.my-skills-backup/` before being replaced with symlinks.

**Q: What happens when I edit a skill?**
A: The symlink points to the repo directory, so edits go directly to the repo. Just run `/my-skills push` to sync.

**Q: What if I edit the same skill on two machines?**
A: A Git conflict may occur. The tool will show the conflict and help you resolve it.

**Q: Is the repo public?**
A: No, it's created as **private** by default. Your personal skills stay private.

**Q: What if I push the same skill name from different projects?**
A: No conflict — project-level skills are stored under `projects/<project-name>/`, so the same skill name can exist in multiple projects.

## Feedback & Feature Requests

Found a bug or have an idea? Open a GitHub Issue.

- [Open an Issue](https://github.com/kunsanglee/sync-my-skills/issues)
- Bug reports, feature requests, and feedback are all welcome.

## Author

- [@kunsanglee](https://github.com/kunsanglee)

More