Add the Claude Code plugin marketplace; fix silently-broken skill frontmatter#257
Open
pengfei-threemoonslab wants to merge 1 commit into
Open
Add the Claude Code plugin marketplace; fix silently-broken skill frontmatter#257pengfei-threemoonslab wants to merge 1 commit into
pengfei-threemoonslab wants to merge 1 commit into
Conversation
…ntmatter The repo now doubles as a Claude Code plugin marketplace — the symmetric counterpart of the Codex marketplace under .agents/plugins/: - .claude-plugin/marketplace.json (marketplace: agents-shipgate) with one skill-only plugin entry sourcing ./plugins/claude-code. - plugins/claude-code/: plugin.json + the /shipgate command + the agents-shipgate skill, both byte-identical copies of the canonical sources (.claude/commands/shipgate.md, skills/agents-shipgate/). Skill-only by design, like the Codex plugin: no hooks, no MCP config, no scanner binary — hooks stay on the explicit install-hooks CLI path where the agents-shipgate binary must exist. - tests/test_claude_code_plugin_package.py mirrors the Codex package contract: installable manifest, versions pinned to __version__ (so release bumps cannot strand the marketplace), skill-only shape, byte-identity with canonical sources, and frontmatter-parses tests. Fixed in passing, caught by `claude plugin validate`: the canonical SKILL.md and /shipgate command shipped YAML frontmatter whose description contains an unquoted ":" — YAML parse fails and Claude Code loads the file with silently-empty metadata, which kills description-based skill auto-triggering for every existing install. Both are now quoted; all byte-identical copies synced (adoption-kits/claude-code-skill SKILL.md included, with EXPECTED_CLAUDE_CODE_SKILL_RENDER_SHA256 updated and the outgoing hash appended to the kit's prior_render_sha256 per the kit-change protocol); the new frontmatter test prevents regression. Wiring: README Claude Code section, docs/agents/use-with-claude-code.md (marketplace subsection incl. team pre-provisioning via extraKnownMarketplaces), CHANGELOG. `claude plugin validate` passes at both marketplace and plugin level; full CI-style suite + static-only lint + ruff green; self-verify routes the agent-instructions changes to human review (SHIP-VERIFY-TRUST-ROOT-TOUCHED) — which this PR is. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
6b56113 to
441dc65
Compare
Contributor
Author
|
Rebased onto post-#253–#256 main (one trivial CHANGELOG conflict; both Unreleased entries kept, full suite + both Diagnostic note for the record: this PR initially showed zero CI runs across push/reopen/synchronize events. Root cause was not event-delivery failure — the PR went 🤖 Generated with Claude Code |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Roadmap item 3 — the largest untapped discovery channel, and the symmetric counterpart of the existing Codex marketplace.
What
.claude-plugin/marketplace.json+plugins/claude-code/(plugin.json, the/shipgatecommand → installs namespaced as/agents-shipgate:shipgate, and the auto-triggering skill).install-hooksstays the explicit CLI path where the binary must exist), no MCP config. Test enforces this shape.tests/test_claude_code_plugin_package.pymirrors the Codex package contract: installable manifest,version == __version__on both manifests (release bumps can't strand the marketplace), byte-identity of skill+command with their canonical sources, and frontmatter-parses assertions.use-with-claude-code.mdmarketplace subsection (incl. team pre-provisioning viaextraKnownMarketplaces/enabledPlugins), CHANGELOG.The bug found in passing (worth the PR by itself)
claude plugin validatecaught that the canonicalSKILL.mdand the/shipgatecommand ship YAML frontmatter whosedescriptioncontains an unquoted:— the YAML fails to parse and Claude Code loads the file with silently-empty metadata. Concretely: description-based skill auto-triggering has been broken for every existinginit --claude-codeinstall; the skill only fired when named explicitly. Both descriptions are now quoted, all byte-identical copies synced per the kit-change protocol (render hash updated, outgoing hash appended toprior_render_sha256), and the new test parses the frontmatter so this cannot regress.Verification
claude plugin validate .andclaude plugin validate ./plugins/claude-codeboth pass (also surfaced that the validator rejectsdisplayName— removed; docs and validator disagree there).shipgate checkon this diff:warnrouting to verify (agent-instructions surface — correct boundary behavior); self-verify:review_requiredviaSHIP-VERIFY-TRUST-ROOT-TOUCHEDon the skill/command edits — the human review it demands is this PR review..claude-plugin/(no cross-parsing).Merge-order note: independent of #253–#256; only CHANGELOG's Unreleased section may trivially conflict.
🤖 Generated with Claude Code