AIコーディングツールを2つ以上使っていると、同じスキルを .claude/skills/ にも .codex/skills/ にも .cursor/skills/ にも置くことになる。1本ずつコピーして回るうちに、どれが最新でどれが更新元なのか分からなくなる——skills-hub はこの散らかりを、中央リポジトリ1つとそこからの同期に置き換えるデスクトップアプリだ。
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 に一切触れないことも確認している(起動前後でディレクトリ一覧のハッシュが一致)。スキャンや同期は明示的に操作したときだけ走る設計だ。
スキル同期の方式は 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)から機械的に数え直した。
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
symlink 同期は本当に効くのか——4条件で実測した
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 を隣に置く | あり(実体側のみ) | 発火。壊れたリンクへの言及は一切なし |
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。
この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.md を 6,603本持つ巨大リポジトリで、Explore が拾っているのはそのうち280本(4.2%)である。
全部入れたときの常駐コスト
Agent Skills は「一覧(name と description)が毎セッション文脈に載り、本文は呼ばれたときだけ読まれる」構造なので、入れた本数がそのまま固定費になる。Explore の280本(sickn33 由来)について、由来リポジトリを clone して各 SKILL.md の frontmatter から name と description を取り出し、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 を主戦場にしているなら、現時点では自分がテスターになる覚悟が要る。
最後に運用上の注意を2つ。1つは同期先を外すと、そのツール側のスキルは消えること。README は「一括ツール設定はチェックを外したツールを同期先から外す」と書いており、無効化してもファイル自体は中央リポジトリに残るが、ツール側からは消える。もう1つは既存のスキルディレクトリを取り込むスキャン範囲は、同期先とは別に設定されること。読み込む場所と書き込む場所が分かれているので、意図せず巻き込む事故は起きにくい設計になっている。
~/.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点になる。
参照ソース
- qufei1993/skills-hub — 公式リポジトリ・README(2026-08-31 参照。★1,285・MIT・v0.9.1)
- skills-hub v0.9.1 リリース — 実測に使った配布物(2026-08-29公開)
- src-tauri/src/core/tool_adapters/mod.rs — 47アダプタと project/global パスの定義本体
- Tauri v2 — Distribute — macOS の署名・公証についての一次情報