Skip to content

feat: add plugin marketplace published from source via dist branch - #831

Open
Marinski wants to merge 1 commit into
msitarzewski:mainfrom
Marinski:main
Open

feat: add plugin marketplace published from source via dist branch#831
Marinski wants to merge 1 commit into
msitarzewski:mainfrom
Marinski:main

Conversation

@Marinski

@Marinski Marinski commented Sep 3, 2026

Copy link
Copy Markdown

Screenshots

Claude Code
Screenshot 2026-09-03 235011

VS Code
image

Opencode (needs extra plugin to enable support for agents and skills auto discovery from Claude/Codex/VSCode etc. https://github.com/Marinski/opencode-skill-autodiscovery)

  • as slash command
image
  • tab-switched
image

Summary

Adds a Claude-format plugin marketplace: each division ships as an installable
skills plugin (agency-<division>) for Claude Code, Claude Desktop, VS Code
(Agent Plugins, Preview), and GitHub Copilot CLI.

Per-division layout:

  • skills/<stem>/SKILL.md — portable Agent Skill (kebab-case name matching the
    dir, required by VS Code; description taken from the agent frontmatter).
  • agents/<stem>.md — byte-identical copy of the source agent, usable as a
    Claude Code sub-agent.
  • README.md — per-plugin readme for VS Code's detail pane.
  • .claude-plugin/plugin.json — identity metadata only (no component-path
    fields; the runtimes discover skills/ and agents/ by default directory).

Source/dist split (matching the repo's "Committed build output" rule in
CONTRIBUTING):

  • The generated plugins/ tree and .claude-plugin/marketplace.json are never
    committed to main. They are gitignored and published by CI to the plugins
    dist branch, so consumers point at <owner>/agency-agents#plugins.
  • Division folders stay the single source of truth, byte-checked by the
    validator.

Changelist

  • scripts/build-marketplace.py — generates the dist from divisions.json and
    the on-disk roster.
  • scripts/check-plugin-marketplace.sh — validates a fresh temp build and
    guards that main never tracks generated output.
  • scripts/publish-marketplace.sh — builds, validates, and force-publishes the
    dist to the plugins branch.
  • .github/workflows/check-plugin-marketplace.yml — PR gate (fresh temp build +
    claude plugin validate + registration smoke test).
  • .github/workflows/publish-plugin-marketplace.yml — publish the dist on push
    to main.
  • scripts/check-divisions.sh — treats plugins/ as non-division output.
  • .gitattributes — keeps generated .claude-plugin JSON LF on all platforms.
  • Docs (README Option 5, integrations, CONTRIBUTING) updated for the #plugins
    consumption path.

Verification

  • Single commit on top of current upstream main (5457373); no merge commits.
  • No agent sources or convert.sh outputs are touched, so
    test-convert-outputs.sh is unaffected (no manifest drift from this PR).
  • Fork CI green on the head commit: divisions, tools, runbooks, plugin-marketplace
    consistency (incl. claude plugin validate + registration smoke test),
    test-installer, and the publish job.

Adds a Claude-format plugin marketplace: each division ships as an
installable skills plugin (agency-<division>) for Claude Code, Claude
Desktop, VS Code (Agent Plugins, Preview), and GitHub Copilot CLI.

Layout per division:
- skills/<stem>/SKILL.md — portable Agent Skill (kebab-case name matching
  the dir, required by VS Code; description from the agent frontmatter).
- agents/<stem>.md — byte-identical copy of the source agent, usable as a
  Claude Code sub-agent.
- README.md — per-plugin readme for VS Code's detail pane.
- .claude-plugin/plugin.json — identity metadata only (no component path
  fields; the runtimes discover skills/ and agents/ by default directory).

Source/dist split: the generated plugins/ tree and
.claude-plugin/marketplace.json are never committed to main. They are
gitignored and published by CI to the plugins dist branch, so consumers
point at <owner>/agency-agents#plugins. Division folders stay the single
source of truth, byte-checked by the validator.

- scripts/build-marketplace.py — generates the dist from divisions.json
  and the on-disk roster.
- scripts/check-plugin-marketplace.sh — validates a fresh temp build and
  guards that main never tracks generated output.
- scripts/publish-marketplace.sh — builds, validates, and force-publishes
  the dist to the plugins branch.
- .github/workflows/check-plugin-marketplace.yml — PR gate (fresh temp
  build + claude plugin validate + registration smoke test).
- .github/workflows/publish-plugin-marketplace.yml — publish the dist on
  push to main.
- check-divisions.sh — treats plugins/ as non-division output.
- .gitattributes — keep generated .claude-plugin JSON LF on all platforms.
- Docs (README Option 5, integrations, CONTRIBUTING) updated for the
  #plugins consumption path.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant