Skip to content

Track Claude Code plugin contract parity beyond the current adapter #187

Description

@ScriptedAlchemy

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.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.

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/prohibited in the capability table with a reason.

Plugin components and manifest

Package/cache/data lifecycle

  • 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)
  • Persistent-data deletion on last uninstall and --keep-datafeat(claude): validate substitution tokens and record lifecycle contract #347 (slice 5; recorded unavailable with dated evidence: last-scope deletion, the interactive prompt, CLI default deletion, and --keep-data are host uninstall behavior)

Marketplace/distribution/policy

  • Full marketplace.json top-level and plugin-entry fields, including strict, renames, relevance, headers, and headersHelperfeat(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

Related: #107 #100 #97 #101 #108 #133 #181

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesthost-integrationAgent host capabilities, projection, discovery, and lifecyclemeta-frameworkAgent Bundle compiler-coupled meta-framework

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions