Consuming Third-Party Marketplaces

Consuming Third-Party Marketplaces

AIWG can ingest plugins from any supported marketplace and deploy them across all configured providers. This document describes the design and implementation of the consumer side of the marketplace system.

Related issue: #787 (consumer side of #783)

Status: Design specification + scaffold implementation


Concept

Today `aiwg use <framework>` deploys AIWG's own bundled frameworks. This extension makes AIWG a universal adapter: install a plugin from any marketplace, deploy it everywhere.

aiwg install <source>:<package>      # fetch from marketplace
aiwg use <package> --provider <p>    # deploy across configured providers

Key property: AIWG already deploys to 11 providers. If it can also ingest from multiple marketplace sources, any compatible plugin from any supported marketplace becomes deployable everywhere — install once, deploy everywhere.


Supported Marketplace Sources

SourceIdentifier formatInstall mechanism
ClawHub`clawhub:<owner>/<package>`ClawHub CLI or API
Cursor`cursor:<publisher>.<package>`cursor.com API (partner-only, local cache fallback)
Codex`codex:<package>`Read from `.agents/plugins/marketplace.json`
Claude Code`claude:<user>/<repo>#<plugin>`Git clone + `.claude-plugin/`
Git (generic)`git:<url>`Git clone + manifest detection

Install + Deploy Flow

aiwg install clawhub:aiwg/sdlc
  │
  ├── Detect source adapter (clawhub)
  ├── Fetch from ClawHub
  ├── Validate manifest (name, version, capabilities, namespace)
  ├── Cache locally: ~/.aiwg/marketplace-cache/clawhub/aiwg/sdlc/2026.4.0/
  └── Report: "Installed [email protected] from ClawHub"

aiwg use aiwg-sdlc --provider claude
  │
  ├── Read from ~/.aiwg/marketplace-cache/
  ├── Transform to Claude Code format (reuse existing smiths)
  ├── Deploy to .claude/agents/, .claude/commands/, etc.
  ├── Run collision detector (third-party = warn severity)
  └── Report deployment

Architecture

MarketplaceSource interface

Each source adapter implements a common interface:

interface MarketplaceSource {
  /** Source identifier (e.g. 'clawhub', 'cursor', 'codex', 'claude', 'git') */
  readonly source: string;

  /** Fetch a package by identifier */
  fetch(packageId: string, version?: string): Promise<PackageBundle>;

  /** Search the marketplace */
  search(query: string, options?: SearchOptions): Promise<PackageSummary[]>;

  /** Validate a package manifest against the source's schema */
  validate(manifest: unknown): ValidationResult;

  /** List available versions of a package */
  getVersions(packageId: string): Promise<string[]>;
}

interface PackageBundle {
  /** Normalized AIWG-internal metadata */
  metadata: {
    name: string;
    version: string;
    namespace: string;       // 'aiwg' or third-party
    source: string;          // marketplace source
    description: string;
    license: string;
  };
  /** Artifacts in AIWG-internal layout */
  artifacts: {
    agents?: string[];       // paths to agent files
    commands?: string[];
    skills?: string[];
    rules?: string[];
    behaviors?: string[];
  };
  /** Raw manifest from the source marketplace (for update detection) */
  rawManifest: Record<string, unknown>;
}

Source adapters

Implementation location: `src/marketplace/sources/<source>.ts`

SourceAdapter fileStatus
ClawHub`src/marketplace/sources/clawhub.ts`Scaffold (fetch + validate)
Cursor`src/marketplace/sources/cursor.ts`Scaffold (validate only — API submission partner-only)
Codex`src/marketplace/sources/codex.ts`Scaffold (read local marketplace.json)
Claude Code`src/marketplace/sources/claude-code.ts`Scaffold (git clone)
Git (generic)`src/marketplace/sources/git.ts`Scaffold (clone + manifest detection)

Each adapter handles:

  • Source-specific fetch (git clone, API call, local file read)
  • Manifest parsing and normalization to AIWG's internal format
  • Version resolution (SHA, semver, tag)
  • Rate limiting / auth (if the source requires it)

Local cache

~/.aiwg/marketplace-cache/
├── clawhub/
│   └── aiwg/
│       └── sdlc/
│           ├── 2026.4.0/
│           │   ├── manifest.json      # normalized AIWG manifest
│           │   ├── raw-manifest.json  # original source manifest
│           │   ├── agents/
│           │   ├── commands/
│           │   └── skills/
│           └── 2026.3.0/              # older version
├── cursor/
│   └── some-publisher/
│       └── some-plugin/
│           └── 1.2.0/
├── codex/
├── claude/
└── git/

Cache invalidation:

  • Version-based: new version = new cache entry (old versions retained for rollback)
  • Manual: `aiwg cache clean <package>` removes a specific package
  • Age-based: optional TTL via `aiwg cache clean --older-than 30d`

Namespace isolation

Third-party plugins install under their own namespace, not `aiwg/`:

{baseDir}/{namespace}/{namespace}-{name}/SKILL.md

Examples:

  • `.claude/skills/aiwg/aiwg-sdlc/SKILL.md` — AIWG-owned
  • `.claude/skills/acme/acme-auth-toolkit/SKILL.md` — third-party

The collision detector (`src/smiths/skillsmith/collision-detector.js`) handles namespace isolation:

CaseSeverityBehavior
AIWG file overwriting AIWG fileinfoOverwrite silently
Third-party file overwriting AIWG filewarnPrompt user before overwrite
Third-party file overwriting third-party filewarnPrompt user before overwrite
First install (no existing file)n/aInstall cleanly

CLI Commands

CommandDescription
`aiwg install <source>:<package>`Fetch and cache a marketplace plugin
`aiwg install <source>:<package> --deploy`Fetch, cache, and deploy to all configured providers
`aiwg install <source>:<package> --provider <p>`Fetch, cache, and deploy to specific provider
`aiwg uninstall <package>`Remove cached plugin + deployed artifacts
`aiwg marketplace search <query>`Search across all configured marketplaces
`aiwg marketplace list`List installed marketplace plugins
`aiwg cache list`List cached marketplace entries
`aiwg cache clean [--package <name>] [--older-than <duration>]`Clean cache

Manifest Normalization

Each source has its own manifest format. The consumer normalizes to AIWG's internal format on ingest.

Normalization rules

Source fieldAIWG internal fieldNotes
`name` (all sources)`metadata.name`Preserve dashes (e.g. `aiwg-sdlc`)
`version``metadata.version`Use SemVer; convert non-semver to pre-release tags
`publisher` (Cursor) / `author` (others)`metadata.publisher`Normalized string
`contents` / `entry` / inferred`artifacts.*`Map to AIWG's agents/commands/skills/rules/behaviors
Plugin-specific fields`metadata.sourceSpecific`Preserved for update detection

Validation

Each source adapter validates:

  • Required fields present
  • Version format (semver or source-specific)
  • Namespace collision with `aiwg/` (third-party plugins cannot claim the `aiwg` namespace)
  • File paths in manifest resolve to actual files in the package

Integration with `aiwg use` Pipeline

Marketplace plugins flow through the same smith pipeline as AIWG frameworks:

aiwg use aiwg-sdlc --provider claude
  │
  ├── Lookup: is "aiwg-sdlc" a bundled framework or marketplace plugin?
  │   ├── bundled → read from agentic/code/frameworks/
  │   └── marketplace → read from ~/.aiwg/marketplace-cache/
  │
  ├── Apply provider transformations (reuse existing smiths)
  │   ├── agentsmith → transform agent format
  │   ├── skillsmith → transform skill format
  │   └── [provider].mjs → deploy to provider-specific paths
  │
  └── Deploy + collision check + manifest update

This means marketplace plugins automatically benefit from AIWG's multi-provider deployment — install once from any marketplace, get deployment to all 11 providers.


Implementation Status

This is a design document + scaffold. The full implementation involves:

Phase 1 (scaffold — this commit)

  • [x] Design document (this file)
  • [x] Interface definitions
  • [x] Source adapter skeletons
  • [ ] CLI command registration

Phase 2 (MVP)

  • [ ] ClawHub source adapter (full fetch + validate)
  • [ ] Git source adapter (clone + manifest detection)
  • [ ] `aiwg install` command
  • [ ] `aiwg uninstall` command
  • [ ] Local cache management
  • [ ] Collision detector integration

Phase 3 (expanded coverage)

  • [ ] Codex source adapter (read local marketplace.json)
  • [ ] Claude Code source adapter (git clone)
  • [ ] Cursor source adapter (validate-only, no API)
  • [ ] `aiwg marketplace search` across all sources

Phase 4 (polish)

  • [ ] Auto-update via `FORCE_AUTOUPDATE_PLUGINS` equivalent
  • [ ] Version pinning and rollback
  • [ ] Package signing / verification
  • [ ] Marketplace ranking / trust scoring

Open Design Questions

1. Cross-source namespace conflicts: If a ClawHub plugin named `foo/bar` and a Cursor plugin named `foo.bar` are both installed, how do we resolve namespace conflicts? Proposal: source prefix in the namespace — `clawhub/foo-bar` vs `cursor/foo-bar`.

2. Dependency chains: A marketplace plugin might depend on another marketplace plugin. Do we resolve transitive dependencies automatically, or require explicit install? Proposal: explicit for MVP; automatic resolution in later phase.

3. Update policy: Auto-update on `aiwg refresh` or explicit `aiwg update <package>`? Proposal: explicit for MVP; auto-update as opt-in via config flag.

4. Signing: Marketplace plugins could be signed to prevent supply chain attacks. MVP: no signing, rely on source reputation. Later: GPG signature verification.


  • #783 — Producer side (publishing AIWG to marketplaces)
  • #787 — This issue (consumer side)
  • ADR-016 — Claude Code plugin distribution architecture
  • `docs/providers/marketplace.md` — Producer-side marketplace reference
  • `src/smiths/skillsmith/collision-detector.js` — Existing collision detection