skill-registry

v0.5.0 · Apache-2.0 · Free & open source

One GitHub repo.
Every AI agent.

Stop copy-pasting SKILL.md files into ~/.claude, ~/.cursor, ~/.codex. Skills live in one repo you own. Agents fetch them on demand over MCP — no startup-token tax, no drift.

uvx skills-registry init  ·  needs gh + uv

50+

AI tool dot-folders auto-detected at bootstrap

3

MCP tools exposed — list_skills, get_skill, publish_skill

0

SSH keys, git configs, or shell PATHs required

1

Command to install & wire up every agent

The problem

Every AI tool wants its own skills folder. Edit once, sync N times.

Today every AI coding tool keeps a local skills folder. Same skill, copy-pasted into N dot-folders. Worse — every skill in every folder gets auto-loaded into the agent's startup context, whether the current task needs it or not. You pay tokens for skills you'll never use this conversation.

Before · local dot-folders

Duplication, drift, token bloat

  • ~/.claude/skills/code-review/SKILL.md
  • ~/.cursor/skills/code-review/SKILL.md
  • ~/.codex/skills/code-review/SKILL.md
  • ~/.factory/skills/code-review/SKILL.md
  • …and 46 other agents you forgot about
  • All loaded on every startup. Every conversation.
After · skills-registry

One repo. Fetched on demand.

  • anand-92/my-skills/code-review/SKILL.md
  • Every agent points to the same repo
  • Edit once · branch · PR · fork · restore
  • Pointer file in each agent's dot-folder (~200 bytes)
  • Real skill fetched only when needed
  • Cache invalidated on tree SHA change

How it works

Single source of truth. Six deliberate constraints.

Every design decision falls out of one observation: desktop MCP clients spawn the server with a stripped environment — no shell PATH, no SSH agent, no git config user.email. So we don't depend on any of them.

01

Fetched on demand

Tiny pointer file in each agent's dot-folder. The actual skill is downloaded the moment get_skill(slug) is called — and not before.

02

50+ tools recognized

Claude Code, Claude Desktop, Cursor, Codex, Windsurf, Goose, Factory, VS Code/Copilot — all detected at bootstrap, universal ones pre-selected.

03

gh-only GitHub I/O

No git shell-out. No SSH. No embedded HTTP. Every call routes through the user's authenticated GitHub CLI via the Git Data API.

04

Tree-SHA cache

Skills cached in ~/.cache/skills-mcp/skills/. Cache key is GitHub's tree SHA — force-pushes and subtree changes invalidate correctly.

05

Path-traversal hardened

publish_skill rejects .. segments and backslash traversals. Per-file size cap (2 MiB). Identical validation in Python & Go.

06

Git, but for skills

The registry is a real GitHub repo. Branch it, PR it, fork a teammate's, restore old versions. Apache-2.0 — yours forever.

Comparison

Why not just keep using local folders or a dotfiles repo?

CapabilityLocal dot-foldersDotfiles reposkills-registry
One home for every agentduplicatedyesyes
Fetched on demand (no startup tokens)nonoyes
Versioned + branchablenoyesyes
Works in every MCP clientpartialnoyes
Share / fork between usersnoclunkyclone the repo
No shell or SSH config neededyesnoyes

Architecture

Three deliverables. One source repo.

Python bootstrap + Python MCP server + Go TUI manager. The Python wheel ships both Python entry points; the Go binary is downloaded from GitHub Releases on first run.

skills-registryPython 3.10+

Thin bootstrap. Verifies gh, downloads the Go CLI, execs it. One command: skills-registry init.

PyPI wheel · entry point

skill-registry-mcpPython 3.10+

FastMCP server exposing list_skills, get_skill, publish_skill over MCP stdio. Same wheel, second entry point.

PyPI wheel · MCP stdio · FastMCP 3.x

skill-registryGo 1.24+

Charmbracelet TUI manager. Commands: bootstrap, list, get, sync, add, publish.

GitHub Releases · darwin/linux/windows × amd64/arm64

MCP surface

Three tools. Any MCP-aware agent can call them.

list_skills

Enumerates every skill in the registry. Returns a markdown table with slug, name, description, and the URI to fetch.

read
get_skill(slug)

Downloads one skill into the local cache. Returns the absolute path. Cache invalidated on tree-SHA change.

read
publish_skill(name, …)

Publishes a skill via the GitHub Git Data API. Accepts files mapping or local_folder. Returns commit SHA. 3 retries on conflict.

write

Users don't call these directly. They just say "what skills do I have?" or "use the code-review skill on this PR" — the agent picks the right tool.

// Claude Code / Claude Desktop / Cursor / VS Code — mcp.json{"mcpServers": {"skill-registry": {"command": "skill-registry-mcp"}}}

skills-registry init prints the platform-correct snippet for you.

Install

One command. Five things happen.

  1. Verify gh is authed

    Exits with code 3 if missing, code 4 if not logged in. Run gh auth login first.

  2. Download the Go CLI

    Pulls the matching tarball from GitHub Releases into ~/.local/bin (or $SKILLS_BIN_DIR).

  3. Hand off → skill-registry bootstrap

    Scans ~/.* for known dot-folders. Pre-selects universal ones (factory, codex). You confirm the multi-select.

  4. Create the registry repo

    Calls gh repo create. Pushes every found skill via the Git Data API. Writes SKILL.md pointer files into each agent.

  5. Print the MCP snippet

    Platform-correct JSON / TOML you paste into your MCP client. Restart the client. Done. Re-running init is safe — idempotent.

# No system Python needed — uvx handles it$ uvx skills-registry init# Then in your MCP client:$ cat ~/.config/claude/mcp.json

Prereqs: gh + uv. macOS, Linux, Windows (best-effort).

CLI reference

The skill-registry binary

Charmbracelet TUI for day-to-day management. Same Git-Data-API publish flow as the MCP server, mirrored in Go.

CommandWhat it does
skill-registry bootstrapFirst-run setup. Idempotent — safe to re-run.
skill-registry listFuzzy-filterable TUI of every skill in your registry. Press / to search, Enter to preview.
skill-registry get <slug>Download one skill into ./skill-registry/<slug>/.
skill-registry syncPush local skills sitting in .claude/skills, .cursor/skills, etc. that aren't yet in the registry.
skill-registry add <owner/repo>Clone a teammate's registry. Multi-select which of their skills to pull into your own.
skill-registry publish <path>Publish a single local skill folder. Path-traversal validated. 2 MiB per-file cap.
skill-registry --versionPrint version. Current: 0.5.0.

Override the registry per-process with SKILLS_REGISTRY=owner/repo — useful for browsing a teammate's read-only.

Free, open, and pre-1.0. Try it today.

Apache-2.0. No accounts. No telemetry. No paid tier — ever. Built by anand-92 as an open-source dev tool. Star the repo or file an issue if it breaks.

uvx skills-registry init★ Star on GitHubMCP surface stable · internals may shift between minor versions