✅ Preserves symlinks that point to internal extension directories
✅ Backs up both the skills and symlink structure
✅ Restores everything correctly on pull (skills + symlinks)
✅ Uses manifest (.agent-sync-manifest.json) to track extension metadata
Supported Patterns
Pattern
Example
Handled
Extension subdirectory
~/.config/opencode/superpowers/skills/
✅ Yes
Internal symlink
skills/superpowers → ../superpowers/skills/
✅ Preserved
External symlink
skills/my-skill → ~/.agents/skills/my-skill/
✅ Removed
Multiple extensions
superpowers/, my-ext/, etc.
✅ Yes
Skills with __ in name
my__custom-skill/
✅ Yes (no parsing issues)
How It Works
On push (backup)
1. Scan ~/.agents/skills/ → global skills
2. Scan ~/.config/opencode/superpowers/skills/ → extension skills
3. Detect symlinks in ~/.config/opencode/skills/
- Internal (../superpowers/skills/) → backup symlink
- External (~/.agents/skills/) → skip (will be removed)
4. Copy all skills to repo with real names
5. Create .agent-sync-manifest.json with extension metadata
On pull (restore)
1. Read .agent-sync-manifest.json
2. Restore extension skills to ~/.config/opencode/superpowers/skills/
3. Restore symlinks to ~/.config/opencode/skills/superpowers
4. Restore global skills to ~/.agents/skills/