Background
As of v0.13.0 (PR #155), a plugin entry can externalize its body into a <path>/.plugin/plugin.json manifest, keeping plugins.json a lightweight registry of description + path (+ default_in_roots). See docs/plugins.md → Externalizing the Body.
The prior way — declaring a plugin's body (skills, mcp_servers, hooks, plugins, version, author, homepage, repository, license, logo, keywords, title) inline on a plugins.json entry with no path — is deprecated as of v0.13.0. resolveArtifacts now emits a deprecation warning whenever an inline-only plugin is resolved.
Task (do this in ~3 months, targeting roughly 2026-09)
Remove support for inline plugin bodies:
- Resolver (
packages/core/src/config.ts) — in hydratePluginManifests, turn the inline-body deprecation warning into a hard error (or drop the inline-merge path entirely). A plugin entry must reference a .plugin/plugin.json manifest via path; inline body fields without a path are rejected. Inline fields layered on top of a path (the sanctioned override case) remain allowed.
- Schema (
schemas/plugins.schema.json) — remove the deprecated inline body properties (skills, mcp_servers, hooks, plugins, version, author, homepage, repository, license, logo, title, keywords) from the Plugin definition, OR constrain the schema so those fields require a sibling path. Keep description, path, default_in_roots.
- Types (
packages/core/src/types.ts) — narrow PluginEntry accordingly if appropriate.
- Tests — flip the deprecation-warning tests in
packages/core/tests/plugin-manifest.test.ts to expect a hard error for inline-only plugins; ensure manifest-backed and override cases still pass.
- Docs / examples — remove any remaining mention of inline plugin bodies as a supported form; ensure all
examples/plugins/ entries use the manifest form.
- CHANGELOG — note the removal as a breaking change in the version that ships it.
Migration for users
Move each inline plugin's body into <plugin-dir>/.plugin/plugin.json and replace the inline fields in plugins.json with "path": "./<plugin-dir>". Keep description, path, and default_in_roots on the index entry. The warning emitted in the deprecation window names each affected plugin and the fields to move.
Deprecated in v0.13.0 (PR #155).
Background
As of v0.13.0 (PR #155), a plugin entry can externalize its body into a
<path>/.plugin/plugin.jsonmanifest, keepingplugins.jsona lightweight registry ofdescription+path(+default_in_roots). See docs/plugins.md → Externalizing the Body.The prior way — declaring a plugin's body (
skills,mcp_servers,hooks,plugins,version,author,homepage,repository,license,logo,keywords,title) inline on aplugins.jsonentry with nopath— is deprecated as of v0.13.0.resolveArtifactsnow emits a deprecation warning whenever an inline-only plugin is resolved.Task (do this in ~3 months, targeting roughly 2026-09)
Remove support for inline plugin bodies:
packages/core/src/config.ts) — inhydratePluginManifests, turn the inline-body deprecation warning into a hard error (or drop the inline-merge path entirely). A plugin entry must reference a.plugin/plugin.jsonmanifest viapath; inline body fields without apathare rejected. Inline fields layered on top of apath(the sanctioned override case) remain allowed.schemas/plugins.schema.json) — remove the deprecated inline body properties (skills,mcp_servers,hooks,plugins,version,author,homepage,repository,license,logo,title,keywords) from thePlugindefinition, OR constrain the schema so those fields require a siblingpath. Keepdescription,path,default_in_roots.packages/core/src/types.ts) — narrowPluginEntryaccordingly if appropriate.packages/core/tests/plugin-manifest.test.tsto expect a hard error for inline-only plugins; ensure manifest-backed and override cases still pass.examples/plugins/entries use the manifest form.Migration for users
Move each inline plugin's body into
<plugin-dir>/.plugin/plugin.jsonand replace the inline fields inplugins.jsonwith"path": "./<plugin-dir>". Keepdescription,path, anddefault_in_rootson the index entry. The warning emitted in the deprecation window names each affected plugin and the fields to move.Deprecated in v0.13.0 (PR #155).