Skip to content

fix: correct .claude-plugin manifest schema (skills field, repository field) - #2

Open
christushealth wants to merge 1 commit into
astriaai:mainfrom
christushealth:fix/manifest-schema-validation
Open

fix: correct .claude-plugin manifest schema (skills field, repository field)#2
christushealth wants to merge 1 commit into
astriaai:mainfrom
christushealth:fix/manifest-schema-validation

Conversation

@christushealth

Copy link
Copy Markdown

Summary

  • .claude-plugin/marketplace.json: plugins[0].skills was an array of {name, path, invoke} objects. The marketplace schema expects a flat array of relative path strings (as used by other marketplaces registered in Anthropic's official/knowledge-work catalogs, e.g. box, coursera, netsuite). Changed to ["./astria-api", "./prompt-writing", ...].
  • .claude-plugin/plugin.json: repository used the npm-style {type, url} object. The plugin schema expects a plain URL string (as used by ast-grep, impeccable, context-mode's plugin.json). Changed to a bare string.

Why this matters

Both fields fail claude plugin validate on current Claude Code (tested on 2.1.210). Because validation fails before a useful error can be shown, /plugin install astria@astria surfaces a generic, misleading message: "This plugin uses a source type your Claude Code version does not support. Update Claude Code and try again." — implying the CLI is out of date, when it's actually these two manifest fields. Right now nobody can install this plugin via the marketplace flow.

Test plan

  • claude plugin validate . passes on the branch (was failing with plugins.0.skills: Invalid input, then repository: Invalid input: expected string, received object, before each respective fix)
  • claude plugin marketplace add <path> --scope local + claude plugin install astria@astria succeeds end-to-end and the plugin appears in claude plugin list
  • No functional/content changes — only manifest shape, so all skills/CLI/hooks behavior is unchanged

marketplace.json's plugins[0].skills declared per-skill objects
({name, path, invoke}), but the marketplace schema expects a flat
array of relative path strings (matching every other marketplace's
usage, e.g. box, coursera, netsuite). plugin.json's repository field
used the npm-style {type, url} object; the schema expects a plain
URL string (matching ast-grep/impeccable/context-mode's plugin.json).

Both mismatches make `claude plugin validate` fail, which surfaces to
installers as a generic "This plugin uses a source type your Claude
Code version does not support" error rather than a real schema error
-- confirmed via `claude plugin install astria@astria` failing on the
latest Claude Code (2.1.210) and `claude plugin validate .` pinpointing
both fields. Verified fixed: validate passes and a real
`claude plugin marketplace add` + `claude plugin install` round-trip
succeeds.
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