fix: use object-shaped author field and surface descriptions in marketplace.json
Generate plugin manifests / validate (pull_request) Successful in 16s
Generate plugin manifests / generate (pull_request) Skipped

Claude Code's plugin/marketplace schemas require author to be an object
({"name": ...}), not a bare string — installing any plugin from this
marketplace failed validation ("author: Invalid input: expected object,
received string"). Convert every plugins/*/plugin.json author field
accordingly, and add a build-time check so this can't regress.

Also propagate each plugin's description/author into the generated
marketplace.json entries (not just its own nested plugin.json), matching
Anthropic's official marketplace shape, so the Discover UI shows a
description before install instead of a blank "Plugin details" pane.
This commit is contained in:
2026-08-25 00:15:31 -04:00
parent f25f2e8abc
commit 8400f41419
27 changed files with 134 additions and 28 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "caveman",
"description": "Ultra-compressed communication mode from JuliusBrussee/caveman — cuts output tokens while keeping full technical accuracy. Installed straight from the upstream repo, not vendored here.",
"version": "1.0.0",
"author": "Rootiest",
"author": { "name": "Rootiest" },
"targets": ["claude-code"],
"external": {
"claude-code": {
+1 -1
View File
@@ -2,5 +2,5 @@
"name": "core-essentials",
"description": "Core cross-tool utilities, including delegation to the Antigravity CLI (agy) for grounded research and large multi-file audits.",
"version": "1.0.0",
"author": "Rootiest"
"author": { "name": "Rootiest" }
}
+1 -1
View File
@@ -2,5 +2,5 @@
"name": "date-time",
"description": "Retrieves the exact current date and time for time-sensitive queries, scheduling, duration calculations, and validating chronological context.",
"version": "1.0.0",
"author": "Rootiest"
"author": { "name": "Rootiest" }
}
+1 -1
View File
@@ -2,5 +2,5 @@
"name": "docs-sync-audit",
"description": "Analyzes repository delta since the last documentation update and synchronizes the Single Source of Truth (docs/, wiki, or README) with the current codebase state.",
"version": "1.3.0",
"author": "Rootiest"
"author": { "name": "Rootiest" }
}
+1 -1
View File
@@ -2,5 +2,5 @@
"name": "git-publish-workflow",
"description": "Automates branching, conventional commits, testing, and PR creation for uncommitted or staged work. Handles both independent and stacked PRs.",
"version": "1.2.0",
"author": "Rootiest"
"author": { "name": "Rootiest" }
}
+1 -1
View File
@@ -2,5 +2,5 @@
"name": "gitea-mcp",
"description": "Connects Claude Code/agy to a Gitea instance via the official gitea-mcp server, authenticated with GITEA_HOST/GITEA_ACCESS_TOKEN you set locally.",
"version": "1.0.0",
"author": "Rootiest"
"author": { "name": "Rootiest" }
}
+1 -1
View File
@@ -2,5 +2,5 @@
"name": "github-mcp",
"description": "Connects Claude Code/agy to GitHub via the official MCP server, authenticated with a GITHUB_PERSONAL_ACCESS_TOKEN you set locally.",
"version": "1.0.0",
"author": "Rootiest"
"author": { "name": "Rootiest" }
}
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "mattpocock-skills",
"description": "Matt Pocock's agent skills for real engineering from mattpocock/skills — grilling, spec/ticket flows, TDD, code review, domain modelling and more. Installed straight from the upstream repo, not vendored here.",
"version": "1.0.0",
"author": "Rootiest",
"author": { "name": "Rootiest" },
"targets": ["claude-code"],
"external": {
"claude-code": {
+1 -1
View File
@@ -2,5 +2,5 @@
"name": "mirror-it",
"description": "Configures a Gitea repository to automatically push-mirror its contents to GitHub using the tea CLI and jq.",
"version": "1.0.0",
"author": "Rootiest"
"author": { "name": "Rootiest" }
}
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "ponytail",
"description": "Lazy senior dev mode from DietrichGebert/ponytail — forces the simplest, shortest solution that actually works (YAGNI, stdlib first, no unrequested abstractions). Installed straight from the upstream repo, not vendored here.",
"version": "1.0.0",
"author": "Rootiest",
"author": { "name": "Rootiest" },
"targets": ["claude-code"],
"external": {
"claude-code": {
+1 -1
View File
@@ -2,5 +2,5 @@
"name": "readme-sync-audit",
"description": "Analyzes repository delta since the last documentation update and synchronizes the README.md with the current codebase state.",
"version": "1.2.0",
"author": "Rootiest"
"author": { "name": "Rootiest" }
}
+1 -1
View File
@@ -2,5 +2,5 @@
"name": "ship-it",
"description": "Runs a comprehensive pre-flight audit, syncs the README, and publishes the changes to a new PR.",
"version": "1.0.0",
"author": "Rootiest"
"author": { "name": "Rootiest" }
}
+1 -1
View File
@@ -2,5 +2,5 @@
"name": "systematic-enumeration",
"description": "Forces element-by-element verification for finite sets to prevent counting errors.",
"version": "1.0.0",
"author": "Rootiest"
"author": { "name": "Rootiest" }
}
+1 -1
View File
@@ -2,5 +2,5 @@
"name": "technical-devlog-scribe",
"description": "Generates a highly structured, objective technical summary of a development session.",
"version": "1.0.0",
"author": "Rootiest"
"author": { "name": "Rootiest" }
}