AI Plugin Marketplace Template
Author AI assistant plugins once and ship them to multiple host platforms —
Claude Code, Cursor, Gemini CLI, Kiro, and Vercel Skills CLI — at the
highest fidelity each one accepts.
This repository is a thin consumer of the
@ai-plugin-marketplace
toolkit. It contains your plugin sources and a dependency on the toolkit —
nothing else. All validation, scaffolding, and build logic lives in the
versioned @ai-plugin-marketplace/* npm packages, so you upgrade your tooling
with a single pnpm up and never get stranded on a forked copy of the build
scripts.
Getting started
This repo is a GitHub template. Click "Use this template" (or run
aipm init in an empty directory to generate the same layout from scratch),
then:
pnpm install
The @ai-plugin-marketplace/* packages are published to npm, so a fresh
pnpm install resolves them directly. See CONTRIBUTING.md.
Authoring plugins
Add a new plugin
aipm scaffold my-plugin
This creates plugins/my-plugin/ with an aipm.config.ts support envelope and
skeleton manifests for each declared target, and registers the plugin in the
repo-root marketplace registries.
Build generated artifacts
aipm build
aipm build regenerates every toolkit-owned artifact:
- per-plugin hook JSON (
hooks/claude.json, hooks/hooks.json);
- the standalone bundles under
dist/gemini/ and dist/kiro/;
- the marketplace registries (
.claude-plugin/marketplace.json,
.cursor-plugin/marketplace.json) — generated from aipm.workspace.ts plus
each plugin's aipm.config.ts (see Marketplace metadata);
- for a single-plugin marketplace, the repo-root Gemini extension and Kiro
power (
gemini-extension.json, GEMINI.md, POWER.md, commands/,
skills/, steering/, .kiro/, …) so the repo installs natively into hosts
that have no marketplace concept.
Both authored sources and generated outputs are committed, so plugins stay
browsable on GitHub and pull-request diffs stay honest.
Validate
aipm validate
Validation checks the support envelope, every target manifest's schema,
cross-target name consistency, MCP server-key sync, marketplace registration,
and freshness — that the committed generated artifacts (registries, bundles,
and the repo-root Gemini/Kiro emission) match what aipm build would produce.
package.json exposes these as pnpm build, pnpm check, and
pnpm scaffold if you prefer the npm-script entry points.
The support envelope
Each plugin declares the targets it supports in plugins/<name>/aipm.config.ts:
import { defineConfig } from '@ai-plugin-marketplace/core';
export default defineConfig({
version: '0.1.0',
targets: ['claude', 'cursor', 'gemini', 'kiro', 'vercel'],
});
The toolkit emits artifacts only for declared targets and refuses to validate a
plugin that carries files for a target outside its envelope. To expand a
plugin's envelope, run aipm add-target <plugin> <target> to scaffold the
skeleton files for a new target, then fill in the manifest fields.
Marketplace metadata and generated registries
Repo-level marketplace metadata lives in aipm.workspace.ts at the repo root:
import { defineWorkspace } from '@ai-plugin-marketplace/core';
export default defineWorkspace({
marketplace: {
name: 'ai-plugin-marketplace',
owner: { name: 'AI Plugin Marketplace Template' },
description: 'Universal AI Plugin Marketplace — author once, distribute to all platforms',
},
});
The presence of this file opts the repo into generated registries. Instead
of hand-maintaining .claude-plugin/marketplace.json and
.cursor-plugin/marketplace.json, aipm build generates them from the
workspace metadata plus each plugin's aipm.config.ts (its description and
keywords become the registry entry's description and tags). The generated
registries are committed and freshness-checked like every other artifact.
Gemini and Kiro: the single-plugin marketplace
Gemini CLI and Kiro have no marketplace concept — a repo is installed as one
extension (Gemini) or one power (Kiro) from its root. So when a marketplace
exposes exactly one plugin, aipm build additionally emits that plugin's
Gemini/Kiro artifacts at the repo root (gemini-extension.json, GEMINI.md,
POWER.md, commands/, skills/, steering/, .kiro/), letting the repo
install natively into those hosts. A sidecar at .aipm/generated-root.json
records exactly which root paths the toolkit owns.