Work key: chittymarket/plugin-container-v2
Corrected 2026-07-30. The first version of this issue claimed plugins "cannot state that they ship hooks, MCP servers, commands, an output style". That is wrong — the official manifest supports all of those. Corrected problem statement below; the real gap is narrower and different.
What the official format already gives us
.claude-plugin/plugin.json (plugins-reference) already supports:
{
"name", "displayName", "version", "description",
"author": { "name", "email", "url" },
"homepage", "repository", "license", "keywords",
"skills": "./custom/skills/",
"commands": ["./custom/commands/special.md"],
"agents": ["./custom/agents/reviewer.md"],
"hooks": "./config/hooks.json",
"mcpServers": "./mcp-config.json",
"outputStyles": "./styles/",
"lspServers": "./.lsp.json",
"experimental": { "themes": "./themes/", "monitors": "./monitors.json" },
"dependencies": ["helper-lib", { "name": "secrets-vault", "version": "~2.1.0" }]
}
Components auto-discover from skills/, commands/, agents/, hooks/; the manifest is only needed for metadata or custom paths. claude plugin validate ./my-plugin already validates manifest + skill/agent/command frontmatter + hooks/hooks.json.
The actual gap
1. ChittyOS plugins under-use the schema that exists. chittyos-core's entry is name/description/version/source/strict/category/keywords — no dependencies, no hooks, no mcpServers, no author/license/repository. MCP servers ship as separate plugins (chittyos-mcp, neon-mcp) rather than as mcpServers on the plugin that needs them. This is the cheapest, highest-value fix and needs no new spec — just adoption.
2. claude plugin validate is not in CI. Nothing catches a malformed manifest or bad frontmatter before it reaches the marketplace.
3. Multi-runtime projection is genuinely outside the official spec. codex-skills/, openclaw-agents/, chatgpt-apps/ exist in some plugins with no schema declaring which runtimes a plugin targets or which artifact projects where. chittyagent-dispatch does the projecting but has no declared contract to project from. This is the part that actually needs new design.
4. No requires for backend services. A plugin can depend on another plugin (dependencies), but cannot express "requires ChittyConnect broker reachable" or "needs binding X" (by reference, never value). Ecosystem-specific, not covered upstream.
5. No conflicts. Two plugins defining /checkpoint collide silently. Skills are namespaced by plugin (/commit-commands:commit), which mitigates but does not declare intent.
6. statusline is not a plugin component — it is settings-level. The original issue wrongly listed it. themes/monitors exist but only under experimental.
Scope
- Adopt the existing schema first. Audit all 16 plugins; populate
dependencies, hooks, mcpServers, outputStyles, author, license, repository where artifacts already exist on disk. No new spec required.
- Add
claude plugin validate to CI across every plugin in plugins/.
- Design the ChittyOS extension layer — additive keys the upstream loader ignores:
chitty.runtimes: target runtimes + per-artifact projection map, consumed by chittyagent-dispatch
chitty.requires: backend services (health/version contract), bindings by reference
chitty.conflicts: declared namespace collisions
chitty.profile: linkage to profiles.json lens model
- Validator for the extension layer: fails closed on undeclared-on-disk, declared-but-missing, cross-plugin collisions, unresolvable
requires.
- Reference migration:
chittyos-core, proving both validators.
Non-goals
- Do not fork or replace the upstream manifest. Extensions live under a
chitty.* namespace so upstream tooling keeps working.
- Not changing marketplace transport or install flow.
- No secret values in manifests —
requires names a binding; the broker resolves it.
Acceptance criteria
Notes
Prior art in-repo: chittyagent-dispatch (projection), profiles.json (lens model), capabilities.generated.json (generated inventory). Related: #70.
Marked for development — not started.
🤖 Generated with Claude Code
Work key:
chittymarket/plugin-container-v2What the official format already gives us
.claude-plugin/plugin.json(plugins-reference) already supports:{ "name", "displayName", "version", "description", "author": { "name", "email", "url" }, "homepage", "repository", "license", "keywords", "skills": "./custom/skills/", "commands": ["./custom/commands/special.md"], "agents": ["./custom/agents/reviewer.md"], "hooks": "./config/hooks.json", "mcpServers": "./mcp-config.json", "outputStyles": "./styles/", "lspServers": "./.lsp.json", "experimental": { "themes": "./themes/", "monitors": "./monitors.json" }, "dependencies": ["helper-lib", { "name": "secrets-vault", "version": "~2.1.0" }] }Components auto-discover from
skills/,commands/,agents/,hooks/; the manifest is only needed for metadata or custom paths.claude plugin validate ./my-pluginalready validates manifest + skill/agent/command frontmatter +hooks/hooks.json.The actual gap
1. ChittyOS plugins under-use the schema that exists.
chittyos-core's entry isname/description/version/source/strict/category/keywords— nodependencies, nohooks, nomcpServers, noauthor/license/repository. MCP servers ship as separate plugins (chittyos-mcp,neon-mcp) rather than asmcpServerson the plugin that needs them. This is the cheapest, highest-value fix and needs no new spec — just adoption.2.
claude plugin validateis not in CI. Nothing catches a malformed manifest or bad frontmatter before it reaches the marketplace.3. Multi-runtime projection is genuinely outside the official spec.
codex-skills/,openclaw-agents/,chatgpt-apps/exist in some plugins with no schema declaring which runtimes a plugin targets or which artifact projects where.chittyagent-dispatchdoes the projecting but has no declared contract to project from. This is the part that actually needs new design.4. No
requiresfor backend services. A plugin can depend on another plugin (dependencies), but cannot express "requires ChittyConnect broker reachable" or "needs binding X" (by reference, never value). Ecosystem-specific, not covered upstream.5. No
conflicts. Two plugins defining/checkpointcollide silently. Skills are namespaced by plugin (/commit-commands:commit), which mitigates but does not declare intent.6.
statuslineis not a plugin component — it is settings-level. The original issue wrongly listed it.themes/monitorsexist but only underexperimental.Scope
dependencies,hooks,mcpServers,outputStyles,author,license,repositorywhere artifacts already exist on disk. No new spec required.claude plugin validateto CI across every plugin inplugins/.chitty.runtimes: target runtimes + per-artifact projection map, consumed bychittyagent-dispatchchitty.requires: backend services (health/version contract), bindings by referencechitty.conflicts: declared namespace collisionschitty.profile: linkage toprofiles.jsonlens modelrequires.chittyos-core, proving both validators.Non-goals
chitty.*namespace so upstream tooling keeps working.requiresnames a binding; the broker resolves it.Acceptance criteria
claude plugin validategreen for every plugin, running in CIchitty.*extension layer, referenced fromCHARTER.mdchittyos-coremigrated as referencechittyagent-dispatchprojects fromchitty.runtimesfor ≥2 runtimes without per-plugin branchingNotes
Prior art in-repo:
chittyagent-dispatch(projection),profiles.json(lens model),capabilities.generated.json(generated inventory). Related: #70.Marked for development — not started.
🤖 Generated with Claude Code