AIコーディングツールを2つ以上使っていると、同じスキルを .claude/skills/ にも .codex/skills/ にも .cursor/skills/ にも置くことになる。1本ずつコピーして回るうちに、どれが最新でどれが更新元なのか分からなくなる——skills-hub はこの散らかりを、中央リポジトリ1つとそこからの同期に置き換えるデスクトップアプリだ。

skills-hub の My Skills 画面。管理下のスキルがカード表示され、同期範囲・同期先ツール・タグ・有効状態が並ぶ
管理下のスキル一覧。1枚のカードに「どこから来たか・どのツールへ同期しているか・有効か」が並ぶ(出典: qufei1993/skills-hub README)

30秒でわかる
・スキル配布ツールとしては珍しいGUIデスクトップアプリ(Tauri + Rust + React)。中央リポジトリは ~/.skillshub、状態はSQLite 1ファイル
・対応は47アダプタ。ただし書き込み先で数えると46——Amp と Kimi Code CLI は同じディレクトリを共有する
symlink 同期は Claude Code で実際に発火した(3条件で確認)。一方でリンク切れは誰も警告しない。筆者の実機の ~/.claude/skills は29件中27件が既に壊れたリンクだった
・Explore に並ぶ300本の由来リポジトリは2つだけ。全部入れると常駐コストは13,047トークン(Anthropic count_tokens)
同名の skills-hub が GitHub だけで9本ある。日本語検索でこのリポジトリは上位10件に出てこない

Claude Code 側の導入・運用の全体像は Claude Code|2026年版・インストールからCLAUDE.md・Hooks・本番運用までの実装手引き にまとめてある。本記事はその周辺にあるスキルの置き場所の管理だけを扱う。

skills-hub とは——「1回入れて、どこでも同期」の実体

skills-hub(qufei1993/skills-hub)は、Agent Skills を1箇所にインストールし、そこから複数のAIコーディングツールのスキルディレクトリへ配るデスクトップアプリだ。README のキャッチコピーは “Install once, sync everywhere”。実測に使ったのは v0.9.1(2026-08-29公開、コミット 9d9f490f)である。

同種のツールはこれまでコマンドラインだった。スキルを配る CLI は skills.shとは|npx skills add がディスクに何を書くかを実測 で扱った npx skills add があり、lockfile と監査を持ち込む Go 製CLIは qvr(quiver)とは|エージェントスキルにlockfileと監査を持ち込むGo製パッケージマネージャを実測 で扱った。skills-hub はそこにGUIを持ち込んだ側にあたる。

実体は素直だ。アプリを起動すると、中央リポジトリ ~/.skillshub と、状態を持つSQLiteが1ファイル作られる。

# 起動直後に作られたもの(macOS の場合)
~/.skillshub                                              # 中央リポジトリ(空)
~/Library/Application Support/com.qufei1993.skillshub/skills_hub.db   # 状態(76KB)

このDBは skills / skill_targets / skill_tags / skill_tag_links / discovered_skills / settings の6テーブルで、起動直後は settings の1行以外すべて空だった。起動しただけでは既存の ~/.claude/skills に一切触れないことも確認している(起動前後でディレクトリ一覧のハッシュが一致)。スキャンや同期は明示的に操作したときだけ走る設計だ。

skills-hub の Add Skill 画面。Gitリポジトリからスキルを追加する際にタグ・同期範囲・同期先ツールを先に選べる
Gitリポジトリからの追加。インストール前にタグ・同期範囲(global / project)・同期先ツールを決める(出典: qufei1993/skills-hub README)

スキル同期の方式は symlink(Windows では junction)が既定で、できない場合はディレクトリコピーへ自動フォールバックする。README は Cursor だけ常にコピーになると明記していて、理由も「Cursor が symlink ベースのスキルディレクトリに対応していないため」と書かれている。

同名の「skills-hub」が9本ある——どれの話かを見分ける

先に済ませておきたい話がある。skills-hub という名前は激しく衝突している。

GitHub を star 順に検索すると、同名または実質同名のリポジトリが少なくとも9本出てくる。さらに厄介なのは、そのうち複数が「AIコーディングエージェントのスキルをローカルで管理・同期する」というほぼ同じ説明文を持っていることだ。

リポジトリ 何をするものか
qufei1993/skills-hub 1,285 本記事の対象。スキルを47ツールへ同期するTauri製デスクトップアプリ
iflytek/skillhub 4,915 企業向けの自己ホスト型スキルレジストリ(Java)。npm のようにスキルを公開・バージョン管理する
binance/binance-skills-hub 998 AIエージェント向けのスキルマーケットプレイス
zhuyansen/agent-skills-hub 342 OSSスキル・MCPサーバーを探して比較するディレクトリサイト
zhensherlock/skills-hub 109 (説明文なし)
agent-skills-hub/agent-skills-hub 90 複数ツールで動くスキルのグローバルライブラリ
liuxingqitd/skills-hub 79 スキルを同期・インストールするローカルダッシュボード
youzaiAGI/agent-skills-hub 70 スキルパッケージの管理
PotatoDog1669/skills-hub 12 スキルを可視化・管理・同期するローカルハブ

いずれも fork ではなく独立したリポジトリである。当サイトでは以前 SkillHub完全ガイド|AIエージェントのスキルをnpm風に管理するOSSレジストリ で iflytek 版を扱っているが、あれは Java 製のサーバーサイド・レジストリで、本記事のデスクトップアプリとは別物だ。

日本語検索では、star が一番多いものが出てくるわけではない
2026-08-31 時点で「skills hub」を日本(location 2392 / 言語 ja)で実査したところ、★1,285 の qufei1993/skills-hub は上位10件に入っていなかった。代わりに6位に出たのは同名の PotatoDog1669/skills-hub(★12)で、残りは skills-hub.ai・skills-hub.eu・skills-hub.cc といった別サービス、Google Play のアプリ、eLearning 企業、そして Web デザインスクールの skillhub.jp だった。この語で検索して辿り着いた先が目的のものとは限らない——リポジトリのオーナー名まで確認してから入れたほうがいい。

対応47ツールの中身をソースから数え直す

README は「47の組み込みツールアダプタ」と書いている。額面どおりか、定義本体(src-tauri/src/core/tool_adapters/mod.rs)から機械的に数え直した。

skills-hub の Tools 画面。検出済み・有効化済みのAIコーディングツールが製品アイコン付きで並ぶ
Tools 画面。組み込みの同期先を有効化するか、独自のスキルディレクトリを持つ社内ツールを自分で足せる(出典: qufei1993/skills-hub README)

default_tool_adapters() のエントリ数は 47 で、README の対応表の行数と一致した。ここは誇張がない。ただし「47ツール対応」と「47箇所に配れる」は別である。

数え方 件数 中身
アダプタの定義数 47 READMEの対応表と一致
書き込み先(global)の異なり数 46 Amp と Kimi Code CLI が ~/.config/agents/skills を共有
project 同期で .agents/skills を使う組 9 Amp / Antigravity / Cline / Codex / Cursor / Gemini CLI / GitHub Copilot / Kimi Code CLI / OpenCode
project 同期で独自ディレクトリを使う組 38 Claude Code は .claude/skills、Windsurf は .windsurf/skills
project 同期に非対応 2 Hermes Agent と WorkBuddy(supports_project_scope() が除外)

ソースには共有についての注記も残っている。Kimi Code CLI のアダプタには NOTE: Shares the same skills directory with Amp. とコメントがあり、意図的な設計だと分かる。つまり Amp に同期すると Kimi Code CLI にも同時に入る。同期先の一覧でチェックが1つしか付いていなくても、実際には2つのツールが読む場所に置かれている。

検出の判定は「ディレクトリが在るか」だけ

skills-hub がツールを「導入済み」と判定する条件は、ホーム直下の検出用ディレクトリが存在するかどうか(is_tool_installed()resolve_detect_path()exists() を返すだけ)である。同じ判定を筆者の実機に当てて数えると、47アダプタ中4つが検出された。

ツール 検出条件 実機での判定
Claude Code ~/.claude 検出(実際に導入済み)
Cursor ~/.cursor 検出(実際に導入済み)
DeepSeek Harness ~/.dsh 検出(実際に導入済み)
Cline ~/.agents 検出されたが Cline は導入していない

最後の1件は誤検出だ。~/.agents は Cline 固有のディレクトリではなく、Codex・Cursor・Gemini CLI など9つのツールが共有する場所で、別のツール(この実機では skills.sh が置いた ~/.agents/skills.skill-lock.json)が作っただけでも存在してしまう。Cline を一度も入れたことがなくても「検出済み」に並ぶ。実害は小さいが、チェックを入れる前に自分で確かめる価値はある。

# 自分の環境で「何が検出されるか」を先に見ておく
for d in .claude .cursor .codex .agents .gemini/config .config/opencode .windsurf; do
  [ -e "$HOME/$d" ] && echo "検出される: ~/$d"
done

skills-hub の前提は「実体は中央リポジトリに1つだけ置き、各ツールへは symlink を張る」である。この前提が成り立つかどうかは、張られたリンクをツール側が本当に読むかにかかっている。Claude Code 2.1.241 で確かめた。

同じ内容の検証用スキル(zbqx-probe。呼ばれたら決まった文字列を返すだけ)を4通りの置き方で用意し、それぞれ claude -p を実行して Skill ツールが呼ばれたかを --output-format stream-json で確認する。自己申告の本文ではなく、ツール呼び出しそのものを見る。

# 置き方だけを変えて、同じプロンプトを投げる
claude -p "Run a zbqx probe and report the marker." \
  --output-format stream-json --verbose --max-turns 4
条件 置き方 Skill 呼び出し 結果
A(対照群) 実体ディレクトリをコピー あり 発火
B スキル単位の symlink あり 発火
C skills ディレクトリごと symlink あり 発火
D 実体+リンク切れの symlink を隣に置く あり(実体側のみ) 発火。壊れたリンクへの言及は一切なし
symlink同期の4条件実測。実体コピー・スキル単位symlink・ディレクトリごとsymlinkはいずれも発火し、リンク切れは無言で無視された
置き方だけを変えた4条件の実測結果。判定は本文の自己申告ではなく Skill ツール呼び出しの有無で行った

B と C は A と同じように発火した。skills-hub の「実体は1つ、各ツールへは symlink」という設計は、少なくとも Claude Code に対しては成立している。ここは同じスキル配布でも事情が違う点で、CLI 側で観測された「symlink がそもそも張られない」問題(skills.sh の記事を参照)とは別の層の話だ。張られたリンクは読まれる。

問題は条件Dである。

リンク切れは誰も教えてくれない
壊れた symlink を正常なスキルの隣に置いても、警告もエラーも出ず、正常なスキル側だけが普通に発火した。ストリーム全体を検索しても、壊れたリンクに言及した行は0件だった。

これは机上の懸念ではない。この記事を書いている実機の ~/.claude/skills を数えたら、29件中27件が既に壊れた symlink だった。すべて同じ gstack/ という消えたディレクトリを指していて、いつ壊れたのかも分からない。誰も文句を言わないので、そのまま何か月も残る。

symlink 方式は「実体1つ・更新が全ツールへ即伝わる」という利点と引き換えに、中央リポジトリが動いた瞬間に全ツールのディレクトリが静かに死ぬという失敗モードを持つ。skills-hub が中央リポジトリの場所を自分で握り、更新結果の成功/失敗件数を画面に出す設計なのは、この失敗モードへの答えとして筋が通っている。逆に言えば、手でリンクを張って回っている人ほどこの問題を踏んでいる

# 自分の環境の壊れたリンクを数える(-e はリンク先の実在を見る)
for f in ~/.claude/skills/*; do [ -e "$f" ] || echo "壊れている: $(basename "$f") -> $(readlink "$f")"; done

Explore の300本は2リポジトリ由来——常駐コストは13,047トークン

Explore タブは「キュレーション済みのスキル」を並べる。中身は同梱の featured-skills.json(更新 2026-08-30)で、要素数はちょうど 300

skills-hub の Explore 画面。キュレーションされたスキルとオンライン検索結果が並ぶ
Explore 画面。Install を押すとタグ・同期範囲・同期先ツールを選んでから入る(出典: qufei1993/skills-hub README)

この300件の source_url を集計すると、由来リポジトリは2つしかなかった

由来リポジトリ 収録数 実際の★(2026-08-31) カタログが各スキルに入れている★
sickn33/agentic-awesome-skills 280 45,709 45,654(280件すべて同値)
anthropics/skills 20 172,648 172,477(20件すべて同値)

つまり star 欄はスキルごとの評価ではなく、由来リポジトリの star 数がそのままコピーされている。★順に並べ替えても、実質は「anthropics/skills 由来の20本が上、残り280本が下」に分かれるだけで、個々のスキルの良し悪しは何も分からない。同じく downloads は300件すべて0、category は300件すべて ai-assistant で、カタログの categories 配列も要素1つだった。メタデータで絞り込む用途にはまだ使えない。

なお sickn33/agentic-awesome-skills は SKILL.md6,603本持つ巨大リポジトリで、Explore が拾っているのはそのうち280本(4.2%)である。

全部入れたときの常駐コスト

Agent Skills は「一覧(name と description)が毎セッション文脈に載り、本文は呼ばれたときだけ読まれる」構造なので、入れた本数がそのまま固定費になる。Explore の280本(sickn33 由来)について、由来リポジトリを clone して各 SKILL.md の frontmatter から namedescription を取り出し、name: X / description: Y の形で連結して測った。

対象 ペイロード cl100k_base Anthropic count_tokens
Explore カタログ280本 55,370バイト 11,388トークン 13,047トークン
1本あたり 198バイト 40.7トークン 46.6トークン

トークナイザによって1.15倍ずれるので、どちらで測ったかを書かずに数字だけ持ち出すと比較できなくなる(当サイトの計測は data/measurements/ に物差しごと記録している)。1本あたり約40〜47トークンという水準は、同じ物差しで測った mattpocock/skills の37本(cl100k で1,428トークン=1本38.6)とほぼ一致した。スキル1本の常駐コストは概ね40トークン前後と見ておけばよく、逆に言えば300本入れれば1万トークン級が毎セッション消える。GUI で一括インストールが簡単になったぶん、入れすぎの代償も測っておく価値がある。

skills.sh・qvr・公式プラグインとの違い

同じ「スキルを配る」でも、狙っている問題が違う。

  skills-hub skills.sh qvr Claude Code プラグイン
形態 GUIデスクトップアプリ npx CLI Go製CLI claude plugins
主な同期範囲 global 中心(project も可) project 中心 project global
対応の広さ 47アダプタ 77エージェント登録簿 Claude Code 中心 Claude Code のみ
既定の配置方式 symlink →失敗時コピー 指定数で分岐(symlink/コピー) コピー+lockfile プラグイン管理
強み 一括操作・タグ・定期更新 エージェント横断の広さ SHA固定・インストール前スキャン 更新の自動追従
弱み GUI必須・Linux配布なし 独自ディレクトリ組の取りこぼし Claude Code 偏重 対応が1ツールのみ

skills.sh と skills-hub は登録簿を持つ点が似ているので、同じ物差しで突き合わせてみた。両方の登録簿に同名で載っているツールは23件あり、そのうち global の書き込み先が食い違っていたのは1件だけだった。

ツール skills-hub skills.sh
Antigravity ~/.gemini/config/skills ~/.gemini/antigravity/skills

skills-hub のソースには Antigravity 2.0 global path: ~/.gemini/config/skills/ というコメントが付いている。どちらが現行として正しいかは登録簿を突き合わせただけでは決められないので、Antigravity を使っているなら実際に読まれている側を自分で確認したほうがいい。残る22件は一致していて、たとえば Windsurf の global は両者とも ~/.codeium/windsurf/skills で揃っていた(project 側の .windsurf/skills とは別の場所である点に注意)。

この記事のポイント
誇張は見つからなかった——「47ツール対応」はソースの定義数と一致し、symlink 同期も実際に発火した
引っかかるのは3点——GUI必須で headless モードが無い/Linux のビルド済み配布が無い/Explore のカタログがメタデータとして使えない
向いているのは「数十本を抱えて把握できなくなった人」。1本入れたいだけなら CLI のほうが速い

選び方は素直だ。CI やスクリプトに組み込みたいなら CLI 側(skills-hub に headless モードは無い)。手元で何十本ものスキルを整理し、タグを付け、要らないものをまとめて外したいなら skills-hub。この一括操作とタグ運用は、CLI では replicate しにくい部分である。スキルの素性を審査してから入れたい場合は qvr の系統が近い。公式スキルそのものの中身は Anthropic公式スキルは17個ではなく19個|日本語解説の空白地帯を全数調査した で扱っている。

導入手順と、入れる前に確認しておくこと

配布は GitHub Releases のみ(Homebrew・winget などのパッケージマネージャ配布は無い)。

# macOS: dmg を開いて .app を Applications へ入れたあと、必ず1回これを実行する
xattr -cr "/Applications/Skills Hub.app"

この xattr -cr は省略できない。配布バイナリは ad-hoc 署名(linker-signed)で、Apple の公証を受けていないcodesign -dv で確認すると Signature=adhoc と出る。README 自身も Gatekeeper の「壊れています」「開発元を検証できません」への対処としてこのコマンドを案内している。裏を返せば、自分で署名の正当性を検証する手立てが無いということでもある。ソースが MIT で公開されているので、気になるなら自前ビルドが選択肢になる。

配布の実績も見ておく。全19リリースの配布アセットのダウンロード数を合計すると 7,280件.dmg 2,686 / .exe 3,191)だった。これは利用者数ではなく、CI・ミラー・updater 由来の取得を含んだアセットのダウンロード数である。

Linux 版のビルド済みバイナリは配られていない
19リリースすべてを調べたが、Linux 用アセット(AppImage / deb / rpm)は1本も無い。README には npm run tauri:build:linux:deb などのビルドスクリプトが用意されているので自分でビルドはできる。README の対応プラットフォーム欄も正直で、macOS だけを “verified”、Windows と Linux は “expected by design; not validated locally”(設計上は動くはずだが手元では未検証)と書いてある。Linux を主戦場にしているなら、現時点では自分がテスターになる覚悟が要る。

skills-hub の Updates 画面。定期実行のスケジュール登録と、直近の実行結果の件数が表示される
Updates 画面。アプリを閉じている間も Git 由来スキルを更新するシステムスケジュールを登録でき、確認・更新・失敗の件数が残る(出典: qufei1993/skills-hub README)

最後に運用上の注意を2つ。1つは同期先を外すと、そのツール側のスキルは消えること。README は「一括ツール設定はチェックを外したツールを同期先から外す」と書いており、無効化してもファイル自体は中央リポジトリに残るが、ツール側からは消える。もう1つは既存のスキルディレクトリを取り込むスキャン範囲は、同期先とは別に設定されること。読み込む場所と書き込む場所が分かれているので、意図せず巻き込む事故は起きにくい設計になっている。

flowchart TD A["中央リポジトリ
~/.skillshub"] -->|"symlink(既定)"| B["Claude Code
~/.claude/skills"] A -->|"symlink(既定)"| C["Codex
~/.codex/skills"] A -->|"常にコピー"| D["Cursor
~/.cursor/skills"] A -->|"symlink 不可なら
コピーへ自動降格"| E["その他 44 アダプタ"] A -.->|"中央が動くと
全リンクが無言で死ぬ"| F["リンク切れ
(警告なし)"]

要するに skills-hub は「配る仕組み」ではなく「散らかりを畳む道具」だ。スキルを1本入れたいだけなら CLI のほうが速い。数十本を抱えて、どれがどのツールに入っているか把握できなくなった人のためのアプリである。実測した範囲では前提(symlink 同期)は成立していて、誇張された数値も見つからなかった。引っかかるとすれば、GUI必須であること、Linux のビルド済み配布が無いこと、そして Explore のカタログがまだメタデータとして使い物になっていないことの3点になる。

参照ソース