As we enter the era of AI and skills, we're faced with new problems β a flood of skills, and sharing knowledge (skills) between repos.
Every day I work with a bunch of repositories, predominantly in Go but sometimes in other languages. A huge layer of knowledge should be shared between them β for example, how to connect to a database, how to deploy a test tag to a staging server, or where to find the logs.
For several months I had been creating skills in each repo and putting the specific knowledge there, but after a while I realized I'd started copy-pasting some skills between repos.
Claude built a plugin system, and it has become mature enough to use. I created a separate repository with the skills and scripts that should be shared, and organized them as plugins. A plugin is just a structured git repository with files β convenient to maintain and update.
The install part is also very flexible: when I install a plugin, I can choose the scope.
Here's what it looks like in practice.
A plugin is just a git repo with a known layout. One marketplace can hold many plugins; one plugin can hold many skills.
dev-claude-plugins/ # the repo you push to git
βββ .claude-plugin/
β βββ marketplace.json # catalog β lists the plugins in this repo
βββ plugins/
βββ backend-dev/ # one installable plugin
βββ .claude-plugin/
β βββ plugin.json # manifest: name, version, author
βββ skills/
βββ query-db/
β βββ SKILL.md # how to connect + run read-only queries
βββ staging-deploy/
β βββ SKILL.md # deploy a dev tag to staging
β βββ references/ # extra docs the skill loads on demand
βββ logs/
βββ SKILL.md # where/how to read service logs
βββ scripts/ # helper shell scripts the skill calls
They're tiny. marketplace.json
is the catalog:
{
"name": "myteam",
"owner": { "name": "your-handle" },
"plugins": [
{ "name": "backend-dev", "source": "./plugins/backend-dev",
"description": "Shared cross-repo dev skills: db queries, staging deploy, logs." }
]
}
plugin.json
is the plugin itself:
{
"name": "backend-dev",
"version": "0.1.0",
"author": { "name": "your-handle" },
"description": "Shared cross-repo development skills."
}
Two commands. First register the marketplace, then install the plugin β this is where you pick the scope (this project only, or user scope = available in every repo):
/plugin marketplace add ~/work/dev-claude-plugins
/plugin marketplace add https://github.com/your-handle/dev-claude-plugins.git
/plugin install backend-dev@myteam
Now every skill is available as /backend-dev:<skill>
β e.g. /backend-dev:query-db
β and also auto-triggers from its description.
Add a skill once, bump version
, push, and every repo picks it up with:
/plugin marketplace update myteam
One source of truth instead of copy-pasting .claude/skills/
into ten repos.