Repository navigation
15 of 16 plugins omit .claude-plugin/plugin.json, so Claude Code namespaces their skills by marketplace commit SHA #1029
Description
Summary
15 of the 16 plugins ship their manifest only as plugins/<name>/plugin.json. Claude Code reads plugin metadata from plugins/<name>/.claude-plugin/plugin.json, so for those 15 it falls back to the marketplace's git commit SHA as both the plugin version and the skill/agent namespace.
dotnet-msbuild is the only plugin that also ships .claude-plugin/plugin.json (a byte-identical copy of its root plugin.json), and it is the only one Claude Code names correctly.
Evidence
Marketplace HEAD at the time of testing:
$ git rev-parse --short=12 HEAD
772c4424c3ea # 772c442 Merge pull request #955 ...
Manifest presence across the repo:
dotnet-advanced .claude-plugin:NO root plugin.json version:0.2.1
dotnet-ai .claude-plugin:NO root plugin.json version:0.1.5
dotnet-aspnetcore .claude-plugin:NO root plugin.json version:0.1.1
dotnet-blazor .claude-plugin:NO root plugin.json version:0.1.1
dotnet-data .claude-plugin:NO root plugin.json version:0.1.4
dotnet-diag .claude-plugin:NO root plugin.json version:0.1.1
dotnet-experimental .claude-plugin:NO root plugin.json version:0.1.1
dotnet-maui .claude-plugin:NO root plugin.json version:0.1.16
dotnet-msbuild .claude-plugin:yes root plugin.json version:0.1.7
dotnet-nuget .claude-plugin:NO root plugin.json version:0.1.0
dotnet-template-engine .claude-plugin:NO root plugin.json version:0.1.3
dotnet-test-migration .claude-plugin:NO root plugin.json version:0.1.6
dotnet-test .claude-plugin:NO root plugin.json version:0.2.14
dotnet-upgrade .claude-plugin:NO root plugin.json version:0.1.1
dotnet .claude-plugin:NO root plugin.json version:0.2.3
dotnet11 .claude-plugin:NO root plugin.json version:0.1.1
What Claude Code reports — note the version on line 1 of each:
$ claude plugin details dotnet-msbuild@dotnet-agent-skills
dotnet-msbuild 0.1.7
Comprehensive MSBuild and .NET build skills: ...
$ claude plugin details dotnet-nuget@dotnet-agent-skills
dotnet-nuget
NuGet and .NET package management: ...
claude plugin list shows the fallback directly — the declared versions in root plugin.json are not picked up:
dotnet-aspnetcore@dotnet-agent-skills Version: 772c4424c3ea
dotnet-nuget@dotnet-agent-skills Version: 772c4424c3ea
dotnet-test@dotnet-agent-skills Version: 772c4424c3ea
dotnet-upgrade@dotnet-agent-skills Version: 772c4424c3ea
dotnet@dotnet-agent-skills Version: 772c4424c3ea
dotnet-msbuild@dotnet-agent-skills Version: 0.1.7
Impact
The same fallback is used to namespace skills, so in the skill listing you get:
772c4424c3ea:convert-to-cpminstead ofdotnet-nuget:convert-to-cpm772c4424c3ea:dotnet-webapiinstead ofdotnet-aspnetcore:dotnet-webapidotnet-msbuild:binlog-failure-analysis— correct, because that plugin has the manifest
Two consequences:
- The prefix is a commit SHA, so it changes on every marketplace update. Anything that refers to a skill by qualified name — docs, project
CLAUDE.md/AGENTS.md, team conventions — breaks on the next/plugin marketplace update. - It is not discoverable which plugin a skill belongs to from its name alone.
The skills themselves work; this is metadata resolution only.
Relationship to #846 and #840
This looks like the same root cause as two already-closed issues, each fixed for one plugin rather than repo-wide:
- dotnet plugin's C# LSP never loads in Claude Code — manifest is at root plugin.json, but Claude reads lspServers only from .clau
[Content truncated due to length] #846 —
dotnetplugin's C# LSP not loading because Claude readslspServersfrom.claude-plugin/, not rootplugin.json dotnet-msbuildplugin: binlog MCP server not recognized by Claude Code #840 —dotnet-msbuildbinlog MCP server not recognized by Claude Code
dotnet-msbuild gained .claude-plugin/plugin.json and is now fully correct. dotnet gained a .lsp.json (which does fix the LSP — verified working here) but no .claude-plugin/plugin.json, so it still shows the SHA. The remaining 14 have neither.
Suggested fix
Add .claude-plugin/plugin.json for each plugin, mirroring what dotnet-msbuild already does. Since the two files are identical there, this is presumably a build/sync step that could be applied to all plugins at once and validated in CI, so new plugins don't reintroduce it.
Environment
- Claude Code, plugins installed via
/plugin marketplace add dotnet/skills - macOS 15 (Darwin 25.0.0), .NET SDK 10.0.302
- Marketplace at
772c4424c3ea
Activity
github-actions commentedon Aug 18, 2026
🎯 Issue Triage
Summary: 15 of 16 plugins lack a
.claude-plugin/plugin.jsonmanifest, so Claude Code falls back to using the marketplace's git commit SHA as the plugin version and skill/agent namespace instead of the declared version. This breaks skill references whenever the marketplace updates. Falls under repository infrastructure/build tooling.Type: bug
Assigned owners:
@AbhitejJohn@webreidi(default repo owners per CODEOWNERS*rule, since this is a repo-wide manifest sync issue rather than a single plugin).Confidence: Medium
Similar issues: Related to #1006 ("Adopt Agent Plugins 1.0"), which addresses standardizing plugin manifests across clients (including Claude Code compatibility) — this issue's fix may be subsumed by or coordinated with that broader migration. Not an exact duplicate.
Triage details
area-infrastructurewas chosen over any plugin-specific area label.*owners (@webreidi@AbhitejJohn)..claude-plugin/plugin.jsonper plugin should be a stopgap fix or handled as part of the broader Agent Plugins 1.0 adoption.