How to Build a Personal Agent Marketplace for Claude Code A developer detailed a personal Claude Code plugin marketplace, awave-agents, that packages more than 40 accumulated agents, skills, review workflows, validators, scripts, and hooks into reusable, versioned plugins. The setup uses a three-layer structure — a repository-root marketplace.json catalog, per-plugin plugin.json manifests, and component directories for skills, agents, hooks, and scripts — with the aw-review multi-agent code review plugin as the worked example. The author, Teemu Piirainen, notes that plugin names must stay consistent between catalog and manifest because the installation identifier is aw-review@awave-agents. Over the last six months, I’ve accumulated more than 40 agents and skills, along with review workflows, validators, scripts, and hooks. About five plugins come with me into every project; the rest depend on the stack. I keep the reusable parts in a personal marketplace. When a project exposes a weakness in a shared reviewer, I fix one maintained implementation and release an update for other projects to use. This article shows that setup in Claude Code using aw-review , a plugin in my awave-agents marketplace. You can begin with a single skill and add agents, scripts, and hooks as the workflow grows. The structure has three layers: | Layer | Responsibility | Location | |---|---|---| | Marketplace | Lists plugins and their sources | Repository-root .claude-plugin/marketplace.json | | Plugin | Groups components into an installable, versioned unit | Plugin directory with .claude-plugin/plugin.json | | Components | Implement behavior | skills/ , agents/ , hooks/ , and supporting files | A Git repository with a catalog and one plugin is enough. Anthropic’s marketplace walkthrough https://code.claude.com/docs/en/plugin-marketplaces covers creation and installation. Choose a plugin boundary around components that belong together. In aw-review , the review skill depends on specialist agents, validation scripts, and output hooks, so they ship as one package. Project architecture, domain rules, and long-term memory stay in the project being reviewed; the reusable reviewer reads them there. awave-agents/ ├── .claude-plugin/marketplace.json └── plugins/aw-review/ ├── .claude-plugin/plugin.json ├── skills/review-code/ │ ├── SKILL.md │ └── references/flow.md ├── agents/ │ ├── reviewer-general.md │ ├── reviewer-security.md │ └── finding-validator.md ├── hooks/hooks.json └── scripts/ ├── run-node.sh ├── review-output.mjs └── review-ledger.mjs Component directories belong at the plugin root, outside .claude-plugin/ . Claude Code discovers their standard locations. A manifest is optional for basic loading, but keeping one gives the package explicit identity and release metadata. See the manifest reference https://code.claude.com/docs/en/plugins-reference . The marketplace catalog connects names to sources: { "name": "awave-agents", "owner": { "name": "Teemu Piirainen" }, "plugins": { "name": "aw-review", "source": "./plugins/aw-review" } } Paths are relative to the marketplace root. Add a sibling directory and catalog entry for another plugin; separate source repositories are also supported. The plugin’s .claude-plugin/plugin.json supplies its metadata, here with an illustrative version: { "name": "aw-review", "version": "0.3.6", "description": "Multi-agent code review", "author": { "name": "Teemu Piirainen" } } Plugin names must match between catalog and manifest. The installation identifier is aw-review@awave-agents ; the marketplace name comes from the catalog, even if the Git repository has another name. The review skill appears as /aw-review:review-code . Keep these names stable once projects depend on them. The review starts at skills/review-code/SKILL.md : --- name: review-code description: Reviews code changes and reports validated defects. Use when the user asks for a code review. argument-hint: " --staged | --base