Thanks for considering a contribution! AgentHub is a catalog — your plugin code lives in your own repository (or npm package), and you add a reference here.
-
Build your plugin in your own GitHub repo, Git repository, or npm package. Make sure it has a valid
.claude-plugin/plugin.jsonmanifest. See the Claude Code plugin docs for details. -
Fork this repo and create a new file in the
plugins/directory named after your plugin:
touch plugins/your-plugin-name.jsonWith the following content:
{
"name": "your-plugin-name",
"source": {
"source": "github",
"repo": "your-username/your-plugin-repo"
},
"description": "A brief description of what your plugin does",
"version": "1.0.0",
"author": {
"username": "your-username"
},
"category": "development",
"license": "MIT",
"tags": ["skills", "agents"]
}The tags field is required and must include at least one of the component types below. It tells users what your plugin provides:
skills— skill directories withSKILL.mdagents— subagent markdown filescommands— slash command markdown fileshooks— event hooks (hooks.json)mcp-servers— MCP server configurationslsp-servers— language server configurationsintegration— external tool integrations (not a Claude Code plugin per se)other— anything that doesn't fit the categories above
You may also add free-form descriptive tags alongside the type tag (e.g. ["skills", "python", "aws"]).
Alternative sources (Git URL, Git subdirectory, npm)
For plugins hosted on GitLab, Bitbucket, or other Git hosts:
{
"name": "your-plugin-name",
"source": {
"source": "url",
"url": "https://gitlab.com/your-username/your-plugin-repo.git"
},
"description": "A brief description of what your plugin does",
"version": "1.0.0",
"author": {
"username": "your-username"
},
"category": "development",
"license": "MIT"
}You can optionally pin to a branch/tag with "ref" or an exact commit with "sha".
For plugins that live inside a subdirectory of a larger repo (e.g. monorepos):
{
"name": "your-plugin-name",
"source": {
"source": "git-subdir",
"url": "https://github.com/your-username/your-monorepo.git",
"path": "packages/your-plugin"
},
"description": "A brief description of what your plugin does",
"version": "1.0.0",
"author": {
"username": "your-username"
},
"category": "development",
"license": "MIT"
}You can optionally pin to a branch/tag with "ref" or an exact commit with "sha".
For plugins published to npm:
{
"name": "your-plugin-name",
"source": {
"source": "npm",
"package": "@your-scope/your-plugin"
},
"description": "A brief description of what your plugin does",
"version": "1.0.0",
"author": {
"username": "your-username"
},
"category": "development",
"license": "MIT"
}You can optionally specify "version" (e.g. "^2.0.0") and "registry" for private registries.
- Open a pull request with your new file.
Note: Do not edit
.claude-plugin/marketplace.jsondirectly — it is auto-generated from the files inplugins/after your PR is merged.
- Use kebab-case:
my-cool-plugin, notMyCoolPlugin - Be descriptive:
react-test-generatoroverrtg - Don't use "claude", "anthropic", or "official" in your plugin name
- The filename must match the plugin name:
plugins/my-cool-plugin.json
Use one of the following for the category field:
development— coding tools, language support, scaffoldingtesting— test generation, coverage, QAdevops— CI/CD, deployment, infrastructuresecurity— auditing, scanning, compliancedocumentation— doc generation, API docs, readmesproductivity— workflow automation, task managementdata— data analysis, database tools, AI/MLdesign— UI/UX, frontend, accessibilityother— anything that doesn't fit above
- Your plugin must have a valid
.claude-plugin/plugin.jsonmanifest - For GitHub repos and Git URLs: the repository must be publicly accessible (or provide install instructions for private repos). Include a
README.mdand aLICENSEfile in your repository. - For Git subdirectories: the parent repository must be publicly accessible. The plugin subdirectory must include a
README.mdand aLICENSEfile. - For npm packages: the package must be published to a public registry (or provide install instructions for private registries). Include a
README.mdand aLICENSEfile in your package.
Publishing a new version of your plugin to AgentHub users is a two-step flow:
- Push the new version to your source (GitHub repo, Git URL, Git subdirectory, or a new npm release) and bump the
versionfield in your plugin's own manifest (e.g..claude-plugin/plugin.json). - Open a PR here updating the
versionfield inplugins/<your-plugin>.jsonto match.
Both versions must match. Claude Code's /plugin update <name>@agenthub compares the user's installed version against the version declared in this marketplace — not your source's git HEAD. If the registry entry here still points at the old version, /plugin update reports "already at the latest version" and your changes never reach users who have already installed the plugin, even if your source has moved on.
For metadata-only changes (description, category, tags, author info — anything that doesn't ship a new version of the plugin itself), just edit your file in plugins/ and open a PR. A version bump is not required.
Note: Do not edit
.claude-plugin/marketplace.json— it is auto-generated fromplugins/after your PR is merged.
Open a PR removing your file from plugins/, or open an issue requesting removal.
If you have questions or need help with your submission, join our Discord and ask in the community channels. You can also reach us on X (@orderofnull).