Skip to content

Fix marketplace.json source field format — all 13 plugins fail to register #16

Description

@AnExiledDev

Bug

All 13 devs-marketplace plugins fail to install during container post-start because claude plugin marketplace add rejects marketplace.json with a schema validation error.

Error:

Failed to parse marketplace file: Invalid schema: plugins.0.source: Invalid input, plugins.1.source: Invalid input, ...

Impact: The marketplace never registers → claude plugin install X@devs-marketplace fails for all 13 plugins → none of the hooks, skills, agents, or LSP configs load.

Root Cause

Introduced in: PR #2 (v1.14.0, commit 2c26e3e)

PR #2 refactored marketplace.json to add a top-level metadata.pluginRoot: "./plugins" field and stripped the ./plugins/ prefix from all source entries, changing them from "source": "./plugins/codeforge-lsp" to "source": "codeforge-lsp". The assumption was that pluginRoot would serve as the base path resolver.

Claude Code's marketplace schema validator does not support pluginRoot-based resolution — the source field must be a self-contained relative path starting with ./. The official Anthropic marketplace (claude-plugins-official) uses "source": "./plugins/plugin-name" format.

PR #7 (prompt-snippets) and PR #10 (git-workflow) followed the same bare-name pattern when adding new plugins.

Fix

File: .devcontainer/plugins/devs-marketplace/.claude-plugin/marketplace.json

Change all 13 source fields from bare names to ./plugins/-prefixed relative paths:

Current (broken) Fixed
"source": "codeforge-lsp" "source": "./plugins/codeforge-lsp"
"source": "ticket-workflow" "source": "./plugins/ticket-workflow"
"source": "notify-hook" "source": "./plugins/notify-hook"
"source": "dangerous-command-blocker" "source": "./plugins/dangerous-command-blocker"
"source": "protected-files-guard" "source": "./plugins/protected-files-guard"
"source": "agent-system" "source": "./plugins/agent-system"
"source": "skill-engine" "source": "./plugins/skill-engine"
"source": "spec-workflow" "source": "./plugins/spec-workflow"
"source": "session-context" "source": "./plugins/session-context"
"source": "auto-code-quality" "source": "./plugins/auto-code-quality"
"source": "workspace-scope-guard" "source": "./plugins/workspace-scope-guard"
"source": "prompt-snippets" "source": "./plugins/prompt-snippets"
"source": "git-workflow" "source": "./plugins/git-workflow"

No other fields need changing. The metadata, category, keywords, $schema, and owner fields all pass validation. The metadata.pluginRoot field is harmless (ignored by the validator).

Verified

Tested in the running container:

  • claude plugin marketplace add succeeds with ./plugins/ paths
  • claude plugin marketplace add fails with bare names (reproduces the bug)
  • ✅ All 13 plugin directories exist at plugins/devs-marketplace/plugins/
  • ✅ All 13 have valid .claude-plugin/plugin.json
  • ✅ All hook scripts exist at referenced paths
  • enabledPlugins in settings.json matches marketplace entries
  • MARKETPLACE_PATH resolution in setup-plugins.sh resolves correctly
  • ✅ JSON is syntactically valid after the fix

Fix applied on

Branch test-integration — commits modify marketplace.json and add a changelog entry under [Unreleased] > ### Fixed > #### Plugin Marketplace.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions