Skip to content

Proposal: adopt APM (microsoft/apm) as the canonical authoring substrate for marketplace.json #1569

@danielmeppiel

Description

@danielmeppiel

Proposal: adopt APM (microsoft/apm) as the canonical authoring substrate

Why this matters

awesome-copilot today maintains 53 hand-authored plugins/<name>/.github/plugin/plugin.json files plus a custom Node aggregator (eng/generate-marketplace.mjs) to glue them into .github/plugin/marketplace.json. The aggregator format is repo-specific; new contributors have to learn awesome-copilot's bespoke build chain on top of the Claude/Copilot plugin spec itself.

APM (Agent Package Manager) is emerging as the canonical authoring substrate for Copilot plugins/skills/agents across the GitHub + Microsoft ecosystem. It defines:

  • a portable apm.yml manifest format (with a marketplace: block for plugin marketplace authors)
  • an apm pack command that emits Anthropic-spec marketplace.json and plugin.json deterministically
  • a dependency + lockfile model so primitives can be composed across repos

awesome-copilot is the highest-leverage public showcase for that authoring story. Adopting APM here makes the canonical path concrete for every contributor who lands on this repo, and lets the rest of the ecosystem point at it as the reference implementation.

What is being proposed

A single PR (linked below) that:

  1. Adds a root apm.yml declaring all 53 local plugins under marketplace.packages: (each with source: ./plugins/<name>, version, description mirroring the existing plugin.json values).
  2. Wires npm run plugin:generate-marketplace to apm pack (with a tiny eng/merge-external-plugins.mjs bridge that keeps plugins/external.json flowing through unchanged for now).
  3. Preserves the legacy generator as npm run plugin:generate-marketplace:legacy so maintainers can A/B during the transition.
  4. Documents the APM CLI prerequisite in CONTRIBUTING.md and updates eng/README.md to point at apm pack as canonical.

Output parity is 1:1 by plugin name (54 entries: 53 local + 1 external azure). The only deltas vs the legacy output are key ordering and the source: field shape (./plugins/x vs bare x) -- both are valid under the Anthropic spec given the existing metadata.pluginRoot setting.

Per-plugin plugin.json files and plugins/external.json are NOT touched in this PR. No breaking changes for plugin authors.

Follow-ups (not in the initial PR; tracked here for visibility)

  • F1 -- per-plugin migration: replace each plugins/<x>/.github/plugin/plugin.json with a per-plugin apm.yml, generated via apm pack --format plugin at build time. Eliminates 53 hand-authored manifests.
  • F2 -- retire eng/generate-marketplace.mjs: once F1 lands and parity is confirmed across releases, delete the legacy generator.
  • F3 -- native external sources: declare external plugins inside apm.yml using object-form source: and retire both plugins/external.json and eng/merge-external-plugins.mjs.

Each follow-up is independently shippable and can be sequenced as the maintainers prefer.

Why now

APM is a young project but already shipping (v0.10.x). Landing awesome-copilot on it gives both projects a network effect: APM gets a flagship marketplace built on its substrate; awesome-copilot gets a canonical, ecosystem-wide authoring surface that contributors can transfer to other repos.

PR

The implementation PR will be linked here once opened.

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions