fix(plugin): register kami via marketplace manifest#16
Merged
Conversation
Move the plugin manifest from .claude-plugin/plugin.json into the marketplace.json plugin entry with strict: false. Carrying skills: ["./"] in the marketplace entry bypasses the plugin.json path validator that currently rejects "./" with "skills path escapes plugin directory" (anthropics/claude-code#51888), and lets the SKILL.md frontmatter name: drive the idiomatic /kami:kami invocation name.
|
@qishaoyumu is attempting to deploy a commit to the Tw93 Team on Vercel. A member of the Team first needs to authorize it. |
Owner
|
@qishaoyumu Thank you for the detailed investigation and the clean fix. I merged this PR, and the marketplace manifest update is now on main. I also refreshed the latest V1.4.0 release asset so users installing from the release ZIP get this fix directly. |
tw93
added a commit
that referenced
this pull request
May 13, 2026
- Section Header and Code Card components added to design.md + en.md - Deck Recipe (R1-R2, R4-R10) added as design.md section 8 - --slide-pad: 80px spacing token added to styles.css - demo-agent-slides.html updated to 7 slides with Code Card demo - slides.py / slides-en.py: remove italic, fix page_num, clean up - production.md: correct BRAND color (coral -> ink-blue), fix italic ref, add pitfall #16 slide letter-spacing halved - writing.md, CHEATSHEET.md, SKILL.md, CLAUDE.md: prose polish, remove emoji contrast markers, nine-rule count sync
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.
fix(plugin): register kami via marketplace manifest
Background
The Claude Code plugin manifest in this repo was added in #14, originally declared as
"commands": ["./SKILL.md"]. That form installs and works, but the skill's invocation name comes from the filename and ends up as/kami:SKILL.A follow-up commit before the squash merge changed the field to
"skills": ["./"], the form documented in Path behavior rules. The intent was to let thename:frontmatter inSKILL.mddrive the invocation name, producing/kami:kami. But the current Claude Code client rejects"./"when parsingplugin.json, and plugin install onmainfails. This PR fixes that.After looking into it, I found that moving the same manifest fields (including
skills: ["./"]) fromplugin.jsoninto themarketplace.jsonplugin entry with"strict": falsebypasses the path validator (which only fires on theplugin.jsonparse path) while preserving the intended/kami:kamiinvocation name. That is the approach this PR takes.Symptoms
After
/plugin marketplace add tw93/Kamiand/plugin install kami@kami,/reload-pluginsreports:The plugin entry installs without error, but no skill registers:
/kami:*matches nothing in/help, the skill count is unchanged before and after install/reload, and the skill cannot be invoked.Root cause
.claude-plugin/plugin.jsondeclares"skills": ["./"]. This is the form documented in Path behavior rules for cases whereSKILL.mdsits directly in the plugin root:But the current Claude Code path validator treats
"./"as escaping the plugin root and refuses to load. The documented behavior and the client implementation diverge. The same issue is tracked upstream as anthropics/claude-code#51888 (open, with the samePath escapes plugin directory: ./symptom on darwin).Fix
Delete
plugin.jsonand move the manifest fields (including"skills": ["./"]) into themarketplace.jsonplugin entry, marked"strict": false. From strict mode docs:A
marketplace.jsonplugin entry can carry any field from the plugin manifest schema, includingskills. This bypasses theplugin.jsonpath validator while preserving the documentedskills: ["./"]form.Final entry shape (description unchanged):
{ "name": "kami", "description": "<existing description unchanged>", "category": "documents", "source": "./", "homepage": "https://github.com/tw93/Kami", "skills": ["./"], "strict": false }Beyond fixing the bug, two minor benefits
Invocation name becomes
/kami:kami. Whenskills: ["./"]is honored, thename:frontmatter inSKILL.mdbecomes the skill name (per Path behavior rules). Without this fix, even falling back tocommands: ["./SKILL.md"]only yields/kami:SKILL(filename-derived).Metadata drift risk decreases. For fields like
version, setting it in both places leads to divergence. The docs call this out:Why kami needs an explicit path entry
kami is a single-skill flat repo:
SKILL.mdsits at the repo root alongsidereferences/,assets/templates/, andscripts/, with noskills/<name>/subdirectory.Per File locations reference, Claude Code's auto-discovery scans only
skills/<name>/SKILL.mdandcommands/*.mdby default. Without an explicit path entry, the plugin installs but registers zero skills, with no error. (This is also why droppingplugin.jsonWaza-style is not enough for kami on its own: Waza has a realskills/<name>/tree to be discovered, kami doesn't, so kami needsskills: ["./"]to make the rootSKILL.mdvisible.)Considered but not taken: restructure to
skills/kami/SKILL.mdAnother option is to abandon the flat layout and use the default skill subdirectory layout:
That would also unblock install, and the manifest could omit
skills/commandsentirely. I chose not to take this route, because movingSKILL.mdwould touch three workflows that need separate verification:npx skills add tw93/kamiis the public install command documented inREADME.md,index*.html, andllms.txt. The skills CLI's behavior withSKILL.mdnot at the repo root needs separate verification.scripts/package-skill.shfrom the repo root, and would need to be re-pointed atskills/kami/.scripts/build.pyand the relative references inSKILL.mdtoreferences/,assets/templates/,assets/diagrams/, andCHEATSHEET.mdall assume cwd = repo root.The restructure is reasonable and worth doing, but as a separate, deliberate decision rather than a side effect of unblocking install. Happy to follow up with a dedicated PR if you'd prefer that direction.
Verified
Two install paths covered
/plugin marketplace add /local/path/to/Kami/plugin marketplace add qishaoyumu/Kami@fix/plugin-install-path-escapeIdentical results on both paths. Each manifest variant was tested from a clean uninstall + marketplace remove state.
plugin.jsonwithskills: ["./"]skills: ["./"], strict: falseplugin.json+marketplace.jsonentrymarketplace.jsonentry only/plugin marketplace add/plugin install kami@kami/reload-plugins1 error during load(skills path escape)kami:kamiregistered/helpnamespace/kami:*entries/kamilisted with descriptionNo commands match "/kami:*"SKILL.mdcontentRepro (each manifest variant tested from a clean uninstall + marketplace-remove state):
Scope
Final diff against
main:Nothing in
scripts/,assets/,references/,SKILL.md,README.md,index*.html, orllms.txtchanges. Non-marketplace install paths (npx skills add, Claude Desktop ZIP) stay out of scope and continue to work becauseSKILL.mdremains at the repo root.