This file is for AI agents (Claude Code, Copilot, etc.) working on this repository. It describes the project, its conventions, and how to perform common tasks correctly.
AgentHub is a community-driven plugin marketplace for Claude Code. It is a catalog only — plugin code lives in contributors' own repositories (or npm packages). This repo maintains a registry of plugin references in .claude-plugin/marketplace.json.
agenthub/
├── plugins/ # One JSON file per plugin (the source of truth)
├── scripts/
│ └── build-marketplace.sh # Aggregates plugins/*.json into .claude-plugin/marketplace.json
├── .github/
│ ├── workflows/
│ │ ├── build-marketplace.yml # Rebuilds .claude-plugin/marketplace.json on push to main
│ │ └── validate-plugin.yml # Validates plugin JSON on PRs
│ └── PULL_REQUEST_TEMPLATE/
│ ├── add-plugin.md
│ ├── update-plugin.md
│ └── remove-plugin.md
├── .claude-plugin/marketplace.json # AUTO-GENERATED — never edit directly
├── CONTRIBUTING.md # Contribution guidelines for humans
├── README.md # User-facing install & usage docs
└── LICENSE # MIT-
Never edit
.claude-plugin/marketplace.jsondirectly. It is auto-generated byscripts/build-marketplace.shfrom the files inplugins/. If you need to change the marketplace output, modify the plugin files or the build script. -
One plugin = one file. Each plugin is a standalone JSON file in
plugins/named<plugin-name>.json. The filename must match thenamefield inside the JSON. -
Plugin naming conventions:
- Kebab-case only:
my-cool-plugin, notMyCoolPlugin - Be descriptive:
react-test-generator, notrtg - Never use "claude", "anthropic", or "official" in plugin names
- Kebab-case only:
-
Valid categories:
development,testing,devops,security,documentation,productivity,data,design,other -
Valid tags (optional):
skills,agents,commands,hooks,mcp-servers,lsp-servers,integration
Every file in plugins/ must follow this structure:
{
"name": "plugin-name",
"source": { ... },
"description": "Brief description",
"version": "1.0.0",
"author": {
"username": "author-username"
},
"category": "development",
"license": "MIT",
"tags": ["skills", "agents"]
}The license field is required. Use SPDX identifiers (e.g. MIT, Apache-2.0, MIT OR Apache-2.0).
The tags field is optional. It indicates what components the plugin provides.
GitHub (most common):
"source": { "source": "github", "repo": "owner/repo" }Git URL (GitLab, Bitbucket, etc.):
"source": { "source": "url", "url": "https://gitlab.com/owner/repo.git" }Git subdirectory (monorepos):
"source": { "source": "git-subdir", "url": "https://github.com/owner/repo.git", "path": "packages/plugin" }npm:
"source": { "source": "npm", "package": "@scope/plugin-name" }All git-based sources optionally accept "ref" (branch/tag) and "sha" (exact commit).
- Create
plugins/<plugin-name>.jsonwith valid plugin JSON - Ensure the filename matches the
namefield - Ensure all required fields are present:
name,source,description,version - Ensure the
categoryis one of the valid categories listed above - Do not touch
.claude-plugin/marketplace.json
- Edit the existing file in
plugins/ - Do not rename the file unless the plugin name is changing
- Do not touch
.claude-plugin/marketplace.json
- Delete the file from
plugins/ - Do not touch
.claude-plugin/marketplace.json
./scripts/build-marketplace.shThis requires jq to be installed. It reads all plugins/*.json files and writes .claude-plugin/marketplace.json. The output should show how many plugins were built.
Check that the JSON is valid and has required fields:
jq empty plugins/<plugin-name>.json && echo "Valid JSON"
jq -r '.name, .description, .version, .source' plugins/<plugin-name>.json- Do not add plugin source code to this repo — it belongs in the plugin author's own repo
- Do not edit
.claude-plugin/marketplace.json— it is auto-generated - Do not add plugins with duplicate names
- Do not modify the build script unless changing the marketplace structure itself
- Do not merge PRs that fail the
validate-plugin.ymlworkflow