Stop copying your AI skills and commands between tools. Do it once, use them everywhere.
You have a collection of AI coding skills and custom commands. Maybe they are prompts, context files, reusable instructions, or slash commands. You want to use these across multiple AI coding assistants: OpenCode, Claude Code, Cursor, Codex, and dozens of others.
The problem? Each tool stores skills and commands in different locations:
| Tool | Skills Location | Commands Location |
|---|---|---|
| OpenCode | ~/.config/opencode/skill/ |
~/.config/opencode/commands/ |
| Claude Code | ~/.claude/skills/ |
~/.claude/commands/ |
| Cursor | ~/.cursor/skills/ |
- |
| Codex | ~/.codex/skills/ |
~/.codex/commands/ |
| Kilo Code | ~/.kilocode/skills/ |
~/.kilocode/commands/ |
| Amp | ~/.agents/skills/ |
- |
| Antigravity | ~/.agent/skills/ |
- |
And that is just six tools. CapSync supports over 40.
CapSync solves this by creating a single source of truth for your skills and commands. You maintain one skills directory and optionally one commands directory. CapSync creates symlinks from those directories to each tool's expected location. Add a skill or command once, it appears in every tool. Remove it once, it disappears everywhere.
What CapSync Is:
- A synchronization tool that links your existing skills and commands to multiple AI coding assistants
- A symlink manager that keeps your skills and commands directories in sync with many tools
What CapSync Is Not:
- A registry browser or catalog search tool. CapSync does not rank, search, or recommend skills for you
- A general-purpose package manager for commands. Commands still need to come from your own source directory
- A skill or command creator. CapSync only syncs and installs content you explicitly point it at
Prerequisites: You need to have skills (and optionally commands) already installed in local directories before using CapSync. CapSync assumes you have:
- A directory containing your skills (e.g.,
~/dev/scripts/skills) - Optionally, a directory containing your commands (e.g.,
~/dev/scripts/commands) - Skills and commands formatted for your AI tools
If you already know which Git repository or skill reference you want, capsync clone and capsync install can materialize it into your configured skills source. CapSync still does not browse, rank, or discover skills for you.
macOS (Apple Silicon):
curl -L -o capsync https://github.com/pixincreate/cap_sync/releases/latest/download/capsync-darwin-aarch64
chmod +x capsync
./capsync initmacOS (Intel):
curl -L -o capsync https://github.com/pixincreate/cap_sync/releases/latest/download/capsync-darwin-x86_64
chmod +x capsync
./capsync initLinux (x86_64):
curl -L -o capsync https://github.com/pixincreate/cap_sync/releases/latest/download/capsync-linux-x86_64
chmod +x capsync
./capsync initOptional: Add to PATH
# Add to ~/.zshrc or ~/.bashrc
export PATH="$PATH:/path/to/capsync/dir"cargo install capsyncgit clone https://github.com/pixincreate/cap_sync.git
cd cap_sync
cargo install --path .Run capsync init to create your configuration. The tool will:
- Ask for your skills source directory path (supports
$HOME,~, and other shell variables) - Automatically detect if a
commands/subdirectory exists in your skills directory - Prompt to enable commands if found
- Scan your system for installed AI coding tools
- Add only the detected tools to your configuration
- Enable those tools automatically
$ capsync init
Welcome to CapSync! Let's set up your configuration.
Enter your skills source directory: $HOME/dev/scripts/skills
Detecting installed tools...
Detected and enabled: claude, opencode
Configuration created at /Users/you/.config/capsync/config.tomlIf a commands/ subdirectory is found in your skills directory:
$ capsync init
Welcome to CapSync! Let's set up your configuration.
Enter your skills source directory: $HOME/dev/scripts/skills
Found commands/ subdirectory in skills source.
Enable commands? [Y/n]: Y
Detecting installed tools...
Detected and enabled: claude, opencode
Configuration created at /Users/you/.config/capsync/config.tomlAfter initial setup, your workflow is simple:
# Sync your skills and commands to all enabled tools
capsync sync
# Check the status of your symlinks
capsync status
# View your current configuration
capsync configNote: If
commands_sourceis not configured,syncwill only sync skills.
When you install a new AI coding tool, add it to CapSync:
# Add the tool and sync automatically
capsync add cursor
# Or add without syncing
capsync add codex --no-syncCapSync validates the tool name against its supported tools list. If you try to add an unsupported tool:
$ capsync add unknown-tool
Error: Tool 'unknown-tool' does not exist or is unsupported in the current versionRemove a specific tool's symlink:
capsync remove claudeRemove all symlinks:
capsync remove --allCapSync uses directory symlinks (symbolic links) to connect your skills to each tool.
- You designate one directory as your skills source (e.g.,
~/dev/scripts/skills/skills) - CapSync creates symlinks from that directory to each tool's expected skills location
- Each tool sees your skills as if they were native to that tool
- Single source of truth: Edit skills in one place
- Automatic propagation: Changes appear in all tools immediately
- No copying: Symlinks are lightweight pointers, not copies
- Easy management: Add or remove tools without reorganizing files
- Clean removal: Remove a tool's access without deleting your skills
Before CapSync:
~/dev/scripts/skills/
├── my-skill/
│ └── SKILL.md
~/.config/opencode/skill/
└── my-skill/ (copy)
└── SKILL.md (copy)
~/.claude/skills/
└── my-skill/ (copy)
└── SKILL.md (copy)
After CapSync:
~/dev/scripts/skills/
└── my-skill/
└── SKILL.md (original)
~/.config/opencode/skill/
└── my-skill -> ~/dev/scripts/skills/my-skill (symlink)
~/.claude/skills/
└── my-skill -> ~/dev/scripts/skills/my-skill (symlink)
CapSync stores its configuration at ~/.config/capsync/config.toml:
skills_source = "/Users/you/dev/scripts/skills"
commands_source = "/Users/you/dev/scripts/commands"
[destinations.opencode]
enabled = true
skills_path = "/Users/you/.config/opencode/skill"
commands_path = "/Users/you/.config/opencode/commands"
[destinations.claude]
enabled = true
skills_path = "/Users/you/.claude/skills"
commands_path = "/Users/you/.claude/commands"
[destinations.cursor]
enabled = false
skills_path = "/Users/you/.cursor/skills"You can manually edit this file to:
- Change the skills and/or commands source directories
- Enable or disable specific tools
- Adjust destination paths if your tools use non-standard locations
CapSync currently supports 40+ AI coding assistants:
A-C: AdaL, Amp, Antigravity, Augment, Claude Code, Cline, CodeBuddy, Codex, Command Code, Continue, Cortex, Crush, Cursor
D-G: Droid, Gemini CLI, GitHub Copilot, Goose
I-K: iFlow CLI, Junie, Kilo Code, Kimi CLI, Kiro CLI, Kode
M-N: MCPJam, Mistral Vibe, Moltbot, Mux, Neovate
O-Q: OpenCode, OpenHands, OpenClaw, Pi, Pochi, Qoder, Qwen Code
R-Z: Replit, Roo Code, Trae, Trae CN, Windsurf, Zencoder
Not all tools support commands. Currently, the following tools support command syncing:
- Claude Code:
~/.claude/commands/ - OpenCode:
~/.config/opencode/commands/ - Kilo Code:
~/.kilocode/commands/ - Codex:
~/.codex/commands/
Missing a tool? CapSync is designed to easily add new tools. Open an issue or submit a PR.
Initialize configuration. Detects installed tools and creates config file.
Display current configuration and enabled tools.
Scan system for installed AI coding tools without modifying config.
Create or update symlinks for all enabled tools.
Clone a whole remote Git repository into your configured skills source.
Supported inputs:
owner/repohttps://...http://...git@...
Options:
--branch <name>: Clone a specific branch instead of auto-detecting the remote default branch--no-sync: Skip runningcapsync syncafter the clone finishes
Behavior:
- Treats
skills_sourceas the checkout for one whole repository - If the same repo already exists, prompts to update in place or override with a fresh clone
- Update fetches remote changes and hard-resets the local branch to its upstream
- If the requested branch differs from the current local branch, CapSync asks for explicit confirmation before re-cloning instead of silently replacing the checkout
- If the existing source is a different repo, a git repo without
origin, or a plain directory, CapSync asks before replacing it - During override, it offers a backup when local changes would otherwise be lost
Install a single skill into your configured skills source from an explicit reference.
Supported inputs in v1:
https://skills.sh/owner/repo/skill-slughttps://github.com/owner/repo/tree/<branch>/path/to/skillowner/repo/skill-slugowner/repo/path/to/skill
Options:
--no-sync: Skip runningcapsync syncafter the install finishes
Behavior:
- Installs exactly one skill into
skills_source/<slug> - Uses a temporary git checkout to resolve and copy the skill directory
- Rejects
http://skills.sh/...; use HTTPS only - For GitHub tree URLs, branch names containing
/must be URL-encoded in the branch segment (for examplefeature%2Fmy-branch) - Refuses to install into a
skills_sourcethat is itself a git repository managed bycapsync clone - Prompts before replacing an already-installed skill with the same slug
- Leaves
commands_sourceunchanged in v1
Mental model:
capsync clone ...makesskills_sourcebe a checkout of one whole repositorycapsync install ...copies one selected skill intoskills_source/<slug>
Add a tool to configuration and sync automatically.
Options:
--no-sync: Add tool without running sync
Remove symlink for a specific tool.
Options:
--all: Remove all symlinks
Check status of source directory and all symlinks.
While CapSync does not enforce a specific skill format, most AI tools expect:
your-skill/
└── SKILL.md
The SKILL.md typically includes metadata and instructions:
---
name: your-skill
description: What this skill does
license: MIT
---
# Your Skill
Detailed instructions for the AI...CapSync syncs the entire directory structure, so your skills can include multiple files, subdirectories, or any format your tools support.
Commands are typically markdown files that define slash commands for AI tools:
your-command.md
Example command file:
---
name: test
description: Run test suite
---
# Test Command
Run the test suite with coverage:
cargo testYour commands source can be:
-
A separate directory (recommended):
~/my-commands/ ├── opencode_deploy.md ├── opencode_test.md ├── claude_deploy.md └── claude_test.md -
A
commands/subdirectory in your skills directory:~/my-skills/ ├── commands/ │ ├── opencode_deploy.md │ └── claude_deploy.md └── my-skill/ └── SKILL.md
CapSync auto-detects the commands/ subdirectory during init and prompts to enable command syncing.
Build the project:
cargo buildRun tests:
cargo testRun locally:
cargo run -- init- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is dedicated to the public domain under the CC0 1.0 Universal License.