One-click synchronization tool for AI Skills (SKILL.md) across coding agents and IDEs.
sync-skill copies your Agent Skills from one AI tool into another. Agent Skills use the open SKILL.md format — a skill is just a folder containing a SKILL.md file (YAML frontmatter plus Markdown instructions) and optional scripts/assets. Because every supported platform reads the same format, syncing is simply a matter of copying skill folders from one platform's skills directory into another's. No format conversion is needed.
Each platform stores skills in a different directory, so sync-skill knows where every tool looks and moves your skills there safely — asking for confirmation before it replaces anything that already exists on the target, and never deleting skills that only exist there.
- Runtime: Node.js >= 18 (pure ESM, no build step).
- Distribution: run via
npx sync-skill(no global install required). - Dependency:
@inquirer/promptsfor the interactive wizard. Everything else uses Node built-ins. - Tests:
npm test(Node's built-innode --test). - OS support: Linux, macOS, and Windows.
npx -y sync-skill <source> <target> [--scope global|project]Examples:
# Sync all global skills from Claude Code into Cursor
npx -y sync-skill claude cursor
# Sync project-level skills from Claude Code into Codex (./.claude/skills -> ./.agents/skills)
npx -y sync-skill claude codex --scope projectnpx -y sync-skillThe wizard walks you through: scope → source platform → target platform → checkbox selection of skills to copy.
--scope global(default): personal skills under your home directory.--scope project: workspace skills under the current directory.
You can pass any of these keywords as the <source> / <target>:
| Platform | Keywords |
|---|---|
| Claude Code | claude, claude-code, claude code, anthropic |
| Codex | codex, openai, codex cli |
| Cursor | cursor, cursor ide |
| Gemini CLI | gemini, gemini cli, google, gcloud |
| GitHub Copilot CLI | copilot, copilot cli, github, gh |
| Visual Studio Code | vscode, vs code, vs-code, code |
| OpenCode | opencode, open code, anomaly |
| Platform | Global (Linux / macOS) | Global (Windows) | Project | Documentation |
|---|---|---|---|---|
| Claude Code | ~/.claude/skills/ |
%USERPROFILE%\.claude\skills\ |
.claude/skills/ |
Claude Code skills |
| Codex | ~/.codex/skills/ |
%USERPROFILE%\.codex\skills\ |
.agents/skills/ |
Codex skills |
| Cursor | ~/.cursor/skills/ |
%USERPROFILE%\.cursor\skills\ |
.cursor/skills/ |
Cursor skills |
| Gemini CLI | ~/.gemini/skills/ |
%USERPROFILE%\.gemini\skills\ |
.gemini/skills/ |
Gemini CLI skills |
| GitHub Copilot CLI | ~/.copilot/skills/ |
%USERPROFILE%\.copilot\skills\ |
.github/skills/ |
Copilot CLI skills |
| Visual Studio Code | ~/.copilot/skills/ |
%USERPROFILE%\.copilot\skills\ |
.github/skills/ |
VS Code agent skills |
| OpenCode | ~/.config/opencode/skills/ |
%LOCALAPPDATA%\opencode\skills\ |
.opencode/skills/ |
OpenCode skills |
Notes:
- VS Code and GitHub Copilot CLI share
~/.copilot/skills/. Syncing between them under the global scope is reported as a no-op. - Many tools additionally read the cross-tool locations
~/.agents/skills/(personal) and.agents/skills/(project), as well as~/.claude/skills/.sync-skilltargets each platform's primary native directory shown above.
- Two modes: direct CLI (copy all) and interactive (select individual skills).
- Two scopes:
global(personal) andproject(workspace). - Non-destructive merge: skills that exist only on the target are left untouched.
- Overwrite confirmation: if a skill of the same name already exists on the target,
sync-skillshows the source vs. targetversion(when declared) and asks before replacing it. - Model-field awareness: reports skills whose frontmatter is bound to a specific model (see below).
A skill's SKILL.md frontmatter has universal fields (name, description, license, compatibility, metadata, allowed-tools) that are portable across every platform, and Claude Code-specific extensions that other tools ignore.
Among the extensions, two are bound to a specific model:
model— the model the skill runs on (sonnet/opus/haiku, a full model id, orinherit).effort— the reasoning effort level.
These values belong to Anthropic's model family. When a skill is synced to Gemini, Codex, Cursor, etc., spec-compliant tools simply ignore unknown fields (so nothing breaks), but the values are meaningless there.
sync-skill never rewrites these values. It copies the skill as-is, then prints a report listing which synced skills declare model/effort and reminds you to edit them manually for the target platform:
[sync-skill] Heads up — some synced skills declare model-specific fields:
[sync-skill] - demo (model: opus, effort: high)
[sync-skill] Cursor uses a different model family. These values were copied as-is — please edit them manually.
When a source skill shares its folder name with a skill already present on the target, sync-skill does not overwrite it silently. Instead it:
- Tells you the skill already exists on the target.
- Shows the source and target
version(read from eachSKILL.mdfrontmatter), if either side declares one. - Asks you to confirm the replacement.
[sync-skill] "demo" already exists in Cursor (~/.cursor/skills).
[sync-skill] Source version: 2.0.0 Target version: 1.0.0
? Replace "demo"? This cannot be undone — no backup will be kept. (y/N)
This applies in both interactive and direct (npx sync-skill <source> <target>) mode. Declining leaves the existing target skill untouched (reported as Skipped); accepting replaces it permanently — no backup is kept, so make sure you no longer need the existing version before confirming.
- On Windows, home-based tools resolve under
%USERPROFILE%; OpenCode resolves under%LOCALAPPDATA%. Missing environment variables fall back to the standardAppDatalocations. --scope projectresolves directories relative to the current working directory, so run it from your project root.- Paths are normalized per-OS, so the same command works on Linux, macOS, and Windows.
MIT