v0.7.0 · Apache-2.0 · Free & open source
One GitHub repo.
Every AI agent.
Every device.
Your skills live in one repo you own. Access them from any device — laptop, desktop, cloud VM — via the CLI or MCP. No more copying SKILL.md files across machines. No more syncing ~/.claude, ~/.cursor, ~/.codex folders by hand. One registry. Everywhere you work.
AI tool dot-folders auto-detected at bootstrap
MCP tools exposed — list_skills, get_skill
Devices — one registry accessible everywhere
Command to install & wire up every agent on any machine
The problem
Skills trapped on one machine. Copied by hand. Out of sync everywhere.
Your best code-review skill lives on your work laptop. Your React component library skill is on your desktop. Your cloud VM has neither. Every AI tool hoards its own local skills folder, and you are the human sync cable — copy-pasting SKILL.md files, rsyncing dot-folders, DMing yourself snippets. Worse, every skill gets auto-loaded into startup context whether you need it or not. You pay tokens for skills you'll never use this conversation.
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.
One repo. Every device. Fetched on demand.
- anand-92/my-skills/code-review/SKILL.md
- Same skills on laptop, desktop, and cloud VM
- Every agent on every device points to the same repo
- Edit once — every machine sees the update instantly
- Pointer file in each agent's dot-folder (~200 bytes)
- Real skill fetched only when needed
How it works
Single source of truth. Six deliberate constraints.
Every design decision falls out of one constraint: the MCP server runs in a stripped container — no shell PATH, no SSH agent, no git config user.email. So it doesn't depend on any of them.
One registry, every device
Install the CLI on any machine and point it at the same GitHub repo. Your skills follow you — laptop, desktop, remote server, or fresh VM. No manual syncing, no drift between devices.
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. No startup-token tax, no bloat.
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.
Tree-SHA cache
Skills cached in ~/.cache/skills-mcp/skills/. Cache key is GitHub's tree SHA — force-pushes and subtree changes invalidate correctly.
Path-traversal hardened
Every write — publish, add, sync — rejects .. segments and backslash traversals. 2 MiB cap per file. Same validation in Python and Go.
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?
| Capability | Local dot-folders | Dotfiles repo | skills-registry |
|---|---|---|---|
| One home for every agent | duplicated | yes | yes |
| Access from any device (no manual sync) | no | manual | yes |
| Fetched on demand (no startup tokens) | no | no | yes |
| Versioned + branchable | no | yes | yes |
| Works in every MCP client | partial | no | yes |
| Share / fork between users | no | clunky | clone the repo |
| No shell or SSH config needed | yes | no | yes |
Architecture
Two deliverables. One source repo.
A hosted MCP server your agents connect to, and a Go CLI you install once. No Python to manage locally — the server runs as a service.
Hosted FastMCP at mcp.skills-registry.dev. OAuth via GitHub. Two read-only MCP tools: list_skills, get_skill. Skills served from each user's linked repo via a GitHub App installation token.
Hosted at mcp.skills-registry.dev · Streamable HTTP
Charmbracelet TUI manager — onboarding wizard + dashboard hub for day-to-day skill management. Commands: list, get, sync, add, publish, remove.
GitHub Releases · darwin/linux/windows × amd64/arm64
MCP surface
Two read-only tools. Any MCP client can call them.
Enumerates every skill in your linked registry. Returns a markdown table with slug, name, description, and the URI to fetch.
readReturns the raw SKILL.md for one slug, served straight from your registry repo via the GitHub App installation token.
read// Claude Code / Claude Desktop / Cursor / VS Code - mcp.json
{
"mcpServers": {
"skills-registry": {
"type": "http",
"url": "https://mcp.skills-registry.dev/mcp"
}
}
}# What the agent ends up doing under the hood
user: "use my code-review skill on this PR"
agent: get_skill("code-review")
-> hosted MCP returns raw SKILL.md
-> agent reads the markdown
-> follows the skill's instructionsInstall
One command. Five things happen.
Install the CLI
One-liner: curl … install.sh | sh drops the Go binary into ~/.local/bin/skills-registry.
Run
skills-registryBare invocation launches the onboarding wizard the first time, then routes to the dashboard hub on every subsequent run.
Wizard creates your registry repo
Scans local dot-folders, calls gh repo create, and pushes every skill it found in one git push.
Paste the MCP JSON snippet
The wizard prints a ready-to-paste mcp.json block pointing at https://mcp.skills-registry.dev/mcp. Drop it into your client config.
Install the GitHub App + restart
Authorize the skills-registry-mcp GitHub App on your registry repo, restart your MCP client, and the hosted server starts serving skills.
# Drops the Go binary into ~/.local/bin/skills-registry
$ curl -fsSL https://raw.githubusercontent.com/anand-92/skills-registry/main/install.sh | sh
# Then run the wizard:
$ skills-registry// Claude Code / Claude Desktop / Cursor / VS Code - mcp.json
{
"mcpServers": {
"skills-registry": {
"type": "http",
"url": "https://mcp.skills-registry.dev/mcp"
}
}
}CLI reference
The skills-registry binary
Charmbracelet TUI for day-to-day management. Same Git-Data-API publish flow as the MCP server, mirrored in Go.
| Command | What it does |
|---|---|
| skills-registry bootstrap | First-run setup. Idempotent — safe to re-run. |
| skills-registry list | Fuzzy-filterable TUI of every skill in your registry. Press / to search, Enter to preview. |
| skills-registry get <slug> | Download one skill into ./skills-registry/<slug>/. |
| skills-registry sync | Push local skills sitting in .claude/skills, .cursor/skills, etc. that aren't yet in the registry. |
| skills-registry add <owner/repo> | Clone a teammate's registry. Multi-select which of their skills to pull into your own. |
| skills-registry publish <path> | Publish a single local skill folder. Path-traversal validated. 2 MiB per-file cap. |
| skills-registry remove <slug> | Atomic delete — drops the slug from the registry (single Git Data API commit with null-SHA tree entries), the local cache, and every agent dot-folder. |
| skills-registry --version | Print version. Current: 0.7.x. |
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.
