Sync-Skills

SkillAI & models

Copy this repo's skills into another agent harness's skills directory by name — resolves the harness alias to its path via scripts/sync-targets.json and runs sync-skills.sh. Use only when the user asks to copy/sync/push the skills to another harness (oh-my-pi, opencode, kimi, codex, etc.) — never trigger automatically.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Sync-Skills skill

What this skill tells your AI

The instructions your AI receives, as published by foyzulkarim/skills in dev-pipeline/skills/sync-skills/SKILL.md and read by ahel’s review.

Thin natural-language wrapper over scripts/sync-skills.sh. The user names a harness ("copy the skills to oh-my-pi"); you resolve it to a skills directory and run the sync. All copying, marker safety, and dir resolution live in the script — you only parse intent, invoke, and relay.

Prerequisites

Requires jq on PATH. --to <alias> and list-targets resolve scripts/sync-targets.json through jq; the script fails fast with a clear error if jq is missing. Confirm jq is installed before invoking — command -v jq should print a path.

Resolve the repo + script (every run)

The script derives its source dir from its own location. Resolve the repo root once:

ROOT="$(git -C "$PWD" rev-parse --show-toplevel)"

Then use "$ROOT/scripts/sync-skills.sh". If $ROOT/scripts/sync-skills.sh does not exist, stop and tell the user to run this from the skills repo checkout.

Steps

  1. Parse the request into:

    • a harness alias — normalize the user's phrasing to a canonical key using this table (additions to scripts/sync-targets.json are how the table grows over time):

      User phrasingCanonical alias
      claude, ~/.claude, claude-codeclaude
      omp, oh-my-pi, "oh my pi"oh-my-pi
      oc, opencodeopencode
      kimikimi (unmapped — discovery fallback)
      codexcodex (unmapped — discovery fallback)

      Quote any alias that contains a space or shell metacharacter when passing it to --to. To see the full current list:

      bash "$ROOT/scripts/sync-skills.sh" list-targets
      
    • skill names, if any were named (otherwise all skills are pushed).

    • the verb: default push ("copy to X"). Only use pull / import / nuke if the user explicitly asked for that direction.

  2. Run (push, the common case):

    bash "$ROOT/scripts/sync-skills.sh" --to "<alias>" push [skill...]
    

    Echo the resolved destination (from list-targets) before/with the run, then relay the script's summary verbatim.

  3. Unknown alias → discovery fallback. If --to exits non-zero with "unknown harness", do NOT retry blindly. Instead:

    • Probe a few conventional locations and show what exists:
      ls -d ~/."<name>"/skills ~/.config/"<name>"/skills ~/."<name>" 2>/dev/null
      
    • Ask the user to confirm which is the harness's skills bucket (or supply the path).
    • Run once against the confirmed path with the literal escape hatch:
      bash "$ROOT/scripts/sync-skills.sh" --target <confirmed-dir> push [skill...]
      
    • Offer to remember it: append "<alias>": "<dir>" to $ROOT/scripts/sync-targets.json (use ~ for a $HOME-relative path) so next time --to <alias> just works. Only edit the file after the user agrees.

Confirm before running when

  • The target is brand-new / unmapped (first push to a harness) — show the resolved path and get a yes.
  • The verb is nuke or any --force — these delete/overwrite at the target. State exactly what will be removed/overwritten and where, then wait.

A normal push to an already-mapped harness needs no confirmation — just echo the destination and go.

You Must NOT

  • Copy files yourself (cp, rsync, manual mkdir) — the script owns all mutation and its marker logic protects unmanaged dirs at the target.
  • Call the script via {base_directory} — that points at this skill's dir, not the repo's scripts/. Always resolve $ROOT via git.
  • Push to a path you guessed without the user confirming it (fallback path).
  • Edit sync-targets.json before the user agrees to persist a new mapping.
  • Run nuke/--force without an explicit go-ahead.

Signals

GitHub stars
42
Forks
14
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
sync-skills
Source
github.com/foyzulkarim/skills