sync
Push skills from source to all targets.
Operations like install and uninstall only modify source — sync propagates to targets. This lets you batch changes, preview with --dry-run, and control when targets update. See Why Sync is a Separate Step.
When to Use
- After installing, uninstalling, or editing skills — propagate changes to all targets
- After changing a target's sync mode — apply the new mode
- Periodically to ensure all targets are in sync
Command Overview
| Type | Command | Direction |
|---|---|---|
| Local sync | sync / collect | Source ↔ Targets |
| Remote sync | push / pull | Source ↔ Git Remote |
sync= Distribute from Source to Targetscollect= Collect from Targets back to Sourcepush= Push to git remotepull= Pull from git remote and sync
Overview
| Command | Direction | Description |
|---|---|---|
sync | Source → Targets | Push skills to all targets |
collect <target> | Target → Source | Collect skills from target to source |
push | Source → Remote | Commit and push to git |
pull | Remote → Source → Targets | Pull from git, then sync |
Project Mode
When .skillshare/config.yaml exists in the current directory, sync auto-detects project mode:
cd my-project/
skillshare sync # Auto-detected project mode
skillshare sync -p # Explicit project mode
Project sync defaults to merge mode (per-skill symlinks), but each target can be set to copy or symlink mode via skillshare target <name> --mode copy -p. Backup is not created (project targets are reproducible from source).
.skillshare/skills/ .claude/skills/
├── my-skill/ ────────► ├── my-skill/ → (symlink)
├── pdf/ ────────► ├── pdf/ → (symlink)
└── ... └── local/ (preserved)
Sync
Push skills from source to all targets.
skillshare sync # Sync to all targets
skillshare sync --dry-run # Preview changes
skillshare sync -n # Short form
skillshare sync --force # Overwrite all managed skills
skillshare sync -f # Short form
| Flag | Short | Description |
|---|---|---|
--dry-run | -n | Preview changes without writing |
--force | -f | Overwrite all managed entries regardless of checksum (copy mode) or replace existing directories with symlinks (merge mode) |
What Happens
Example Output

Collect
Collect skills from a target back to source.
skillshare collect claude # Collect from Claude
skillshare collect claude --dry-run # Preview
skillshare collect --all # Collect from all targets
When to use: You created/edited a skill directly in a target (e.g., ~/.claude/skills/) and want to bring it to source.
After collecting:
skillshare collect claude
skillshare sync # ← Distribute to other targets
Pull
Pull from git remote and sync to all targets.
skillshare pull # Pull from git remote
skillshare pull --dry-run # Preview
When to use: You pushed changes from another machine and want to sync them here.
Push
Commit and push source to git remote.
skillshare push # Auto-generated message
skillshare push -m "Add pdf" # Custom message
Conflict handling:
- If remote is ahead,
pushfails → runpullfirst
Sync Modes
| Mode | Behavior | Use case |
|---|---|---|
merge | Each skill symlinked individually | Default. Preserves local skills. |
copy | Each skill copied as real files | Compatibility-first setups, vendoring skills into a project repo, or environments where symlink behavior is unreliable. |
symlink | Entire directory is one symlink | Exact copies everywhere. |
Per-target override remains the primary tuning knob:
skillshare target <name> --mode copy
skillshare sync
When sync prints a compatibility hint, the example target is chosen in this priority:
cursor → antigravity → copilot → opencode.
If none of these targets exist (or they already run copy), no compatibility hint is shown.
See Sync Modes for a neutral decision matrix.
Per-target include/exclude filters
In merge and copy modes, each target can define include / exclude patterns in config:
targets:
codex:
path: ~/.codex/skills
include: [codex-*]
claude:
path: ~/.claude/skills
exclude: [codex-*]
- Matching is against flat target names (for example
team__frontend__ui) includeis applied first, thenexcludediff,status,doctor, and UI drift all use the filtered expected set- In symlink mode, filters are ignored
- In copy mode, filters work the same way as merge mode
syncremoves existing source-linked or managed entries that are now excluded
See Configuration for full details.
Filter behavior examples
Assume source contains:
core-authcore-docscodex-agentcodex-experimentalteam__frontend__ui
include only
targets:
codex:
path: ~/.codex/skills
include: [codex-*, core-*]
After sync, codex receives:
core-authcore-docscodex-agentcodex-experimental
Use this when a target should receive only a curated subset.
exclude only
targets:
claude:
path: ~/.claude/skills
exclude: [codex-*, *-experimental]
After sync, claude receives:
core-authcore-docsteam__frontend__ui
Use this when a target should get "almost everything" except specific groups.
include + exclude
targets:
cursor:
path: ~/.cursor/skills
include: [core-*, codex-*]
exclude: [*-experimental]
After sync, cursor receives:
core-authcore-docscodex-agent
codex-experimental is first included, then removed by exclude.
What gets removed when filters change
When a filter is updated and sync runs:
- Source-linked entries (symlink/junction) that are now filtered out are pruned
- Local non-symlink folders already in target are preserved
Merge Mode (Default)
Source Target (claude)
─────────────────────────────────────────────────────────────
skills/ ~/.claude/skills/
├── my-skill/ ────────► ├── my-skill/ → (symlink)
├── another/ ────────► ├── another/ → (symlink)
└── ... ├── local-only/ (preserved)
└── .skillshare-manifest.json
Copy Mode
Source Target (cursor)
─────────────────────────────────────────────────────────────
skills/ ~/.cursor/skills/
├── my-skill/ ────copy► ├── my-skill/ (real files)
├── another/ ────copy► ├── another/ (real files)
└── ... ├── local-only/ (preserved)
└── .skillshare-manifest.json
Both merge and copy modes write .skillshare-manifest.json to track managed skills. In copy mode, checksums enable incremental sync (unchanged skills are skipped); --force overwrites all.
Symlink Mode
Source Target (claude)
─────────────────────────────────────────────────────────────
skills/ ────────► ~/.claude/skills → (symlink to source)
├── my-skill/
├── another/
└── ...
Change Mode
skillshare target claude --mode merge
skillshare target claude --mode copy
skillshare target claude --mode symlink
skillshare sync # Apply change
Safety Warning
In symlink mode, deleting through target deletes source!
rm -rf ~/.claude/skills/my-skill # ❌ Deletes from SOURCE
skillshare target remove claude # ✅ Safe way to unlink
Backup
Backups are created automatically before sync and target remove.
Location: ~/.local/share/skillshare/backups/<timestamp>/
Manual Backup
skillshare backup # Backup all targets
skillshare backup claude # Backup specific target
skillshare backup --list # List all backups
skillshare backup --cleanup # Remove old backups
skillshare backup --dry-run # Preview
Example Output
$ skillshare backup --list
Backups
─────────────────────────────────────────
2026-01-20_15-30-00/
claude/ 5 skills, 2.1 MB
cursor/ 5 skills, 2.1 MB
2026-01-19_10-00-00/
claude/ 4 skills, 1.8 MB
Restore
Restore targets from backup.
skillshare restore claude # Latest backup
skillshare restore claude --from 2026-01-19_10-00-00 # Specific backup
skillshare restore claude --dry-run # Preview
See Also
- status — Show sync state
- diff — Show differences
- Targets — Manage targets
- Cross-Machine Sync — Sync across computers
- install — Install skills