[BUG] Marketplace name is derived from the bare repo name, so any two `*/skills` repos collide

Status Open
Reported on v2.1.274
Maintainer reply None cached
Activity 1 comment · opened Sep 17, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report
  • [x] I am using the latest version of Claude Code

What's Wrong?

When a GitHub repo is connected as a marketplace on the web, its name is derived from the bare repo name, with the owner discarded, and before the repo is synced. Since marketplace names must be unique per account and per organization, any two repos sharing a name — e.g. stepankuzmin/skills and mattpocock/skills — cannot both be added. Whoever adds second gets marketplace_name_taken.

There is no workaround short of renaming one of the repos, which the affected user often does not control. skills is close to the default name for an agent-skills repo, so collisions are common rather than exotic.

The name is repo-derived, and assigned before sync. The record created when adding stepankuzmin/skills:

{
  "id": "marketplace_01PbhYVb5oXLXudTdqv7M6uZ",
  "name": "skills",
  "description": "stepankuzmin/skills",
  "source_url": "https://github.com/stepankuzmin/skills",
  "sync_status": "in_progress",
  "last_synced_sha": null,
  "sync_errors": null
}

Two things follow:

  • name is skills, but that repo's .claude-plugin/marketplace.json declares "name": "stepankuzmin", and has in every commit that ever touched the file. The name cannot have come from the manifest.
  • sync_status is in_progress with last_synced_sha: null. The repo had not been cloned yet, so the manifest was not readable at the point uniqueness was enforced.

The uniqueness check runs against a provisional, owner-stripped name, and the manifest's name field is ignored at the one moment it matters. stepankuzmin/skills and mattpocock/skills are already unambiguous as a pair. Only the truncation to skills manufactures the conflict.

Related: the CLI uses a different rule. claude plugin marketplace add (2.1.274) resolves the name from the manifest instead:

$ claude plugin marketplace add stepankuzmin/skills
√ Successfully added marketplace: stepankuzmin

And on a name collision it does not error, it silently replaces the existing entry (previously reported in #44042, closed as inactive without a fix). So the two surfaces disagree on both the name source and the collision behavior:

| | name source | on collision |
| --- | --- | --- |
| CLI | manifest name | silently overwrites |
| Web / API | bare repo name, pre-sync | rejects with marketplace_name_taken |

What Should Happen?

Two marketplaces from distinctly-named repos should coexist. Any of:

  1. Namespace the derived name as owner/repo, which is already unique.
  2. Clone and read the manifest name before enforcing uniqueness, making the declared name authoritative on both surfaces.
  3. Let the user supply a name at add time.

Independently, and cheap regardless of which is chosen: the error should say which name was taken and what the conflicting marketplace's source_url is. As written it gives the user nothing to act on, and does not even reveal that the offending name is skills rather than the manifest's declared name.

Error Messages/Logs

{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "A marketplace with this name already exists.",
    "details": {
      "error_visibility": "user_facing",
      "error_code": "marketplace_name_taken"
    }
  }
}

Steps to Reproduce

  1. On Claude Code Web, add https://github.com/stepankuzmin/skills as a marketplace. Succeeds, stored as name: "skills".
  2. Add https://github.com/mattpocock/skills. Fails with marketplace_name_taken.
  3. Reverse the order and the failure moves to the other repo. Reproduced on both a personal account and an organization.

Neither repo's marketplace.json declares "name": "skills".

Is this a regression?

I don't know

Claude Code Version

2.1.274

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Other

Additional Information

Claude Code Web (personal account and organization) plus CLI 2.1.274 on macOS.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗