feat: split MCP plugins, add per-target restrictions, add external-source plugins #4

Merged
rootiest merged 1 commits from feat-split-mcp-plugins-and-targets into main 2026-08-25 00:48:43 +00:00
Owner

Summary

  • Splits MCP server config out of the bundled skills plugin into standalone github-mcp/gitea-mcp plugins, and adds a targets restriction (whole-plugin and per-skill) so a plugin/skill can be scoped to just claude-code or agy.
  • Adds a new external field to plugin.json: a target-keyed map of Claude Code marketplace source objects. When set, the generator emits that source (e.g. a GitHub repo) verbatim in marketplace.json instead of a local ./dist/... path — nothing is copied or vendored, and installs always fetch the current upstream version.
  • Adds caveman (JuliusBrussee/caveman) and ponytail (DietrichGebert/ponytail) as external-source plugins, installable through this same marketplace. Claude Code-only — agy has no external-source mechanism, and both plugins' hooks/MCP assume Claude Code's plugin runtime.
  • README updated to document both features and the two new plugins.

Test plan

  • python3 scripts/generate_plugins.py --check passes
  • python3 scripts/generate_plugins.py regenerates .claude-plugin/marketplace.json cleanly, with caveman/ponytail as external GitHub sources and no local dist/claude-code or dist/agy output for them
  • /plugin marketplace update then /plugin install caveman@rootiest-ai / /plugin install ponytail@rootiest-ai in a live Claude Code session
## Summary - Splits MCP server config out of the bundled skills plugin into standalone `github-mcp`/`gitea-mcp` plugins, and adds a `targets` restriction (whole-plugin and per-skill) so a plugin/skill can be scoped to just `claude-code` or `agy`. - Adds a new `external` field to `plugin.json`: a target-keyed map of Claude Code marketplace `source` objects. When set, the generator emits that source (e.g. a GitHub repo) verbatim in `marketplace.json` instead of a local `./dist/...` path — nothing is copied or vendored, and installs always fetch the current upstream version. - Adds `caveman` ([JuliusBrussee/caveman](https://github.com/JuliusBrussee/caveman)) and `ponytail` ([DietrichGebert/ponytail](https://github.com/DietrichGebert/ponytail)) as external-source plugins, installable through this same marketplace. Claude Code-only — agy has no external-source mechanism, and both plugins' hooks/MCP assume Claude Code's plugin runtime. - README updated to document both features and the two new plugins. ## Test plan - [x] `python3 scripts/generate_plugins.py --check` passes - [x] `python3 scripts/generate_plugins.py` regenerates `.claude-plugin/marketplace.json` cleanly, with `caveman`/`ponytail` as external GitHub sources and no local `dist/claude-code` or `dist/agy` output for them - [x] `/plugin marketplace update` then `/plugin install caveman@rootiest-ai` / `/plugin install ponytail@rootiest-ai` in a live Claude Code session
rootiest added 1 commit 2026-08-25 00:47:36 +00:00
feat: add external-source plugins for third-party caveman/ponytail
Generate plugin manifests / generate (pull_request) Skipped
Generate plugin manifests / validate (pull_request) Successful in 16s
37d6783ea4
Lets a plugin.json declare an `external` target->source map instead of
carrying local content, so the generator emits that Claude Code
marketplace source (e.g. a GitHub repo) verbatim rather than a local
dist path. Adds caveman and ponytail as external entries, installed
straight from their upstream repos with nothing vendored or copied.
Claude Code-only for now — agy has no equivalent external-source
mechanism, and both plugins' hooks/MCP assume Claude Code's runtime.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014YVWWAnvR5TDQzmfY3RXG9
rootiest merged commit 497fbabbbd into main 2026-08-25 00:48:43 +00:00
rootiest deleted branch feat-split-mcp-plugins-and-targets 2026-08-25 00:48:44 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: rootiest/rootiest-ai#4