skill-curator について
スキル市場のディスク上のスキル、`.claude-plugin/plugin.json`、`README.md` の内容を一致させるキュレーション用スキルです。差分を検出して変更案を確認に回し、プッシュせずにコミットとローカル試用を案内します。
主な機能
- 01三つのカタログ情報源の比較
- 02スキルの登録・削除・分類
- 03READMEの二つの箇所の同期
- 04変更案の作成とユーザー確認
- 05コミットとローカル導入コマンドの提示
活用シーン
- 01市場ファイルへの新規スキル登録
- 02古いスキルのカタログからの削除
- 03ファイルとドキュメントの不一致検出
- 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) を常に一致させます。
- ディスク上の
skills/<category>/<skill-name>/— スキルの実体(SKILL.md + references/) .claude-plugin/plugin.json— マーケットプレイスの登録マニフェスト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 即可