{"slug": "how-to-build-a-personal-agent-marketplace-for-claude-code", "title": "How to Build a Personal Agent Marketplace for Claude Code", "summary": "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.", "body_md": "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.\n\nI 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.\n\nThis 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.\n\nThe structure has three layers:\n\n| Layer | Responsibility | Location | \n|---|---|---|\n| Marketplace | Lists plugins and their sources | Repository-root `.claude-plugin/marketplace.json` | \n| Plugin | Groups components into an installable, versioned unit | Plugin directory with `.claude-plugin/plugin.json` | \n| Components | Implement behavior | `skills/` ,`agents/` ,`hooks/` , and supporting files | \n\nA 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.\n\nChoose 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.\n\n```\nawave-agents/\n├── .claude-plugin/marketplace.json\n└── plugins/aw-review/\n    ├── .claude-plugin/plugin.json\n    ├── skills/review-code/\n    │   ├── SKILL.md\n    │   └── references/flow.md\n    ├── agents/\n    │   ├── reviewer-general.md\n    │   ├── reviewer-security.md\n    │   └── finding-validator.md\n    ├── hooks/hooks.json\n    └── scripts/\n        ├── run-node.sh\n        ├── review-output.mjs\n        └── review-ledger.mjs\n```\n\nComponent 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).\n\nThe marketplace catalog connects names to sources:\n\n```\n{\n  \"name\": \"awave-agents\",\n  \"owner\": { \"name\": \"Teemu Piirainen\" },\n  \"plugins\": [\n    { \"name\": \"aw-review\", \"source\": \"./plugins/aw-review\" }\n  ]\n}\n```\n\nPaths are relative to the marketplace root. Add a sibling directory and catalog entry for another plugin; separate source repositories are also supported.\n\nThe plugin’s `.claude-plugin/plugin.json` supplies its metadata, here with an illustrative version:\n\n```\n{\n  \"name\": \"aw-review\",\n  \"version\": \"0.3.6\",\n  \"description\": \"Multi-agent code review\",\n  \"author\": { \"name\": \"Teemu Piirainen\" }\n}\n```\n\nPlugin 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.\n\nThe review starts at `skills/review-code/SKILL.md`:\n\n```\n---\nname: review-code\ndescription: Reviews code changes and reports validated defects. Use when the user asks for a code review.\nargument-hint: \"[--staged | --base <ref> --head <ref>]\"\n---\n```\n\nThe description helps Claude select a normally invocable skill. Full instructions load on invocation; supporting documents are read as needed. Our entry point explicitly directs Claude to `references/flow.md` for the detailed workflow.\n\nInstructions should define inputs, argument handling, agents or tools, outputs, and failure behavior. `argument-hint` advertises the interface; it does not implement parsing.\n\nFor operations whose timing I want to control, including `grade-findings`, `sync-pr-comments`, and `ratify-rule`, I use `disable-model-invocation: true`. They require an explicit request. See the [skill invocation options](https://code.claude.com/docs/en/skills).\n\nAgents perform narrower tasks: inspect correctness, check security, or validate a finding. Their Markdown files configure descriptions, models, reasoning effort, and tools; the body defines the role and required evidence. I route internal agents through the review skill, but that instruction is not access control.\n\nCheck fields when moving standalone agents into a plugin: `permissionMode`, `hooks`, and `mcpServers` are ignored for plugin agents. Hooks and MCP configuration belong at plugin level. See [supported component fields](https://code.claude.com/docs/en/plugins/components).\n\nTool selection also differs from write protection. `tools` and `disallowedTools` restrict access, but removing Edit and Write still permits writes through Bash. Subagents inherit the parent session’s permission mode; apply its permission rules to shell operations too. A plugin-level `PreToolUse` hook can reject calls, provided its checks cover the operations you intend to block. See [subagent permission controls](https://code.claude.com/docs/en/sub-agents).\n\nAgents judge code; scripts resolve scope, validate schemas, maintain the review ledger, and record findings. Those operations become directly testable instead of being reconstructed by the model on each run.\n\nOur scripts use plain Node without external dependencies and require Node 18 or newer. A plugin containing only skills needs no Node runtime.\n\nThe `SubagentStop` hook captures an agent’s output, validates its structure, and writes it to disk. The orchestrator reads those artifacts instead of retyping findings between conversations. Configure hooks in `hooks/hooks.json` and keep execution logic in `scripts/`. A blocking stop-hook response can continue the agent, so test failure paths to avoid loops. The [hooks reference](https://code.claude.com/docs/en/hooks) defines payloads and stopping behavior.\n\nTwo packaging constraints matter:\n\n`${CLAUDE_PLUGIN_ROOT}` for bundled assets and `${CLAUDE_PLUGIN_DATA}` for persistent plugin data. Project results belong in the project; our artifacts go into `.review-data/`. See the `run-node.sh` finds a usable executable or reports a clear failure.\nBefore sharing a plugin:\n\nRelative-path plugins in a local-directory marketplace load in place; definition changes appear after a reload or new session. Test a hosted installation too, because it exercises the cached package. The [marketplace walkthrough](https://code.claude.com/docs/en/plugin-marketplaces) provides the commands.\n\nOur repository adds three checks: `check-contract.mjs` verifies workflow references to files, flags, agents, and fields; `check-pipeline.mjs` exercises the pipeline; `check-node-launcher.mjs` checks launching. These are repository tooling, not built-in marketplace features. They catch broken contracts, while real review tasks test judgment. A structurally valid report can still be a poor review.\n\nPublish the marketplace repository to a Git host. Users register it in Claude Code’s plugin manager and install the plugins they need. Private repositories work too, but authentication must succeed without an interactive prompt, for example through an SSH agent or HTTPS credential helper. Document that prerequisite using the [private-marketplace guidance](https://code.claude.com/docs/en/plugins/host-marketplace).\n\nFor my work, I install per project. Local scope keeps the selection personal to that repository. Project scope records it in `.claude/settings.json`: `extraKnownMarketplaces` declares sources and `enabledPlugins` selects plugins. Teammates can use that shared setup subject to repository trust. See [installation scopes](https://code.claude.com/docs/en/discover-plugins).\n\nFor a new plugin, keep `version` in `plugin.json` and omit it from the catalog entry. Increment it on release: pushing commits without changing an explicit version can leave users on the cached package. Alternatively, omit versions from both locations to track commits.\n\nThird-party marketplaces have background auto-update disabled by default. Users can enable it or update manually; administrators can configure it centrally. Include the procedure in your README. The [hosting guide](https://code.claude.com/docs/en/plugins/host-marketplace#keep-users-up-to-date) covers versioning and update policy.\n\nOur `release.sh` sets versions and runs the build and checks. I then verify that an installed consumer receives the update. That completes the maintenance path from discovering a weakness in one project to delivering the correction elsewhere.\n\nStart with one capability, install it in a second project, and release one small improvement. Verify both the initial workflow and the update before expanding the marketplace.\n\nThe next article extends this structure to multiple coding harnesses while keeping one maintained source.", "url": "https://wpnews.pro/news/how-to-build-a-personal-agent-marketplace-for-claude-code", "canonical_source": "https://dev.to/teppana88/how-to-build-a-personal-agent-marketplace-for-claude-code-17fp", "published_at": "2026-09-27 13:06:00+00:00", "updated_at": "2026-09-27 13:31:19.839649+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-tools", "ai-products"], "entities": ["Claude Code", "Anthropic", "awave-agents", "aw-review", "Teemu Piirainen"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/how-to-build-a-personal-agent-marketplace-for-claude-code", "markdown": "https://wpnews.pro/news/how-to-build-a-personal-agent-marketplace-for-claude-code.md", "text": "https://wpnews.pro/news/how-to-build-a-personal-agent-marketplace-for-claude-code.txt", "jsonld": "https://wpnews.pro/news/how-to-build-a-personal-agent-marketplace-for-claude-code.jsonld"}}