From skill-steward
Designs public or private skill/plugin marketplaces for Cursor, Claude Code, Codex, Zed, and npx—covering manifest layout, install matrix, and Skill Steward vs product boundaries.
How this skill is triggered — by the user, by Claude, or both
Slash command
/skill-steward:plugin-marketplace-setupThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Ship **skills** (portable instructions), **plugins** (runtime wiring), and **marketplaces** (catalogs) without mixing them up.
evals/cases/adr-plan-dormant.yamlevals/cases/local-copy-pattern-trigger.yamlevals/cases/private-marketplace-trigger.yamlevals/cases/skills-only-install-dormant.yamlreferences/distribution-matrix.mdreferences/evals.mdreferences/local-copy-pattern.mdreferences/manifest-snippets.mdreferences/sources.mdShip skills (portable instructions), plugins (runtime wiring), and marketplaces (catalogs) without mixing them up.
| Layer | What it is | Install unit | Skill Steward home |
|---|---|---|---|
| Skill | SKILL.md per agentskills.io | npx skills add owner/repo --skill name | skills/{name}/ |
| Plugin | Open Plugin or vendor manifest + hooks/MCP/rules/commands | Per-agent (see matrix) | plugins/{id}/ (ADR 0004) |
| Marketplace | Catalog of plugins/skills | Add marketplace, then install plugin | Product repos; Skill Steward uses public Git + skills.sh |
Rule: Instructions only → skill. Event hooks or multi-file wiring → plugin (references skills by id, do not fork SKILL.md).
Skill Steward meta-plugin means: a declarative manifest, referenced skill IDs, hook/rule snippets, and validated wiring artifacts. It does not mean a host marketplace submission has happened, and it must not silently mutate Cursor/Codex/Claude configuration. Host-specific install steps remain explicit in README/docs.
| Goal | Recommended channel | Notes |
|---|---|---|
| Public discovery | GitHub public repo + skills.sh | npx skills add owner/repo; index needs valid skills/*/SKILL.md |
| Team-only skills (any agent) | Private GitHub/GitLab repo | Same npx skills add org/private-repo if agents can clone; use deploy keys / SSO |
| Cursor team plugins | Team marketplace — Dashboard → Settings → Plugins → Import repo | Teams/Enterprise; private GitHub repo with .cursor-plugin/marketplace.json |
| Claude Code team | Private git marketplace | /plugin marketplace add with token env for auto-update (Claude docs) |
| Codex team | $REPO_ROOT/.agents/plugins/marketplace.json or ~/.agents/plugins/marketplace.json | Repo/personal marketplace; install from app or CLI |
| Zed skills | .agents/skills/ or ~/.agents/skills/ | Skills only; Zed has no remote skill registry or custom search paths |
| npm-private skills packages | Claude marketplace source.type: npm | For npm-hosted plugin bundles; uncommon for plain SKILL.md trees |
Skill Steward default: public arenukvern/skill_steward for meta-skills; hooks documented separately (npx skills does not install Cursor hooks).
Use vercel-labs/skills as the shared installer:
npx skills add owner/repo # all skills, project scope
npx skills add owner/repo --skill my-skill # one skill
npx skills add owner/repo -a cursor -a claude-code -a codex -a zed -y
npx skills add owner/repo -g # global (~/.agents/skills/)
npx skills add owner/repo --copy # copy instead of symlink
Discovery also reads .claude-plugin/plugin.json and .claude-plugin/marketplace.json skill paths (Claude marketplace compatibility).
| Agent | --agent flag | Project skills path | Global skills path |
|---|---|---|---|
| Cursor | cursor | .agents/skills/ (Cursor also reads .cursor/skills/) | ~/.cursor/skills/ |
| Claude Code | claude-code | .claude/skills/ | ~/.claude/skills/ |
| Codex | codex | .agents/skills/ | ~/.codex/skills/ |
| Zed | zed | .agents/skills/ | ~/.agents/skills/ |
| Copilot, Windsurf, Cline, … | see npx skills --help | per CLI table | per CLI table |
Hooks: supported on Claude Code, Cline, Kiro—not Cursor via npx skills. Cursor hooks need .cursor/hooks.json (Skill Steward example).
| Agent | Manifest dir | Marketplace file | Install (typical) |
|---|---|---|---|
| Cursor | .cursor-plugin/plugin.json | .cursor-plugin/marketplace.json (multi-plugin repo) | Marketplace UI, team import, or init script → .cursor/plugins/local/ |
| Claude Code | .claude-plugin/plugin.json | .claude-plugin/marketplace.json | /plugin marketplace add owner/repo then /plugin install name@marketplace |
| Codex | .codex-plugin/plugin.json | $REPO_ROOT/.agents/plugins/marketplace.json or ~/.agents/plugins/marketplace.json | App plugin directory or codex plugin add name@marketplace |
| Open Plugin v1 | .plugin/plugin.json | host-specific | Portable baseline; add vendor manifests only for host-specific overrides |
| Open skills only | N/A | N/A | npx skills add — no MCP/hooks |
Reference product layout: product repository marketplace distribution configs.
Use this when a product repo needs agents to generate a local installer like
flutter-mcp-toolkit init: a repo-owned script that copies canonical skills,
host plugin manifests, MCP config, hooks, assets, and marketplace catalog files
into Codex/Cursor/Claude layouts.
skills/, existing plugins/,
.mcp.json/mcp.json, hooks, package/version metadata, assets, and current
install docs. Do not generate host manifests from memory alone.npx skills add --copy for skills-only distribution; use a repo-local copy/init script when skills must ship with
MCP, hooks, commands, or assets; use host marketplace manifests only when the
repo needs Codex/Cursor/Claude plugin install flows.plugin/ or
plugins/{id}/ with .codex-plugin/, .cursor-plugin/,
.claude-plugin/, optional .plugin/, skills/, hooks, MCP config, and
assets.tool/install_agent_bundle.dart, bin/<tool> init, or
equivalent). The script should plan/copy directories, create host manifest
directories, write marketplace root files, and report changed paths.See local-copy-pattern.md for a reusable layout, script skeleton, and validation checklist.
plugin.json in .codex-plugin/; put skills/, .mcp.json, .app.json, hooks/, and assets/ at plugin root.skills, mcpServers, apps, or hooks in .codex-plugin/plugin.json only when the companion files/directories exist. Codex also checks default hooks/hooks.json.$REPO_ROOT/.agents/plugins/marketplace.json for repo/team catalogs or ~/.agents/plugins/marketplace.json for personal catalogs.policy.installation, policy.authentication, and category; keep source.path relative to the marketplace root and inside that root.~/.codex/plugins/cache/$MARKETPLACE_NAME/$PLUGIN_NAME/$VERSION/; local source edits require reinstall/cache refresh before new threads see them..plugin/plugin.json when a plugin should be vendor-neutral across Open Plugin hosts..codex-plugin/plugin.json, .cursor-plugin/plugin.json, or .claude-plugin/plugin.json only when the host needs a vendor-specific manifest.plugin.yaml with a host marketplace manifest. It is a local meta-plugin manifest for documenting Skill Steward wiring.my-skills/
├── skills/
│ └── my-skill/
│ └── SKILL.md
├── skills.sh.json # optional: skills.sh categories
├── README.md # install commands
└── package.json # optional: pnpm run validate
Publish: push public → npx skills add org/my-skills. No plugin manifest required. For customizing the repository page by defining groupings and categories in skills.sh.json, see the skills.sh customization docs.
my-marketplace/
├── .agents/plugins/
│ └── marketplace.json # Codex catalog
├── .claude-plugin/
│ └── marketplace.json # Claude catalog, when needed
├── .cursor-plugin/
│ └── marketplace.json # Cursor catalog, when needed
└── plugins/
└── my-plugin/
├── .plugin/plugin.json
├── .codex-plugin/plugin.json
├── .claude-plugin/plugin.json
├── .cursor-plugin/plugin.json
├── skills/
├── hooks/
└── .mcp.json
Codex entry: "source": {"source": "local", "path": "./plugins/my-plugin"} plus policy/category. Claude and Cursor keep their own marketplace shapes. Use only the vendor trees the target agents need.
plugins/my-hook-pack/
├── plugin.yaml
├── README.md # manual .cursor/hooks.json steps
├── hooks.json.snippet
└── hooks/
Canonical skills stay in skills/. See templates/plugin/.
git clone (HTTPS token, SSH, or GHE app for Cursor team marketplaces).GITHUB_TOKEN / GITLAB_TOKEN for Claude auto-update on private marketplaces./plugin vs Cursor dashboard).version in plugin manifest per release; skills use git SHA via npx skills update.pnpm run validate / dart run :steward validate in Skill Steward); product repos add contract tests..agents/skills/) vs -g global; document team norm.| Concern | Skill Steward | Product (e.g. product MCP) |
|---|---|---|
| Skills | Meta only (skill-authoring-lifecycle, repository-governance-lifecycle, …) | Domain + MCP skills |
| Plugins | Meta hooks (steward-validate-on-save) | Full bundle: MCP + skills + init |
| CLI | steward validate | [toolkit-cli] init <agent> |
| Marketplace | Public Git + skills.sh | Claude/Codex git + Cursor submit + Smithery |
| Copy/init scripts | Skills teach the pattern | Product repo owns generated script, host payloads, and install proof |
Do not put product MCP servers in Skill Steward. Cross-promote: npx skills add arenukvern/skill_steward --skill mcp-harness-repo-maintainer.
skills/{name}/SKILL.md.skills.sh.json + root README.md.pnpm run validate in skill_steward.main, public repo is installable via npx skills add arenukvern/skill_steward --skill {name}.templates/plugin/ → plugins/{id}/.plugin.yaml (ids only).skills/ and expecting npx skills to wire CursorSKILL.md inside every plugin directorysteward_cli before repeated
repo evidence proves a generic Steward module is usefulnpx skills add arenukvern/skill_steward --skill plugin-marketplace-setup
See references/sources.md. When researching, follow skill-source-citations.
npx claudepluginhub arenukvern/skill_steward --plugin skill-stewardReviews code diffs for over-engineering: unnecessary complexity, reinvented standard library, speculative abstractions. One-line findings per location. Use for 'review for over-engineering' or /ponytail-review.