fix: repair plugin manifest and ship context as a skill (0.3.2) - #1
Merged
Conversation
Claude Code's plugin manifest schema expects `repository` to be a string URL. Declaring it as an object made v0.3.1 fail validation with "repository: Invalid input: expected string, received object", which blocked `claude plugin install fleet-manager@fleet-manager`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A CLAUDE.md at the plugin root is not loaded as project context, so the command reference and operational guidelines it carried never reached the model. Move that content to plugin/skills/fleet-manager/SKILL.md, which is the supported way to ship context with a plugin. The managed block went with it rather than moving. It mirrored the active server, which set_active already records authoritatively in the git-ignored plugin/context/active-server. As a tracked file it dirtied the working tree on every /use, and living under the plugin root it was overwritten on plugin update. /use, /first-run and fleet-intake now stop writing it. Bumps to 0.3.2 so the release job publishes a tag whose manifest actually validates -- v0.3.1 is unusable. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
CallMeTechie
added a commit
that referenced
this pull request
Aug 3, 2026
v0.3.1 declared `repository` as an object, but the plugin manifest schema expects a string URL, which made `claude plugin install` fail outright. Fixing that surfaced a second issue: a CLAUDE.md at the plugin root is never loaded as context, so the command reference it carried had no effect. That content moves to plugin/skills/fleet-manager/SKILL.md. The managed block is dropped rather than moved. It mirrored the active server that set_active already records in the git-ignored context/active-server; as a tracked file it dirtied the tree on every /use and was overwritten on plugin update.
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.
Why
claude plugin install fleet-manager@fleet-manageris currently impossible. v0.3.1 introducedrepositoryas an object, but the plugin manifest schema expects a string URL:While fixing that,
claude plugin validatesurfaced a second problem: aCLAUDE.mdat the plugin root is never loaded as project context. The command reference and operational guidelines it carried had no effect on the model.What changed
Manifest —
repositoryis now a string. Validation passes.Context → skill —
plugin/CLAUDE.mdmoved toplugin/skills/fleet-manager/SKILL.md, the supported way to ship context with a plugin. It now also documents where state actually lives.Managed block removed — it mirrored the active server, which
set_activealready records authoritatively in the git-ignoredplugin/context/active-server. The duplicate had two side effects: as a tracked file it dirtied the working tree on every/use, and living under the plugin root it was overwritten onplugin update./use,/first-runandfleet-intakeno longer write it. The sessionNotessection went with it.0.3.2 — so the release job publishes a tag whose manifest validates.
v0.3.1remains unusable and is not retagged by this PR.Verification
claude plugin validate plugin/→ passes, no warnings (previously: 1 error + 1 warning)tests/static/:abspath,frontmatter,validate-manifests→ OKtest-compose-lib.sh, pre-existing and reproduced on unmodifiedmain; they needdocker/jq, absent in the dev environmentmarkdown-lint(nonpx),shellcheck-commands(noshellcheck), integration suite (needs Docker + rsync) — all covered by CI hereReviewer note
Dropping the managed block is a deliberate behaviour change: the active server is no longer echoed into a human-readable file. Every command already prints
→ Ziel: <name> (user@host:port), and/list-serversmarks the active entry, so the information stays visible where it was actually being read.