mcpField
S
skill-curator

skill-curator

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

skill-curator について

スキル市場のディスク上のスキル、`.claude-plugin/plugin.json`、`README.md` の内容を一致させるキュレーション用スキルです。差分を検出して変更案を確認に回し、プッシュせずにコミットとローカル試用を案内します。

主な機能

  1. 01三つのカタログ情報源の比較
  2. 02スキルの登録・削除・分類
  3. 03READMEの二つの箇所の同期
  4. 04変更案の作成とユーザー確認
  5. 05コミットとローカル導入コマンドの提示

活用シーン

  1. 01市場ファイルへの新規スキル登録
  2. 02古いスキルのカタログからの削除
  3. 03ファイルとドキュメントの不一致検出
  4. 04プッシュ前のキュレーション済みスキルのローカル試用

インストール

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

$npx skills add https://github.com/shyxin/skills --skill skill-curator

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

同梱ファイルreferences/marketplace-schema.md

詳細

Skill Curator

このスキルマーケットプレイスの 3つの真実の情報源(three sources of truth) を常に一致させます。

  1. ディスク上の skills/<category>/<skill-name>/ — スキルの実体(SKILL.md + references/)
  2. .claude-plugin/plugin.json — マーケットプレイスの登録マニフェスト
  3. README.md — ユーザー向けのスキルディレクトリ(スキル一覧 + ディレクトリツリー) いずれかの情報源が変更されたら、残りの2つも同期する必要があります。この skill では、この同期を自動化します。

重要な概念 — curate(キュレーション):あなたはスキルのキュレーターです。キュレーターの役割は作品を創作することではなく、それぞれの作品が正しく登録され、分類され、公開/非公開にされていることを確認することです。この skill は SKILL.md の内容自体には触れず(それは作者/他の skill の役目です)、登録 + 分類 + 公開のみを担当します。


README の2か所の同期ポイント

plugin.json(登録マニフェスト)

.claude-plugin/plugin.json → skills[] 配列。各項目は相対パス文字列です:"./skills/<category>/<skill-name>"。

  • skill を追加:1行追加します。
  • skill を削除:該当する行を削除します。
  • category を移動:パス文字列を変更します(まず mkdir で新しい path を作成し、フォルダーを mv してから、登録を変更します)。

GREEN: cat .claude-plugin/plugin.json | jq -r '.skills[]' の各行が、ディスク上に実在する skills/<path>/SKILL.md に対応しており、欠落も宙に浮いた登録もありません。

README.md(2か所とも同期)
位置同期する内容操作
スキル一覧セクション(## 技能列表 の下にある各 ### 类别)見出し行 **skill-name** — 一句话描述(説明文は SKILL.md frontmatter の description フィールドから転記)1項目を追加/削除/変更
ディレクトリツリーセクション(## 目录结构 の下のコードブロック)skill-name/ # 备注 の行1行追加/削除

GREEN: README.md の2か所に新しい skill の情報が揃っており、どちらか一方でも欠けていれば not-green です。


Step 1 — 現状を確認する(ドリフト検出)

まず、3つの真実の情報源の現在の状態を読み取ります:

# A. 磁盘上的技能清单(含 frontmatter 名)
find skills -name SKILL.md -maxdepth 3 | sort | while read f; do
  dir=$(dirname "$f")
  name=$(grep -m1 '^name:' "$f" | sed 's/name: *//')
  echo "$dir  name=$name"
done

# B. 已注册的清单
cat .claude-plugin/plugin.json | jq -r '.skills[]'

# C. README 里出现的 skill 名(快节奏扫描)
grep -oE '^\- \*\*[a-z-]+\*\*' README.md | sed 's/- \*\*//; s/\*\*//'

3つのリストを比較して、差分を作成します:

  • ディスク上にあり、plugin.json にはない → 未登録の孤児
  • plugin.json にあり、ディスク上にはない → 削除済みだがクリーンアップされていない宙に浮いた登録
  • plugin.json にあり、README にはない → 登録済みだがユーザーから見えない
  • README にあり、plugin.json にはない → ドキュメントにはあるが実際には登録されていない

GREEN: 差分が算出され、追加・削除・変更の明確な一覧を持って Step 2 に進みます。


Step 2 — キュレーション計画を確認する

差分をユーザーに提示し、キュレーション計画を作成します:登録する項目、削除する項目、同期する項目の一覧です。「この内容で進めますか? それとも手動で追加/削除しますか?」と一度だけ尋ねます。

GREEN: ユーザーが最終的な plan を承認しています。


Step 3 —— 同期を実行する

種類ごとに1つずつ処理します:

3a. 新しい skill を登録する(ディスク上にあり、plugin.json にはない)
# 1. 改 plugin.json —— 用 jq 追加,不要手写
tmp=$(mktemp)
jq --arg p "./skills/<category>/<new-skill>" '.skills += [$p]' .claude-plugin/plugin.json > "$tmp" && mv "$tmp" .claude-plugin/plugin.md

# 2. 改 README —— 两处同步
#    a) 技能列表区(描述从 SKILL.md frontmatter 取)
#    b) 目录树区

GREEN: plugin.json に新しい項目があり、対応する SKILL.md も存在します。README の2か所も更新済みです。

3b. 古い skill を削除する(plugin.json にあり、ディスク上にはない、またはユーザーが非公開を希望)
# 1. 改 plugin.json —— jq 过滤掉
tmp=$(mktemp)
jq --arg p "./skills/<category>/<old-skill>" '.skills = [.skills[] | select(. != $p)]' .claude-plugin/plugin.json > "$tmp" && mv "$tmp" .claude-plugin/plugin.json

# 2. 改 README —— 两处同步删除

GREEN: plugin.json にその skill が含まれず、README の2か所にも SKILL.md frontmatter の name: が含まれていません。

3c. ドリフトを再同期する(登録は残っているが README の説明が古い)

SKILL.md frontmatter の description フィールドを正しい値として、README のスキル一覧セクションの説明行を上書きします。

GREEN: README の各説明文が、対応する SKILL.md frontmatter の description フィールドと一致しています。


Step 4 — Git commit

同期内容をすべてディスクに反映したら、意味が分かる commit を作成します:

git add -A
git status --short   # 给用户看一眼暂存了什么

# 根据操作类型生成 commit msg
#   新增: feat: add <skill-name>
#   移除: chore: remove <skill-name>
#   同步: chore: sync registry
git commit -m "..."

GREEN: git log -1 --oneline に新しい commit が表示され、git status --short がクリーンです(commit 以外に新たな変更がありません)。

push しないでください。 push は、いつ「公開」するかをユーザーが決める操作です。


Step 5 — ローカルで試用する(push 前の試用サイクル)

commit が完了したら、まずローカルにインストールして試用し、問題がなければ push します。npx skills add はローカルパスに対応しています(詳しくはリポジトリルートの NPX-SKILLS.md の「ローカルクローン後のインストール」を参照)。リモートに先に push する必要はありません。

今回の curate に含まれるスキルに応じて、ユーザーが実行する専用コマンドを提示します(ユーザー自身が実行し、curator は代わりに実行しません):

# 仓库根 = 含 skills/ 目录的那层(本仓库即仓库根目录)
# 新增/修改 N 个技能时,--skill 逐个列出
npx skills@latest add <仓库根路径> --skill <skill-a> --skill <skill-b> -y -g -a codebuddy claude-code codex

要点:

  • ローカルパスからインストールされるのはスナップショットのコピーです(~/.agents/skills/ に配置され、各 agent にシンボリックリンクされます)。その後リポジトリ内のファイルを変更しても 自動では反映されません。反復のたびに上記の add コマンドを再実行して更新します。
  • 変更したスキルだけをインストールします(--skill)。59個すべてを再インストールしないでください。
  • ユーザーが「問題ありません」と言ったら、git push を案内します(push は常にユーザーが手動で実行します)。
  • ユーザーが問題を伝えたら、該当するスキルに戻って修正し、Step 3/4/5 を再度実行します。

GREEN: ユーザーがそのままコピーして実行できるローカルインストールコマンドを受け取り、そのコマンドの --skill リストが今回の curate による変更内容と一致しています。


落とし穴

落とし穴 1 —— README の同期漏れ

最もよくある「半端な同期」です。plugin.json とスキル一覧を変更して、ディレクトリツリーを忘れてしまいます。操作のたびに2か所を同時に grep して確認します:

grep -c "<skill-name>" .claude-plugin/plugin.json README.md    # 应都 > 0(注册状态一致)
落とし穴 2 —— plugin.json を手動編集して構文エラーを起こす

plugin.json は JSON です。カンマや引用符を1つ間違えただけで壊れます。必ず jq で変更し、文字列を直接編集しないでください。jq でエラーが発生したら、すぐに停止してください。

落とし穴 3 —— frontmatter description の抽出失敗

SKILL.md の frontmatter には、description: が1行で記載されているものもあれば、複数行にわたるものもあります。抽出時に曖昧さがあれば、元の frontmatter 部分をそのままユーザーに提示し、どの文が説明文か確認してください。

落とし穴 4 —— commit msg の自動生成によるずれ

commit msg の種類(feat/chore/sync)は差分から推測します。同じ作業で追加・削除・変更が混在する場合は、chore: sync registry を使用してください。ユーザーは git log を確認してから変更できます。


ロールバック

git log --oneline -5          # 重置最近一次 curator 同步
git reset HEAD~1 --mixed      # 取消 commit,改动保留在工作区
# 然后重度跑一次 curator 即可

コメント