TAAFT
Free mode
100% free
Freemium
Free Trial
Deals

Sync MCP servers, Skills, Agents & Commands across Claude Code, Cursor, OpenCode, Codex. One config, all tools.

55 4 Language: TypeScript License: MIT Updated: 2d ago

README

# vsync ### **One config. Many AI tools. Zero pain.** [![GitHub stars](https://img.shields.io/github/stars/nicepkg/vsync?style=social)](https://github.com/nicepkg/vsync) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/nicepkg/vsync/pulls) [![Tests](https://img.shields.io/badge/tests-612%20passing-brightgreen)](https://github.com/nicepkg/vsync) [็ฎ€ไฝ“ไธญๆ–‡](./README_cn.md) | English --- **One-command config sync for AI vibe coding tools** Managing Skills, MCP servers, Agents & Commands across multiple AI coding tools is a nightmare. Each tool has its own directories and formats. vsync solves this with one simple command. [Get Started](#-quick-start) ยท [Features](#-features) ยท [Documentation](https://vsync.xiaominglab.com)

โœจ Why vsync?

The Problem: You love using multiple AI vibe coding tools (Claude Code, Cursor, OpenCode, Codex...), but each tool has:

  • Different directory structures for Skills, Agents, Commands, MCP servers
  • Different config file formats (JSON, TOML, JSONC)
  • Different environment variable syntax

Managing configurations across tools becomes a nightmare, especially for teams.

The Solution: vsync gives you one command to sync everything. Pick one tool as your source of truth, and all others stay perfectly in sync.

The Problem We Solve

๐Ÿ˜ซ Without vsync ๐ŸŽ‰ With vsync
๐Ÿ“‹ Manually copy configs between multiple vibe coding tools โšก One command syncs everything automatically
๐Ÿ“‚ Different directories for Skills/Agents/Commands/MCP in each tool ๐ŸŽฏ One command maps to all correct paths
๐Ÿ”ฅ Environment variables break during migration ๐Ÿ›ก๏ธ Variables preserved safely (JSON โ†” TOML โ†” JSONC)
๐Ÿคท No idea which configs are outdated or in conflict ๐Ÿ“Š Smart diff shows exactly what changed and why
โš ๏ธ Risky deletions, manual cleanup nightmares โœ… Safe mode by default, Prune mode for strict mirroring
๐Ÿ”ง Multiple tools = multiple config formats ๐ŸŽฏ Transparent format conversion (preserves JSONC comments!)
๐ŸŒ Copying dozens of configs manually is painfully slow โšก Instant sync with parallel operations & smart caching

Key Benefits

๐Ÿ“š  Single Source of Truth โ†’ All tools sync from one place
๐ŸŽฏ  Smart Diff Planning    โ†’ Preview changes before applying
โšก  Safe & Prune Modes     โ†’ Choose your sync strategy
๐ŸŒˆ  Multi-Tool Support     โ†’ Claude Code, Cursor, OpenCode, Codex
๐Ÿ—ฃ๏ธ  Multi-Language CLI     โ†’ English & ไธญๆ–‡ (Chinese)
โšก  Performance Optimized  โ†’ Parallel ops, caching, symlinks
๐Ÿ”—  Symlink Support        โ†’ Share Skills via symlinks (optional)

How It Works

flowchart TD
    A[Pick Source Tool<br/>Your source of truth] --> B[vsync reads configs<br/>Skills, MCP, Agents, Commands]
    B --> C[Compare with targets<br/>Calculate differences]
    C --> D[Show you the plan<br/>What will change]
    D --> E{Your approval}
    E -->|Yes| F[Auto-convert formats<br/>JSON โ†’ TOML โ†’ JSONC]
    E -->|No| G[Cancelled]
    F --> H[Write to all targets<br/>Crash-safe atomic writes]
    H --> I[โœ… All tools synced!]

    style A fill:#e1f5ff
    style I fill:#c8e6c9
    style E fill:#fff9c4

The magic: Edit configs in ONE tool โ†’ Run vsync sync โ†’ ALL tools stay in sync


๐ŸŽฏ Features

Feature Description Status
Skills Sync Sync Agent Skills across all tools โœ… v1.0
MCP Sync Sync MCP servers with security checks โœ… v1.0
Diff Planning Preview changes before applying โœ… v1.0
Safe Mode Add & update only, no deletions โœ… v1.0
Prune Mode Strict mirroring with deletions โœ… v1.0
Atomic Writes All-or-nothing file operations โœ… v1.0
Manifest Tracking Hash-based change detection โœ… v1.0
User Layer Global configs (~/.vsync.json) โœ… v1.1
Agents Sync Custom AI agents โœ… v1.1
Commands Sync Quick commands โœ… v1.1
Codex Support Full Codex integration (TOML format) โœ… v1.1
Multi-Language English & ไธญๆ–‡ CLI output โœ… v1.2
Performance Parallel operations, smart caching โœ… v1.2
Symlinks Symbolic link support โœ… v1.2
Import/Export Share configs between projects โœ… v1.1

โšก Quick Start

Full documentation: https://vsync.xiaominglab.com

Installation

# Option 1: Run directly with npx (no installation needed)
npx @nicepkg/vsync

# Option 2: Install globally with npm
npm install -g @nicepkg/vsync

# Verify installation
vsync --version

Initialize

# Project-level configuration
vsync init

# User-level (global) configuration
vsync init --user

Interactive prompts:

๐Ÿš€ Welcome to vsync!

โœ” Detecting existing tools...
โœ” Detected: claude-code, cursor

? Which AI coding tools do you use?
  โ—‰ claude-code (detected)
  โ—‰ cursor (detected)
  โ—ฏ opencode
  โ—ฏ codex

? Which tool is your source of truth?
  โฏ claude-code

? What do you want to sync?
  โ—‰ Skills
  โ—‰ MCP

โœ” Configuration created
โœ” Cache directory created
โœ” Manifest initialized

โœ… Setup complete! Run vsync sync to start syncing

Sync Your Configs

# Safe mode (default: no deletions)
vsync sync

# Preview changes without applying
vsync sync --dry-run

# Strict mirroring (deletes extra items in targets)
vsync sync --prune

Example output:

๐Ÿ“– Reading source (claude-code)...
  โœ“ Found 3 skills
  โœ“ Found 2 MCP servers

๐Ÿ“Š Analyzing differences...

๐Ÿ“‹ Sync Plan (Safe Mode)

cursor:
  CREATE:
    โ€ข skill/deploy-prod
  UPDATE:
    โ€ข skill/git-release
    โ€ข mcp/github

? Proceed with sync? (Y/n) y

โœ“ Sync completed in 1.2s

Real-World Usage

Scenario 1: Team Onboarding

# New team member joins, already has Claude Code setup
cd my-project
vsync init  # Choose Claude Code as source, Cursor & OpenCode as targets
vsync sync  # Boom! All tools configured in seconds

# Their entire AI coding environment is now in sync with the team

Scenario 2: User-Level Config Sync Across Multiple Tools

# Set up your global personal configs once
vsync init --user  # Configure which tools to sync
vsync sync --user  # Sync your personal Skills, MCP servers, Agents globally

# Now ALL your tools share the same user-level configs
# Works across all your projects automatically

Scenario 3: Migration from One Tool to Another

# Moving from Cursor to Claude Code?
vsync init  # Choose Cursor as SOURCE (the reference/standard)
                # Choose Claude Code as TARGET (will pull from source)
vsync sync  # All your skills, MCP servers, agents migrated instantly

# SOURCE = Your standard reference (everything syncs FROM here)
# TARGET = Will match the source (everything syncs TO here)

๐Ÿ›  CLI Commands

Core Commands

# Initialize configuration
vsync init [--user]

# Sync configurations
vsync sync [--user] [--dry-run] [--prune]

# View sync plan without executing
vsync plan [--user]

# Check sync status
vsync status [--user]

# List configurations
vsync list [skills|mcp] [--user]

# Clean configs from targets
vsync clean [name] [--user] [--from-source]

# Import from another project
vsync import <path> [--user]

Example Workflows

1. Daily sync after updating Skills:

# Edit your Skills in Claude Code
vim ~/.claude/skills/my-skill/SKILL.md

# Sync to all target tools
vsync sync

2. Preview changes before applying:

vsync plan
# Review the plan
vsync sync

3. Strict mirror mode (delete outdated configs):

vsync sync --prune

4. Clean up a skill from all targets:

# From targets only (source unchanged)
vsync clean skill/old-skill

# From source AND all targets (dangerous!)
vsync clean skill/old-skill --from-source

5. Import configs from another project:

vsync import ../other-project

๐Ÿ“‹ Configuration

.vsync.json

Project-level: <project>/.vsync.json
User-level: ~/.vsync.json

{
  "version": "1.0.0",
  "level": "project",
  "source_tool": "claude-code",
  "target_tools": ["cursor", "opencode", "codex"],
  "sync_config": {
    "skills": true,
    "mcp": true
  },
  "use_symlinks_for_skills": false,
  "language": "en"
}

Key Settings:

  • source_tool: Your source of truth (where you edit configs)
  • target_tools: Tools that will sync FROM the source
  • sync_config: What to sync (skills, mcp, agents, commands)
  • use_symlinks_for_skills: Use symlinks instead of copying (saves disk space)
  • language: CLI language - "en" or "zh" (user-level only)

Config Format Differences (Why You Need vsync)

Each vibe coding tool uses different formats AND different directory structures. vsync handles all the complexity:

Directory Structure Differences:
| Config Type | Claude Code | Cursor | OpenCode | Codex |
|:------------|:------------|:-------|:---------|:------|
| Skills | .claude/skills/ | .cursor/skills/ | .opencode/skills/ | .codex/skills/ |
| Agents | .claude/agents/ | N/A | .opencode/agents/ | N/A |
| Commands | .claude/commands/ | .cursor/commands/ | .opencode/commands/ | N/A |
| MCP Config | .mcp.json | mcp.json | opencode.json(c) | config.toml |

File Format Differences:
| Aspect | Claude Code | Cursor | OpenCode | Codex |
|:-------|:------------|:-------|:---------|:------|
| Format | JSON | JSON | JSONC (with comments) | TOML |
| MCP Field Name | mcpServers | mcpServers | mcp โš ๏ธ | mcp_servers |
| Env Var Syntax | ${VAR} | ${env:VAR} | {env:VAR} | No interpolation |
| Type Field | Not required | Not required | Required (local/remote) | Required |

Without vsync:

  • โŒ Manually copy files between different directories
  • โŒ Remember which tool uses which path
  • โŒ Convert environment variable syntax by hand
  • โŒ Often break configs or forget required fields

With vsync:

  • โœ… One command โ†’ auto-syncs to all tools
  • โœ… Automatic format conversion
  • โœ… Skills support symlinks (optional)

Advanced Features (v1.2+)

Performance Optimizations:

  • โšก Parallel Operations: Sync to multiple targets simultaneously
  • ๐Ÿ’พ Smart Caching: Skip unchanged configs using hash-based manifest
  • ๐Ÿ”— Symlink Support: Follows symbolic links correctly
  • ๐Ÿ“ฆ Optimized I/O: Atomic writes with fsync for crash safety

Format Intelligence:

  • ๐ŸŽฏ TOML Support: Full Codex config.toml handling
  • ๐Ÿ’ฌ JSONC Preservation: Keeps comments in OpenCode configs
  • ๐Ÿ”„ Cross-Format Variables: Converts ${VAR} โ†” ${env:VAR} โ†” {env:VAR} automatically
  • ๐Ÿ›ก๏ธ Variable Safety: Never expands environment variables, preserves syntax

๐ŸŽจ Sync Modes

Safe Mode (Default)

What it does:

  • โœ… Create new items
  • โœ… Update existing items
  • โŒ Never deletes
vsync sync

Prune Mode

What it does:

  • โœ… Create new items
  • โœ… Update existing items
  • โš ๏ธ Deletes items not in source
vsync sync --prune

Use when: You want strict mirroring (e.g., cleaning up old configs)

โ“ FAQ

Q: Which tool should I use as the source?
A: We recommend Claude Code as it has the most complete feature set. However, you can use any tool as your source.

Q: Will vsync overwrite my existing configs?
A: By default, Safe Mode only creates and updatesโ€”it never deletes. Use --prune if you want strict mirroring.

Q: What happens if I edit configs directly in target tools?
A: Changes in target tools will be overwritten on the next sync. The SOURCE is your reference standardโ€”everything syncs FROM the source. Always edit in your source tool, or use import to pull changes from another project.

Q: How do I switch my source tool?
A: Run vsync init again and choose a different source. Then sync to update all targets.

Q: Does it work with monorepos?
A: Yes! Each project can have its own .vsync.json. User-level configs (~/.vsync.json) work globally.

Q: Is it safe to commit .vsync.json to git?
A: Yes! The config file contains no secretsโ€”only tool names and sync preferences. MCP configs with secrets should use environment variables.

Q: Can I sync in both directions?
A: vsync is one-directional (source โ†’ targets). To switch directions, re-run init and choose a different source tool.

Q: What's the difference between project-level and user-level?
A:

  • Project-level (.vsync.json): Team configs, checked into git
  • User-level (~/.vsync.json): Personal global configs, not shared

๐Ÿค Contributing

Contributions are welcome! Here's how you can help:

  • โญ Star this repo - Help others discover this project
  • ๐Ÿ› Report bugs - Open an issue if something isn't working
  • ๐Ÿ’ก Suggest features - What would make this better for you?
  • ๐Ÿ”ง Submit PRs - Improve code, docs, or add features

See CONTRIBUTING.md for guidelines.

Development

Want to contribute? See CONTRIBUTING.md for development setup and guidelines.

Contributors

<a href="https://github.com/nicepkg/vsync/graphs/contributors">
<img src="https://contrib.rocks/image?repo=nicepkg/vsync" />
</a>


๐Ÿ“š Roadmap

v1.0 (MVP) โœ… Released

  • [x] Skills sync (with full file support)
  • [x] MCP sync with security checks
  • [x] Safe & Prune modes
  • [x] Intelligent diff planning
  • [x] Claude Code, Cursor, OpenCode support
  • [x] Atomic writes & crash safety
  • [x] Hash-based manifest system

v1.1 โœ… Released

  • [x] User-level configs (~/.vsync.json)
  • [x] Agents sync (custom AI agents)
  • [x] Commands sync (quick commands)
  • [x] Full Codex support (TOML format)
  • [x] Import command (share configs between projects)
  • [x] Clean command enhancements

v1.2 โœ… Current

  • [x] Multi-language support (English & ไธญๆ–‡)
  • [x] Performance optimizations (parallel ops, caching)
  • [x] Symbolic link support
  • [x] 612 tests passing (45 test files)
  • [x] Production-ready stability

v1.3 ๐Ÿ”œ Next (Watch Mode & Automation)

  • [ ] Watch mode (auto-sync on file changes)
  • [ ] GitHub Actions integration
  • [ ] Pre-commit hooks
  • [ ] Validation improvements

v2.0 ๐Ÿš€ Future

  • [ ] Web UI dashboard
  • [ ] Configuration templates
  • [ ] VS Code extension
  • [ ] Plugin system

๐Ÿ“„ License

MIT ยฉ nicepkg


**If this project helped you, please consider giving it a โญ** GitHub stars Made with โค๏ธ by [nicepkg](https://github.com/nicepkg)
0 AIs selected
Clear selection
#
Name
Task