Skip to main content

Comparing Skill Management Approaches

This page compares the two main architectural approaches to AI CLI skill management: imperative (install-per-command) and declarative (config + sync).

If you're evaluating tools or considering a switch, this breakdown will help you understand the fundamental design differences.

Architecture at a Glance

Imperative (Install-per-command)

Imperative tools use an install-per-command model — each install is a standalone operation:

tool add owner/repo → select agents → choose method → done
tool add owner/repo → select agents → choose method → done
tool add owner/repo → select agents → choose method → done

Every operation requires user input. There's no persistent state describing "what should be installed where."

Declarative (Config + Sync)

skillshare uses a declarative model — you define your desired state once, then sync:

# config.yaml — define once
source: ~/.config/skillshare/skills
targets:
claude: ~/.claude
cursor: ~/.cursor/rules
codex: ~/.codex
skillshare sync  # reconcile actual state to desired state

One command, no prompts, deterministic results every time.

Feature Comparison

CapabilityImperative (install-per-command)Declarative (skillshare)
ConfigurationNo config file; prompts on every runconfig.yaml — set once, reuse forever
Agent selectionInteractive prompt each timeDefined in config; sync handles all
Install methodChoose copy/symlink per operationsync_mode in config (merge or symlink)
Single source of truthSkills copied to each agent independentlySource directory → symlinks to all targets
Removing a skill from one agentMay delete source files, breaking other agentsOnly affects that target's symlink
Reproducible setupNo built-in way to restore on new machineconfig.yaml + source dir = full restore
Project-scoped skillsLock file tracks global onlyskillshare init -p for per-repo skills
Cross-machine syncManual (sync lock file via dotfiles)Built-in push / pull with git
Bidirectional flowOne-way (install only)collect pulls improvements back from targets
Separating own vs installed skillsMixed in same directoryTracked repos use _ prefix
Offline operationRequires npx + network for CLI itselfSingle binary, works offline after install
Web dashboardNoneskillshare ui — visual management
Backup / restoreNoneskillshare backup / skillshare restore
Runtime dependencyNode.js + npmNone (single Go binary)

Common Pain Points Solved

"I have to select agents every time I install"

With skillshare, you configure targets once:

targets:
claude: ~/.claude
cursor: ~/.cursor/rules

Then every sync, install, or collect knows where to go. No prompts.

"Removing a skill from one agent breaks the others"

In imperative tools, removing a skill from one agent may delete the shared source files, leaving other agents with broken symlinks.

skillshare's architecture prevents this entirely — the source directory is the single truth. Target symlinks point to the source. Removing a target only removes that target's symlinks; source files are untouched.

Source: ~/.config/skillshare/skills/my-skill/SKILL.md  (always preserved)
├── ~/.claude/skills/my-skill → symlink to source ✓
├── ~/.cursor/rules/my-skill → symlink to source ✓ (unaffected)
└── ~/.codex/skills/my-skill → symlink to source ✓ (unaffected)

"I can't restore my setup on a new machine"

With skillshare, your entire setup is portable:

  1. Version-control ~/.config/skillshare/ (source + config)
  2. On a new machine: git clone your config repo
  3. Run skillshare sync

All targets are recreated instantly.

"Clone takes forever on large repositories"

skillshare uses shallow clones (--depth 1) by default for non-tracked installs, reducing download time significantly. For tracked repos that need full history, use --track.

"My skills are scattered across agent directories"

skillshare keeps everything in one place:

~/.config/skillshare/skills/
├── my-custom-skill/ # Your own skills
├── react-best-practices/ # Installed skills
├── _team-repo/ # Tracked repos (prefixed with _)
│ ├── frontend-guidelines/
│ └── code-review/
└── _another-org-repo/

The _ prefix clearly separates tracked (team/org) repos from your personal skills.

Migrating to skillshare

If you're already using another skill manager:

Step 1: Install skillshare

# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/runkids/skillshare/main/install.sh | sh

# Homebrew
brew install runkids/tap/skillshare

Step 2: Initialize and collect existing skills

skillshare init              # Creates config and detects targets
skillshare collect --all # Imports existing skills from all detected targets

Step 3: Sync

skillshare sync              # Symlinks source skills to all targets

Your existing skills are now managed from one place. For a detailed walkthrough, see the Migration Guide.

Choosing the Right Tool

Choose an imperative tool if:

  • You install skills rarely and don't mind interactive prompts
  • You only use one AI CLI
  • You don't need cross-machine or team workflows

Choose skillshare if:

  • You use multiple AI CLIs and want them in sync
  • You want a set-and-forget configuration
  • You work across multiple machines
  • You share skills with a team or organization
  • You want backup, restore, and version control for your skills
  • You prefer a single binary with no runtime dependencies
  • You don't want installation/download activity tracked outside your local workflow