fix: use object-shaped author field and surface descriptions in marketplace.json #8

Merged
rootiest merged 1 commits from fix-plugin-author-schema-and-marketplace-descriptions into main 2026-08-25 04:21:05 +00:00
Owner

Summary

  • Every plugins/*/plugin.json had "author": "Rootiest" as a bare string, but Claude Code's plugin/marketplace schemas require an object ({"name": "..."}). This broke every plugin install with author: Invalid input: expected object, received string — reproduced installing mirror-it to user scope.
  • .claude-plugin/marketplace.json entries only carried name/source, dropping each plugin's description/author even though they exist on the plugin's own metadata — so the Discover UI showed a blank "Plugin details" pane before install.
  • Added a validate_author() check to scripts/generate_plugins.py's --check gate so a future plugin can't reintroduce a string-typed author.

Test plan

  • python3 scripts/generate_plugins.py --check passes (14 plugins, 2 targets)
  • python3 scripts/generate_plugins.py regenerated dist/claude-code/** and .claude-plugin/marketplace.json; diffed to confirm author is now an object and description/author appear on marketplace entries
  • All touched JSON files validated with json.load; generate_plugins.py compiles clean
  • Re-run /plugin install flow in Claude Code against this branch to confirm mirror-it installs without the manifest error and Discover shows its description

🤖 Generated with Claude Code

## Summary - Every `plugins/*/plugin.json` had `"author": "Rootiest"` as a bare string, but Claude Code's plugin/marketplace schemas require an object (`{"name": "..."}`). This broke every plugin install with `author: Invalid input: expected object, received string` — reproduced installing `mirror-it` to user scope. - `.claude-plugin/marketplace.json` entries only carried `name`/`source`, dropping each plugin's `description`/`author` even though they exist on the plugin's own metadata — so the Discover UI showed a blank "Plugin details" pane before install. - Added a `validate_author()` check to `scripts/generate_plugins.py`'s `--check` gate so a future plugin can't reintroduce a string-typed `author`. ## Test plan - [x] `python3 scripts/generate_plugins.py --check` passes (14 plugins, 2 targets) - [x] `python3 scripts/generate_plugins.py` regenerated `dist/claude-code/**` and `.claude-plugin/marketplace.json`; diffed to confirm `author` is now an object and `description`/`author` appear on marketplace entries - [x] All touched JSON files validated with `json.load`; `generate_plugins.py` compiles clean - [x] Re-run `/plugin` install flow in Claude Code against this branch to confirm `mirror-it` installs without the manifest error and Discover shows its description 🤖 Generated with [Claude Code](https://claude.com/claude-code)
rootiest added 1 commit 2026-08-25 04:15:49 +00:00
fix: use object-shaped author field and surface descriptions in marketplace.json
Generate plugin manifests / generate (pull_request) Skipped
Generate plugin manifests / validate (pull_request) Successful in 16s
8400f41419
Claude Code's plugin/marketplace schemas require author to be an object
({"name": ...}), not a bare string — installing any plugin from this
marketplace failed validation ("author: Invalid input: expected object,
received string"). Convert every plugins/*/plugin.json author field
accordingly, and add a build-time check so this can't regress.

Also propagate each plugin's description/author into the generated
marketplace.json entries (not just its own nested plugin.json), matching
Anthropic's official marketplace shape, so the Discover UI shows a
description before install instead of a blank "Plugin details" pane.
rootiest merged commit a5f907e9cf into main 2026-08-25 04:21:05 +00:00
rootiest deleted branch fix-plugin-author-schema-and-marketplace-descriptions 2026-08-25 04:21:05 +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#8