mcpField
S
superskills-upgrade

superskills-upgrade

github.com/ariadossエージェントワークフロー1262 回インストール今日更新
リポジトリ

superskills-upgrade について

superskills-upgrade は、インストール済みの superskills を更新し、setup を再実行するスキルです。管理対象のインストールと開発用チェックアウトを区別し、開発コミットや変更を保ちながら同期結果への対処を案内します。

主な機能

  1. 01管理対象または開発用の配置先を特定
  2. 02ローカルとリモートのバージョン比較
  3. 03同期と setup の再実行
  4. 04ブランチの分岐とスタッシュ競合への対応
  5. 05更新状況と復旧手順の報告

活用シーン

  1. 01管理対象の superskills を更新
  2. 02開発用チェックアウトのスキルを更新
  3. 03分岐によって止まった更新への対処

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ariadoss/superskills --skill superskills-upgrade

インストール後、Claude Code で/superskills-upgradeを入力して読み込まれたか確認します。

詳細

/superskills-upgrade

superskills を最新バージョンにアップグレードします。

手順

ステップ 1:インストールディレクトリを特定する

以下の 2 種類のインストールに対応しています。

  • 標準インストール — リポジトリを ~/.claude/skills/superskills (または OpenCode の同等の場所)にクローンし、そこから ./setup を実行しています。
  • 開発リポジトリのインストール — リポジトリが別の場所(例:~/Sites/superskills)にあり、./setup がスキルをツールにシンボリックリンクしています。メンテナーやコントリビューターによく見られる構成です。~/.claude/skills/superskills にクローンは存在しないため、スキルのシンボリックリンクをソースまでたどって実際のリポジトリを特定します。
INSTALL_DIR=""
INSTALL_KIND=""

if [ -d "$HOME/.claude/skills/superskills/.git" ]; then
  INSTALL_DIR="$HOME/.claude/skills/superskills"; INSTALL_KIND="canonical"
elif [ -d "$HOME/.config/opencode/skills/superskills/.git" ]; then
  INSTALL_DIR="$HOME/.config/opencode/skills/superskills"; INSTALL_KIND="canonical"
else
  # Dev-repo install: follow a known skill symlink back to its source checkout.
  for probe in "$HOME/.claude/skills/superskills-upgrade/SKILL.md" \
               "$HOME/.config/opencode/skills/superskills-upgrade/SKILL.md"; do
    [ -L "$probe" ] || continue
    target=$(readlink "$probe")
    # Resolve relative symlink targets against the link's own directory.
    case "$target" in /*) : ;; *) target="$(dirname "$probe")/$target" ;; esac
    root=$(git -C "$(dirname "$target")" rev-parse --show-toplevel 2>/dev/null) || continue
    if [ -f "$root/setup" ] && [ -f "$root/VERSION" ]; then
      INSTALL_DIR="$root"; INSTALL_KIND="dev-repo"; break
    fi
  done
fi

if [ -z "$INSTALL_DIR" ]; then
  echo "ERROR: superskills git install not found"
  echo "Expected a clone at $HOME/.claude/skills/superskills, or skills symlinked from a source checkout."
  echo "Re-install: git clone https://github.com/ariadoss/superskills.git ~/.claude/skills/superskills && cd ~/.claude/skills/superskills && ./setup"
  exit 1
fi
echo "INSTALL_DIR=$INSTALL_DIR"
echo "INSTALL_KIND=$INSTALL_KIND"
REMOTE_URL=$(git -C "$INSTALL_DIR" remote get-url origin 2>/dev/null || echo "unknown")
echo "REMOTE_URL=$REMOTE_URL"
ステップ 2:現在のバージョンを記録する
OLD_VERSION=$(cat "$INSTALL_DIR/VERSION" 2>/dev/null | tr -d '[:space:]' || echo "unknown")
echo "Current version: $OLD_VERSION"
ステップ 3:最新の状態に同期して setup を再実行する

動作は INSTALL_KIND によって異なります。

  • canonical — ユーザーが開発に使わない、管理対象のクローンです。履歴が書き換えられたり、強制プッシュされたり、ユーザーがスキルを直接編集したりした場合でも、必ず origin/main に合わせます。通常の git pull --ff-only では不十分です(ブランチの分岐やローカル変更があると中断するため)。そのため、ハードリセットへのフォールバックで確実に同期します。
  • dev-repo — ユーザー自身が作業しているチェックアウトです。慎重に扱い、ハードリセットやコミットの破棄は行いません。未コミットの変更のみを一時退避してからクリーンな早送りを行います。ブランチが分岐している場合は停止し、ユーザーが手動で解決できるようにします。
cd "$INSTALL_DIR"
git fetch origin
REMOTE_VERSION=$(git show origin/main:VERSION 2>/dev/null | tr -d '[:space:]' || echo "unknown")
echo "Remote version: $REMOTE_VERSION"

if [ "$OLD_VERSION" = "$REMOTE_VERSION" ] && [ "$REMOTE_VERSION" != "unknown" ]; then
  echo "ALREADY_LATEST=true"
  # Still re-link in case new skills were added within the same version.
  ./setup -q
else
  # Preserve uncommitted local edits so nothing is lost.
  STASHED=0
  if ! git diff --quiet || ! git diff --cached --quiet; then
    if git stash push -u -m "superskills-upgrade autostash" >/dev/null 2>&1; then
      STASHED=1
      echo "Stashed local changes before upgrade."
    fi
  fi

  # Try the clean fast-forward first (preserves local commits if any).
  if git pull --ff-only origin main 2>/dev/null; then
    echo "SYNC=fast-forward"
  elif [ "$INSTALL_KIND" = "dev-repo" ]; then
    # Maintainer's working repo — do NOT discard their commits.
    echo "SYNC=diverged-dev"
    echo "Your dev checkout has diverged from origin/main and can't fast-forward."
    echo "Resolve manually (e.g. 'git rebase origin/main' or 'git merge origin/main'), then re-run ./setup."
    [ "$STASHED" = "1" ] && git stash pop >/dev/null 2>&1 && echo "Restored stashed changes."
    exit 0
  else
    # Canonical install — force-match origin/main (handles force-pushed history).
    echo "Fast-forward not possible; resetting to origin/main."
    git reset --hard origin/main
    echo "SYNC=reset"
  fi

  # Re-apply stashed edits; if they conflict, leave them in the stash.
  if [ "$STASHED" = "1" ]; then
    if git stash pop >/dev/null 2>&1; then
      echo "Re-applied stashed local changes."
    else
      echo "STASH_CONFLICT=true  (your edits are safe in 'git stash list')"
    fi
  fi

  ./setup -q
  NEW_VERSION=$(cat "$INSTALL_DIR/VERSION" 2>/dev/null | tr -d '[:space:]' || echo "unknown")
  echo "NEW_VERSION=$NEW_VERSION"
fi
ステップ 4:結果を報告する

ALREADY_LATEST=true の場合: 次のようにユーザーに伝えます。

superskills is already up to date (v{OLD_VERSION}).

アップグレードを実行した場合: 次のようにユーザーに伝えます。

superskills upgraded: v{OLD_VERSION} → v{NEW_VERSION}

OLD_VERSION が NEW_VERSION と同じ場合は、setup は再実行されたもののバージョンは変わっていないことを伝えます(同じバージョン内のスキル更新が反映された可能性があります)。

SYNC=reset が出力された場合: ローカルクローンがアップストリームと分岐していました(通常は公開済みの履歴が書き換えられたためです)。origin/main に強制的に一致させました。ユーザーにローカルのコミットがあった場合、それらは破棄されています。自動的に保護されるのは未コミットの編集のみです。(canonical インストールの場合にのみ発生します。)

SYNC=diverged-dev が出力された場合: これは dev-repo インストール(ユーザー自身のチェックアウト)で、origin/main にないコミットがあるため、早送りできない状態です。何も破棄されていません。次のコマンドを再実行する前に、自分でブランチを調整するようユーザーに伝えます。

cd "$INSTALL_DIR" && git rebase origin/main   # or: git merge origin/main
cd "$INSTALL_DIR" && ./setup -q

(ステップ 1 の INSTALL_DIR の値を使用してください)

STASH_CONFLICT=true が出力された場合: ユーザーのローカル編集を新しいバージョンの上にクリーンに再適用できませんでした。変更は安全に保たれています。次のコマンドで復元するようユーザーに伝えます。

cd "$INSTALL_DIR" && git stash list   # find the 'superskills-upgrade autostash' entry
cd "$INSTALL_DIR" && git stash pop     # or: git stash show -p stash@{0} to inspect

(ステップ 1 の INSTALL_DIR の値を使用してください)

コメント