From claude-plugins-validation
Use when configuring a plugin to notify its marketplace after each release so Claude Code can auto-update users. Universal CI recipe for any plugin/marketplace pair. Loaded by plugin-creator and marketplace-fixer agents.
npx claudepluginhub emasoft/emasoft-plugins --plugin claude-plugins-validationThis skill is limited to using the following tools:
Configures the plugin side of the auto-notify chain: plugin push → notify
Suggests manual /compact at logical task boundaries in long Claude Code sessions and multi-phase tasks to avoid arbitrary auto-compaction losses.
Share bugs, ideas, or general feedback.
Configures the plugin side of the auto-notify chain: plugin push → notify
workflow → repository_dispatch → marketplace receiver → marketplace.json
bump → Claude Code sees the new version on next refresh. Works for any
plugin/marketplace pair with placeholder substitution only.
gh auth status green for the owner of BOTH reposrepo scope (or fine grained RW) — see
pat-secret-setup.mdrepository_dispatch: plugin-updated receiver (create
from receiver-workflow-template.md).claude-plugin/plugin.json with name + versionMARKETPLACE_PAT first (length only — never print the
value). If unset, walk the user through creating one and exporting it.scripts/set_marketplace_pat.py — never improvise
gh secret set. Full rules and the forbidden-patterns list in
pat-secret-setup.md.
uv run python scripts/set_marketplace_pat.py <plugin> <marketplace>
uv run python scripts/set_marketplace_pat.py --verify-only <plugin> <marketplace>
notify-marketplace.yml on the plugin repo from the template.receiver-workflow-template.md if missing.marketplace.json
bumped → Claude Code refresh sees the new version.Copy this checklist and track your progress:
MARKETPLACE_PATscripts/set_marketplace_pat.py (NEVER improvise gh secret set)--verify-onlynotify-marketplace.yml.github/workflows/notify-marketplace.yml + MARKETPLACE_PAT secret.github/workflows/update-plugin-version.yml + same secretversion
in .claude-plugin/marketplace.json| Symptom | Fix |
|---|---|
Bad credentials / 401 | Rotate PAT; re-run gh secret set --body on both repos |
Env var set but gh secret set fails 401/403 | unset MARKETPLACE_PAT, re-run skill, create fresh token |
| Dispatch never fires | Push to default branch; check paths: filter |
| 404 from dispatch API | Fix MARKETPLACE_OWNER / MARKETPLACE_REPO |
| Receiver never runs | Commit receiver workflow to marketplace default branch |
| Push rejected by branch protection | PAT owner must be a repo admin |
| Infinite loop | Add [skip ci] to receiver commit; exclude marketplace.json from notify paths |
Plugin claude-plugins-validation → marketplace Emasoft/emasoft-plugins:
[ -n "${MARKETPLACE_PAT:-}" ] && echo "reusing (${#MARKETPLACE_PAT} chars)"
uv run python scripts/set_marketplace_pat.py \
Emasoft/claude-plugins-validation Emasoft/emasoft-plugins
# Copy references/notify-workflow-template.md → .github/workflows/notify-marketplace.yml,
# fill MARKETPLACE_OWNER/MARKETPLACE_REPO, commit, push.
Any plugin-file push on default branch dispatches plugin-updated; the
receiver bumps marketplace.json with [skip ci].
Placeholders · Template A Push Trigger · Template B Release Tag Trigger · Why repository_dispatch · Curl Fallback · Troubleshooting
Placeholders · Layout A Receiver · Layout B Receiver · Payload Contract · Concurrency and Loops · Troubleshooting
Auto Detect From Environment · Why a PAT · Classic PAT Scopes · Fine Grained PAT · Creating the PAT · Storing the Secret · Verifying the Secret · Rotation · Renewal When Expired
Dry Run Without Cutting a Release · Observe the Plugin Side · Observe the Marketplace Side · Confirm marketplace.json Changed · Confirm Claude Code Sees the New Version · Troubleshooting · Rollback Procedure