You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Documentation-coverage follow-up for the Claude Code plugin surface observed on 2026-09-01. This is a host-specific child of #100 and the #107 plan; it turns the current Claude adapter's implicit omissions into an explicit checklist.
Current implemented baseline: skills/SKILL.md emission, command hook wrappers for the canonical route families, MCP, marketplace stub, and LSP are in packages/agent-bundle/src/adapters/claude.ts and adapters/capabilities/claude-2.1.250.json. Skill lowering stays on #108, semantic event-family work stays on #97, schema/validator adoption stays on #133, and end-user installation stays on #181/#101.
Every item below must end as implemented with pinned evidence, delegated to the linked lane, or explicitly unavailable/prohibited in the capability table with a reason.
Enforce the plugin-agent security contract: reject/omit hooks, mcpServers, and permissionMode for plugin-shipped agents — feat(claude): record agents-component parity evidence under G5 gate #346 (slice 4; recorded as capability evidence under the same G5 deferral: the docs state all three are ignored for plugin-shipped agents, and native proof records strict validation accepts even permissionMode: bypassPermissions without warning, so the loader-side ignore contract has no validator enforcement; compiler-side rejection lands with the gated agents emission increment)
Workflows (workflows/ and manifest path field) — feat(claude): emit plugin workflows and output styles (#187) #300 (slice 2; canonical workflows/ directory emission via the hardened shared payload-directory normalizer with realpath containment; the optional manifest path field is deliberately not emitted since the adapter only uses the default location, and workflow file contents stay opaque because the reference defines no file schema)
Output styles (output-styles/ / outputStyles) — feat(claude): emit plugin workflows and output styles (#187) #300 (slice 2; tightened to .md files per the output-styles doc; frontmatter is not validated — native proof records Claude Code 2.1.257 strict validation accepts an output style with no frontmatter; default-location emission only, no outputStyles manifest field)
Experimental themes and monitors, including when and host-availability constraints — feat(claude): emit experimental themes and monitors (#187) #302 (slice 2; pinned monitors/theme schemas, when limited to always/on-skill-invoke:<skill> with a skill-existence tightening, ${user_config.*} rejected in monitor commands, host-availability warnings emitted; native proof records 2.1.257 strict validation does not inspect either default-location document's contents, so the pinned schemas and compiler diagnostics are the only content guard)
Eligible Node dependency install contract: root package.json plus Bun/npm lockfile, frozen install, --ignore-scripts, 60-second limit, deterministic lockfile precedence — feat(claude): validate substitution tokens and record lifecycle contract #347 (slice 5; recorded unavailable with the full documented contract pinned in the capability row — lockfile-to-command map, precedence order, 60-second timeout; native proof records strict validation accepts package metadata without running any install)
Explicitly reject/defer automatic Yarn/pnpm installs and document the ${CLAUDE_PLUGIN_DATA} alternative — feat(claude): validate substitution tokens and record lifecycle contract #347 (slice 5; recorded unavailable: the host skips yarn.lock/pnpm-lock.yaml because resolution-time hooks can bypass --ignore-scripts, and the documented ${CLAUDE_PLUGIN_DATA} hook-install alternative is pinned in the evidence)
Cache copy/link semantics, version resolution, orphan grace/sweep, symlink containment, and path-escape rejection — feat(claude): validate substitution tokens and record lifecycle contract #347 (slice 5; recorded unavailable as host install-time behavior with the full documented lifecycle pinned; native proof records strict validation does not catch a path-escaping symlink, so containment is an install-copy check)
${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA}, and ${CLAUDE_PROJECT_DIR} substitution by component/field — feat(claude): validate substitution tokens and record lifecycle contract #347 (slice 5; recorded degraded with the closed documented field table pinned and enforced: token-bearing MCP stdio cwd and undocumented LSP fields now fail with claude.substitution.token.unsupported, and the previously emitted never-substituted cwd: "${CLAUDE_PLUGIN_ROOT}" is omitted; Skill content and target-native hook documents remain opaque payloads)
Full marketplace.json top-level and plugin-entry fields, including strict, renames, relevance, headers, and headersHelper — feat(claude): complete marketplace manifest contract (#187) #310 (slice 3; authored claude.marketplace overlay with closed schema re-pinned in PROVENANCE; tightening: headers/headersHelper are rejected as inapplicable on non-archive sources rather than emitted, since the native CLI's strict validation fails them there — the archive-source path landed with feat(claude): support marketplace source matrix #314)
Source matrix: relative, github, git URL, git-subdir, npm, archive, and command (copy/link) with pin/integrity rules — feat(claude): support marketplace source matrix #314 (slice 3; all seven documented source forms with plan-time pin/integrity validation — 40-hex commit SHAs, sha256: digests, HTTPS-only archives, documented command modes — and native strict-validation proofs including negative proofs for short SHA, HTTP archive URL, and unknown command mode)
@skills-dir plugins and their project trust/MCP/LSP/monitor restrictions — feat(claude): pin distribution policy capability evidence (#187) #308 (slice 3; recorded unavailable with dated evidence: Agent Bundle emits plugin directories but does not register host-owned @skills-dir identities or satisfy the trust/MCP-approval/LSP/monitor gates, which are runtime host behavior)
Install scopes, reload behavior, trust gates, synced plugins, and managed scope — feat(claude): pin distribution policy capability evidence (#187) #308 (slice 3; recorded unavailable with dated evidence: these are host-owned install-time/runtime behaviors outside compile-time artifact emission)
Managed restrictions: strictKnownMarketplaces, blockedMarketplaces, disableSideloadFlags, disableCommandPluginSources, allowManagedHooksOnly, and plugin suggestions — feat(claude): pin distribution policy capability evidence (#187) #308 (slice 3; recorded unavailable with dated evidence: managed-settings enforcement is administrator/host-owned)
CLI lifecycle coverage (init/new, install/uninstall/prune/enable/disable/update/list/details/tag, marketplace add/list/remove/update) — feat(claude): pin distribution policy capability evidence (#187) #308 (slice 3; recorded as capability rows with dated evidence, plus native proofs exercising claude plugin/claude plugin marketplace lifecycle commands against the real binary in an isolated config directory)
Acceptance
The capability table names every documented component/lifecycle area above as supported, degraded, unavailable, or prohibited with dated evidence.
The compiler never silently drops a documented component requested by an author.
Supported fields validate against pinned schemas and real-host fixtures; unsupported fields fail with a precise diagnostic and recovery.
Summary
Documentation-coverage follow-up for the Claude Code plugin surface observed on 2026-09-01. This is a host-specific child of #100 and the #107 plan; it turns the current Claude adapter's implicit omissions into an explicit checklist.
Current implemented baseline: skills/SKILL.md emission, command hook wrappers for the canonical route families, MCP, marketplace stub, and LSP are in
packages/agent-bundle/src/adapters/claude.tsandadapters/capabilities/claude-2.1.250.json. Skill lowering stays on #108, semantic event-family work stays on #97, schema/validator adoption stays on #133, and end-user installation stays on #181/#101.Documented contract to account for
Sources (read 2026-09-01):
Every item below must end as implemented with pinned evidence, delegated to the linked lane, or explicitly
unavailable/prohibitedin the capability table with a reason.Plugin components and manifest
commands/) including flat Markdown discovery and custom paths — flat.mdemission landed earlier; custom-path replace/add rules pinned as capability evidence with native proof in feat(claude): emit manifest metadata fields and pin component path rules (#187) #293 (slice 2)agents/) withname,description,model,effort,maxTurns,tools,disallowedTools,skills,memory,background, andisolation: worktree— feat(claude): record agents-component parity evidence under G5 gate #346 (slice 4; recordedunavailableunder the Compile capability-aware host component bundles #100 stage-2 G5 gate per docs(capabilities): record the #100 stage 2 agents-component deferral in pinned capability notes #220/meta-framework: execution plan and sequencing #107 revision 3: 15 dated capability rows cover the component, every documented frontmatter field, and the security contract; native proof records Claude Code 2.1.257 strict validation accepts all documented fields; re-admitting agents emission needs its own evidence-backed increment)hooks,mcpServers, andpermissionModefor plugin-shipped agents — feat(claude): record agents-component parity evidence under G5 gate #346 (slice 4; recorded as capability evidence under the same G5 deferral: the docs state all three are ignored for plugin-shipped agents, and native proof records strict validation accepts evenpermissionMode: bypassPermissionswithout warning, so the loader-side ignore contract has no validator enforcement; compiler-side rejection lands with the gated agents emission increment)workflows/and manifest path field) — feat(claude): emit plugin workflows and output styles (#187) #300 (slice 2; canonicalworkflows/directory emission via the hardened shared payload-directory normalizer with realpath containment; the optional manifest path field is deliberately not emitted since the adapter only uses the default location, and workflow file contents stay opaque because the reference defines no file schema)output-styles//outputStyles) — feat(claude): emit plugin workflows and output styles (#187) #300 (slice 2; tightened to.mdfiles per the output-styles doc; frontmatter is not validated — native proof records Claude Code 2.1.257 strict validation accepts an output style with no frontmatter; default-location emission only, nooutputStylesmanifest field)whenand host-availability constraints — feat(claude): emit experimental themes and monitors (#187) #302 (slice 2; pinned monitors/theme schemas,whenlimited toalways/on-skill-invoke:<skill>with a skill-existence tightening,${user_config.*}rejected in monitor commands, host-availability warnings emitted; native proof records 2.1.257 strict validation does not inspect either default-location document's contents, so the pinned schemas and compiler diagnostics are the only content guard)bin/PATH executables and the organization-distribution prohibition on top-levelbin/— feat(claude): emit plugin bin/ executables (#187 slice 1) #282 (slice 1)settings.jsondefaults (agent,subagentStatusLine) and precedence over manifest settings — feat(claude): emit plugin-root settings.json defaults (#187 slice 1) #284 (slice 1)displayName, metadata,defaultEnabled, custom path replace/add rules) — feat(claude): emit manifest metadata fields and pin component path rules (#187) #293 (slice 2)userConfig, including supported types, validation fields, sensitive storage, source precedence, and shell-substitution prohibitions — feat(claude): emit userConfig manifest options (#187 slice 1) #287 (slice 1; substitution enforcement inside hook/MCP planning recorded as evidence, deferred to the hooks-fidelity slice)channelsdeclarations bound to plugin MCP servers — feat(claude): emit channel declarations bound to plugin MCP servers (#187) #294 (slice 2; native proof records the CLI does not cross-check the server binding, so the compiler diagnostic is the only guard)Package/cache/data lifecycle
package.jsonplus Bun/npm lockfile, frozen install,--ignore-scripts, 60-second limit, deterministic lockfile precedence — feat(claude): validate substitution tokens and record lifecycle contract #347 (slice 5; recordedunavailablewith the full documented contract pinned in the capability row — lockfile-to-command map, precedence order, 60-second timeout; native proof records strict validation accepts package metadata without running any install)${CLAUDE_PLUGIN_DATA}alternative — feat(claude): validate substitution tokens and record lifecycle contract #347 (slice 5; recordedunavailable: the host skipsyarn.lock/pnpm-lock.yamlbecause resolution-time hooks can bypass--ignore-scripts, and the documented${CLAUDE_PLUGIN_DATA}hook-install alternative is pinned in the evidence)unavailableas host install-time behavior with the full documented lifecycle pinned; native proof records strict validation does not catch a path-escaping symlink, so containment is an install-copy check)${CLAUDE_PLUGIN_ROOT},${CLAUDE_PLUGIN_DATA}, and${CLAUDE_PROJECT_DIR}substitution by component/field — feat(claude): validate substitution tokens and record lifecycle contract #347 (slice 5; recordeddegradedwith the closed documented field table pinned and enforced: token-bearing MCP stdiocwdand undocumented LSP fields now fail withclaude.substitution.token.unsupported, and the previously emitted never-substitutedcwd: "${CLAUDE_PLUGIN_ROOT}"is omitted; Skill content and target-native hook documents remain opaque payloads)--keep-data— feat(claude): validate substitution tokens and record lifecycle contract #347 (slice 5; recordedunavailablewith dated evidence: last-scope deletion, the interactive prompt, CLI default deletion, and--keep-dataare host uninstall behavior)Marketplace/distribution/policy
marketplace.jsontop-level and plugin-entry fields, includingstrict, renames, relevance, headers, andheadersHelper— feat(claude): complete marketplace manifest contract (#187) #310 (slice 3; authoredclaude.marketplaceoverlay with closed schema re-pinned in PROVENANCE; tightening:headers/headersHelperare rejected as inapplicable on non-archive sources rather than emitted, since the native CLI's strict validation fails them there — the archive-source path landed with feat(claude): support marketplace source matrix #314)sha256:digests, HTTPS-only archives, documented command modes — and native strict-validation proofs including negative proofs for short SHA, HTTP archive URL, and unknown command mode)@skills-dirplugins and their project trust/MCP/LSP/monitor restrictions — feat(claude): pin distribution policy capability evidence (#187) #308 (slice 3; recordedunavailablewith dated evidence: Agent Bundle emits plugin directories but does not register host-owned@skills-diridentities or satisfy the trust/MCP-approval/LSP/monitor gates, which are runtime host behavior)unavailablewith dated evidence: these are host-owned install-time/runtime behaviors outside compile-time artifact emission)strictKnownMarketplaces,blockedMarketplaces,disableSideloadFlags,disableCommandPluginSources,allowManagedHooksOnly, and plugin suggestions — feat(claude): pin distribution policy capability evidence (#187) #308 (slice 3; recordedunavailablewith dated evidence: managed-settings enforcement is administrator/host-owned)init/new, install/uninstall/prune/enable/disable/update/list/details/tag, marketplace add/list/remove/update) — feat(claude): pin distribution policy capability evidence (#187) #308 (slice 3; recorded as capability rows with dated evidence, plus native proofs exercisingclaude plugin/claude plugin marketplacelifecycle commands against the real binary in an isolated config directory)Acceptance
Related: #107 #100 #97 #101 #108 #133 #181