Browse plugins UI shows empty for directory-based personal marketplaces

Resolved 💬 4 comments Opened Mar 31, 2026 by hiattp Closed Jun 2, 2026

Description

Directory-based personal marketplaces register correctly and appear as tabs in the Browse plugins UI, but no plugins are listed. The empty state message "When you add plugins to your marketplace, they will appear here." is shown despite the marketplace having valid plugins.

Root Cause

The marketplace add/remove operations use CCDMarketplacePluginManagerCLI (with useCoworkFlag: false), which writes to ~/.claude/plugins/known_marketplaces.json. However, the Browse plugins UI lists available plugins through a cowork manager that appends --cowork to the CLI command (claude plugin list --json --available --cowork), which reads from a separate known_marketplaces.json at ~/Library/Application Support/Claude/local-agent-mode-sessions/<session>/cowork_plugins/known_marketplaces.json.

The directory marketplace is never registered in the cowork known_marketplaces.json, so:

  • Marketplace tabs: Read from CLI path → marketplace tab appears ✓
  • Plugin listing: Read from cowork path → 0 plugins found ✗

Repro Steps

  1. Create a valid directory-based marketplace with .claude-plugin/marketplace.json and plugins with .claude-plugin/plugin.json
  2. Add it via Browse plugins → Personal → "+"
  3. Marketplace tab appears under Personal
  4. Click the marketplace tab — no plugins shown

Verification

# CLI path works — returns all plugins
claude plugin list --json --available | python3 -c "
import json, sys; d = json.load(sys.stdin)
print(len([p for p in d['available'] if 'chatham' in p['marketplaceName']]))
"
# Output: 11

# Cowork path (used by Browse UI) — returns 0
claude plugin list --json --available --cowork | python3 -c "
import json, sys; d = json.load(sys.stdin)
print(len([p for p in d['available'] if 'chatham' in p['marketplaceName']]))
"
# Output: 0

Expected Behavior

Plugins from directory-based personal marketplaces should appear in the Browse plugins UI, or the marketplace should be registered in both known_marketplaces.json files.

Environment

  • Claude Desktop App (macOS, Darwin 25.4.0, ARM)
  • Marketplace source type: directory

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗