Skip to content

Marketplace add source parity with the Anthropic spec #676

@Vicente-Pastor

Description

@Vicente-Pastor

Summary

Bring APM's apm marketplace add to parity with Anthropic's spec by accepting all four source shapes:

Source shape Example Today
owner/repo (GitHub) apm marketplace add anthropic/skills
Git URL (any host, with #ref) apm marketplace add https://gitlab.com/.../plugins.git#v1.0.0
Local path (dir or file) apm marketplace add ./vendor/internal-marketplace
Remote marketplace.json URL apm marketplace add https://example.com/marketplace.json

Phase 2 covers auth integration via AuthResolver for private sources (the gap originally raised in #692).

.well-known/agent-skills/ (Cloudflare RFC) is deferred behind a clear external trigger: the RFC reaches v1.0, OR the upstream agentskills.io PR (#254) merges, OR production adoption shows up. See discussion in #676 (comment).

Why

Anthropic's /plugin marketplace add already accepts these four source shapes, and it's the closest thing the plugin-marketplace world has to a settled spec. Three missing source shapes against that spec is the real, achievable gap to close — not a draft RFC. Closing the parity gap unlocks:

  • Air-gapped / enterprise workflows: register marketplaces from internal git mirrors, local checkouts, or a hosted JSON file behind corporate auth.
  • Non-GitHub publishers (GitLab, Bitbucket, self-hosted): same UX as the GitHub case.
  • Lower friction for adopters who don't want to publish a full git repo just to share a curated catalog — a single marketplace.json URL is enough.

Phase 1 — source parity (this issue)

Accept all four source shapes in apm marketplace add. Lockfile records canonical source + content digest for reproducibility.

Building on the foundation in #691 by @Vicente-Pastor:

  • MarketplaceSource generalization (marketplace/models.py)
  • ETag / conditional-refresh (marketplace/client.py)
  • Archive safety / zip-slip protection (marketplace/archive.py)
  • Auth-first client design
  • Lockfile provenance fields (deps/lockfile.py)
  • ~364 tests across 8 test files

The destination contract changes from the agent-skills index format to Anthropic's marketplace.json schema, but most of the plumbing transfers cleanly.

Phase 2 — auth integration (follow-on)

Wire AuthResolver into URL-based marketplace fetch so private git URLs and authenticated marketplace.json endpoints work end-to-end. Tracked in #692.

Reference

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestmarketplaceMarketplace federation: marketplace.json publishing, sourcing, and federationneeds-designNeeds discussion or design before implementationpriority/highShips in current or next milestone

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions