feat(kyberforge): add plugin-author and marketplace-author skills

## Why

Plugin and marketplace management had no governed authoring path. Creating or
updating a plugin required knowing the dual-manifest convention, version parity
rules, and directory skeleton by memory — nothing enforced consistency or guided
the process.

`/plugin-author` closes that gap by owning the full plugin scaffold lifecycle:
create, update, rename, and release. `/marketplace-author` handles the
marketplace-facing side: register, deregister, and update plugin entries in
`marketplace.json`.

ADR-0016 codifies the version parity convention (identical `version` in both
`plugin.json` and `.claude-plugin/plugin.json`) that `/plugin-author` now
enforces. The two plugin.json files in this repo are backfilled to comply
(keys also sorted to pass the pretty-format-json hook). CONTEXT.md gains
glossary entries for "plugin scaffold" and "version parity" so future agents
have shared vocabulary for these concepts.

## Implementation Notes

`/plugin-author` ships a `scripts/new-plugin.sh` scaffold script that generates
the directory skeleton and both manifests in one shot; the skill calls the script
rather than generating files ad hoc so the scaffold is reviewable and repeatable.

Version parity is an invariant, not a suggestion — the skill will fail loudly
on create/update if the two versions would diverge.

ADR: docs/adr/0016-plugin-version-parity.md
This commit is contained in:
2026-06-28 10:45:03 +00:00
parent 098fc7315e
commit 4d061bd199
18 changed files with 1159 additions and 13 deletions

View File

@@ -0,0 +1,9 @@
# references/
## manifest-fields.md
Complete field reference for both plugin manifests. Covers all optional fields beyond the scaffolded defaults: field classification (shared / CC-only / Copilot-only), usage examples, and the version parity convention (ADR-0016). Loaded when a user asks to add a non-default field to either manifest.
## sources.md
Research provenance record for this skill. Lists the upstream research sources (claude-code-plugins and github-copilot-plugins research docs) that informed SKILL.md, the scaffold script, and the manifest-fields reference. Used by `skill-audit` to validate the provenance chain.

View File

@@ -0,0 +1,141 @@
---
topic: manifest-fields
source_keys:
- context7-websites-code-claude
- claude-code-plugins-docs
- github-cli-plugin-reference
- github-plugins-creating
- github-plugins-finding-installing
---
# Manifest Fields Reference
This document covers optional fields beyond the scaffolded defaults. Consult it when a user asks to add a non-default field to either manifest.
## Field Classification
| Field | Copilot `plugin.json` | CC `.claude-plugin/plugin.json` | Notes |
|---|---|---|---|
| `name` | Yes (shared) | Yes (shared) | Identical in both; kebab-case; max 64 chars (Copilot) |
| `description` | Yes (shared) | Yes (shared) | Identical in both; max 1024 chars (Copilot) |
| `version` | Yes (shared) | Yes (shared) | Identical in both; SemVer; version parity required (ADR-0016) |
| `author.name` | Yes (shared) | Yes (shared) | Identical in both |
| `license` | Yes (shared) | Yes (shared) | Identical in both; SPDX identifier |
| `keywords` | Yes (shared) | Yes (shared) | Identical in both; string array |
| `displayName` | No | Yes (CC-only) | Human-readable name shown in plugin manager |
| `author.url` | No | Yes (CC-only) | Author profile or homepage URL |
| `author.email` | Yes (Copilot-only) | No | Author contact email |
| `agents` | Yes (Copilot-only) | No | Path or array; default: `agents/` |
| `skills` | Yes (Copilot-only) | No | Path or array; default: `skills/` |
| `hooks` | Yes (Copilot-only) | No | Path to hooks config |
| `mcpServers` | Yes (Copilot-only) | No | Path or object for MCP server config |
| `category` | Yes (Copilot-only) | No | Marketplace category string |
| `tags` | Yes (Copilot-only) | No | Additional taxonomy tags (distinct from `keywords`) |
| `extensions` | Yes (Copilot-only) | No | Path, array, or `{ paths, exclusive: true }` to disable built-ins |
| `homepage` | Both (independent) | Both (independent) | Documentation URL; not required to be identical |
| `repository` | Both (independent) | Both (independent) | Source repo URL |
## Non-Default Optional Fields
### `homepage`
Documentation or project page URL. Shown in the plugin manager. Independent in each manifest — the two values do not need to match.
```json
// Copilot plugin.json
{ "homepage": "https://example.com/docs" }
// CC .claude-plugin/plugin.json
{ "homepage": "https://example.com/docs" }
```
### `repository`
Source repository URL. Independent in each manifest.
```json
{ "repository": "https://git.example.com/owner/repo" }
```
### `category` (Copilot-only)
Marketplace browsing category. Single string. Copilot manifest only.
```json
{ "category": "developer-tools" }
```
### `tags` (Copilot-only)
Additional taxonomy tags for Copilot marketplace browsing. Distinct from `keywords`.
```json
{ "tags": ["testing", "ci"] }
```
### `extensions` (Copilot-only)
Path to extension files, an array of paths, or an object. Use `{ "paths": [...], "exclusive": true }` to disable built-in extensions.
```json
{ "extensions": "extensions/" }
// or
{ "extensions": { "paths": ["extensions/"], "exclusive": true } }
```
### `lspServers`
Language Server Protocol configuration. Supported in both Copilot and CC manifests.
```json
{ "lspServers": ".lsp.json" }
```
### `outputStyles` (CC-only)
Path to output styles directory. Claude Code manifest only.
```json
{ "outputStyles": "styles/" }
```
### `experimental.themes` (CC-only)
Path to themes directory. Claude Code manifest only. Experimental — may change.
```json
{ "experimental": { "themes": "themes/" } }
```
### `experimental.monitors` (CC-only)
Path to `monitors.json`. Claude Code manifest only. Experimental.
```json
{ "experimental": { "monitors": "monitors.json" } }
```
### `dependencies` (CC-only)
Plugin dependencies. Each entry is a string (plugin name) or `{ "name": "<name>", "version": "<semver>" }`.
```json
{
"dependencies": [
"base-tools",
{ "name": "data-tools", "version": "^2.0.0" }
]
}
```
### `commands` (legacy, both)
Explicit list of `.md` command file paths. Deprecated in favour of `skills/`. Use `skills` instead for new plugins.
## Version Parity Convention (ADR-0016)
The `version` field must be present and identical in both manifests at all times. This is a hard invariant enforced by `/plugin-author` on every create, update, and release operation.
- If only the CC manifest had `version` before this convention was introduced, backfill the Copilot manifest immediately.
- Never change `version` in one manifest without changing it in the other in the same edit pass.
- The RELEASE flow bumps both manifests simultaneously before tagging.

View File

@@ -0,0 +1,50 @@
---
source_keys:
- context7-websites-code-claude
- claude-code-plugins-docs
- github-cli-plugin-reference
- github-plugins-creating
- github-plugins-finding-installing
---
# Sources
## context7-websites-code-claude
- **URL:** context7:/websites/code_claude
- **Research doc:** plugins/kyberforge/docs/research/docs/claude-code-plugins/sources.md
- **Description:** Official Claude Code documentation site indexed by Context7 — plugin manifest schema, marketplace JSON format, `claude plugin` CLI commands, validation, tagging
- **Contributing files:** SKILL.md, references/manifest-fields.md
- **Status:** `extracted`
## claude-code-plugins-docs
- **URL:** https://code.claude.com/docs/en/plugins
- **Research doc:** plugins/kyberforge/docs/research/docs/claude-code-plugins/sources.md
- **Description:** Official Claude Code plugin authoring guide — plugin structure, CC manifest fields (`displayName`, `author.url`, `version`, `outputStyles`, `experimental`), marketplace submission, `claude plugin tag`
- **Contributing files:** SKILL.md, references/manifest-fields.md
- **Status:** `extracted`
## github-cli-plugin-reference
- **URL:** https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-plugin-reference
- **Research doc:** plugins/kyberforge/docs/research/docs/github-copilot-plugins/sources.md
- **Description:** Full Copilot CLI plugin reference — `plugin.json` schema (all fields, types, constraints), marketplace.json schema, CLI commands, manifest lookup order
- **Contributing files:** SKILL.md, scripts/new-plugin.sh, references/manifest-fields.md
- **Status:** `extracted`
## github-plugins-creating
- **URL:** https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/plugins-creating
- **Research doc:** plugins/kyberforge/docs/research/docs/github-copilot-plugins/sources.md
- **Description:** How-to for creating Copilot CLI plugins — plugin structure, Copilot manifest fields, development lifecycle, hooks format, MCP config
- **Contributing files:** SKILL.md, scripts/new-plugin.sh
- **Status:** `extracted`
## github-plugins-finding-installing
- **URL:** https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/plugins-finding-and-installing
- **Research doc:** plugins/kyberforge/docs/research/docs/github-copilot-plugins/sources.md
- **Description:** Finding and installing Copilot CLI plugins — install spec formats, marketplace registration, `copilot plugin` CLI commands
- **Contributing files:** SKILL.md
- **Status:** `extracted`