Host capability matrix
This page is rendered at documentation build time from the pinned host capability tables amp-0.0.0-20260907001852-gf348fed.json, claude-2.1.260.json, codex-0.147.0.json, cursor-2026-08-28.json, portable-1.0.0.json. Those JSON files are the source of truth every target adapter compiles against; change them, not this page.
Every target adapter projects the normalized bundle against a pinned capability table: a JSON document recording the host version the evidence was observed against, the paths the host reads, and — for each capability — whether it is supported, degraded, or unavailable with a written reason. Nothing is inferred: a capability without evidence is unavailable, never a silent guess. A supported contract row is not live execution; the Runtime proof section records that separate axis.
Pinned hosts
Runtime proof
A supported or degraded contract row is not live host execution. The runtimeProof row is recorded when live activation, tools, or events were surveyed separately from the typed contract. unverified means the adapter is contract-checked; live activation has not been run. A host without a row has no such survey recorded here — that absence is not implied proof.
Install surface
Path tokens
MCP transports and token fields
The tasks column records whether the pinned host client issues task-augmented tools/call requests (the MCP 2025-11-25 Tasks utility: params.task, CreateTaskResult, tasks/get, tasks/result, tasks/cancel, tasks/list). Generated servers serve that lifecycle for any tool route that declares config.execution.taskSupport; the column is about the host, not the server. unavailable means the host is documented or observed to send ordinary calls only, with the reason and evidence below.
Task-augmented calls by host
The structuredContentValidation row records whether the pinned host client validates tools/call arguments against inputSchema and structuredContent against outputSchema, and with which JSON Schema dialect semantics. Generated servers advertise an interoperable 2020-12 projection — tuples as prefixItems plus items set to the union of the positional schemas, never items: false — so a valid result passes both a 2020-12 validator and a non-strict draft-07 one; degraded records a host whose validator reads a dialect other than the one declared, and unavailable a host with no client-side check on record, where the generated server's own validation against the route's zod schemas is the only one.
Structured content validation by host
Conversation lineage
The lineage section of each table: what the host tells the warm runtime about the conversation tree behind request.lineage. subagent-events says whether the host emits subagent start/stop hooks at all, root whether every payload names the root conversation, parent and depth how a subagent is placed under its parent (supported only when the child's own payload names it, degraded when the runtime registry places it from spawn-call ordering and any later host confirmation), and mcp-correlation how a generated MCP tool call is matched to the hook window that produced it. A degraded row records what the registry does and how certain it is; a supported row records the evidence. The resolution field on request.lineage reports which path answered (native, registry, confirmed, inferred).
Lineage row details
Recorded third-party clients
The clients section of each table: agents that read the artifact this target already emits, pinned to their own documentation on the date it was read. These clients are not target adapters — nothing about them changes what the compiler writes — so every row is evidence about a reader of the existing artifact, never a projection. The tier says what the client loads: agent-plugins loads the emitted package as one plugin, skills loads the components it recognizes without reading the manifest, and none loads nothing from it as published. Reading a document and running what it configures are separate rows: mcp records that the client reads the emitted mcp.json as MCP configuration, while placeholders records that it expands the reserved ${PLUGIN_ROOT} / ${PLUGIN_DATA} and provides them to the process it spawns. Precedence is per file and per surface — a file that wins for mcp leaves the skill tree discovered, and only a manifest that wins replaces the plugin. An install action carries the role its own documentation gives it — install copies the artifact, or the one component the client recognizes, into its own store, while register points the client at the emitted tree where it lies — and a client with no verified local-directory install of this artifact is recorded against the source its documentation does publish, an indexed marketplace name or a Git repository. A surface without evidence is unavailable with a dated reason, and the reason names exactly what the client would need instead.
Client surfaces
Client discovery
Plugin components
The plugin section of each table, flattened to dotted capability paths and grouped by top-level key. Boolean entries record a component the adapter emits; entries with a state carry the reason the host evidence supports or withholds it. Evidence notes stay in the JSON files.
amp 0.0.1788739286-gf348fe
entry
entry—.amp/plugins/<name>/index.js
manifest
manifest—null
marketplace
marketplace—null
commands
commandsunavailable — Agent Bundle does not project command-palette commands from its canonical command documents.
rules
rulesunavailable — Amp plugin discovery has no plugin-root rules component.
lsp
lspunavailable — The pinned PluginAPI declares no language-server registration surface.
nativeDiagnostics
nativeDiagnosticsunavailable — The pinned PluginAPI declares no native diagnostics-provider component.
nativeExtension
nativeExtensionunavailable — The pinned PluginAPI declares no opaque native extension component.
claude 2.1.260
agents
agents.componentunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately defers Agent Bundle's authored plugin agents/ component until a separate evidence-backed increment. · 2 evidence notesagents.nameunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately withholds an authored plugin-agent name field together with agents/ emission. · 3 evidence notesagents.descriptionunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately withholds an authored plugin-agent description field together with agents/ emission. · 2 evidence notesagents.modelunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately withholds an authored plugin-agent model field together with agents/ emission. · 2 evidence notesagents.effortunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately withholds an authored plugin-agent effort field together with agents/ emission. · 2 evidence notesagents.maxTurnsunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately withholds an authored plugin-agent maxTurns field together with agents/ emission. · 2 evidence notesagents.toolsunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately withholds an authored plugin-agent tools field together with agents/ emission. · 2 evidence notesagents.disallowedToolsunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately withholds an authored plugin-agent disallowedTools field together with agents/ emission. · 2 evidence notesagents.skillsunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately withholds an authored plugin-agent skills field together with agents/ emission. · 2 evidence notesagents.memoryunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately withholds an authored plugin-agent memory field together with agents/ emission. · 2 evidence notesagents.backgroundunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately withholds an authored plugin-agent background field together with agents/ emission. · 2 evidence notesagents.isolationWorktreeunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately withholds authored plugin-agent isolation: worktree together with agents/ emission. · 2 evidence notesagents.hooksunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately defers the plugin-agent surface on which Agent Bundle would lower hooks as unsupported on Claude plugins: the sub-agents reference marks the field "Ignored for plugin subagents", so a re-admitted agents/ component must reject it with a diagnostic rather than emit a field the host drops silently. · 5 evidence notesagents.mcpServersunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately defers the plugin-agent surface on which Agent Bundle would lower mcpServers as unsupported on Claude plugins: the sub-agents reference marks the field "Ignored for plugin subagents", so a re-admitted agents/ component must reject it with a diagnostic rather than emit a field the host drops silently. · 5 evidence notesagents.permissionModeunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately defers the plugin-agent surface on which Agent Bundle would lower permissionMode as unsupported on Claude plugins: the sub-agents reference marks the field "Ignored for plugin subagents", so a re-admitted agents/ component must reject it with a diagnostic rather than emit a field the host drops silently. · 5 evidence notesagents.colorunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately withholds an authored plugin-agent color field together with agents/ emission. · 3 evidence notesagents.initialPromptunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately withholds an authored plugin-agent initialPrompt field together with agents/ emission. · 3 evidence notesagents.experimentalCacheTtlunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately withholds an authored plugin-agent experimental.cacheTtl field together with agents/ emission. · 3 evidence notes
bin
bin.bareCommandssupportedbin.bashPathsupportedbin.directory—binbin.enabledOnlysupportedbin.organizationDistributionProhibitedsupported
channels
channels.bindsToPluginMcpServersupportedchannels.perChannelUserConfigsupported
commandFrontmatter
commandFrontmattersupported —fields.allowedTools:allowed-tools·fields.argumentHint:argument-hint·fields.description:description·fields.disableModelInvocation:disable-model-invocation·fields.model:model· 2 evidence notes
commands
commandssupported
dependencies
dependencies.autoInstallsupporteddependencies.autoInstallExceptions—command-source,headersHelperdependencies.crossMarketplaceAllowlist—allowCrossMarketplaceDependenciesOndependencies.entryForms—name,objectdependencies.errorCodes—dependency-unsatisfied,range-conflict,dependency-version-unsatisfied,no-matching-tagdependencies.objectFields—marketplace,name,versiondependencies.prereleaseOptInsupporteddependencies.prunesupporteddependencies.rangeIntersectionsupporteddependencies.semverRangessupporteddependencies.tagConvention—{name}--v{version}
distributionPolicy
distributionPolicy.skillsDirectoryPluginsunavailable — Agent Bundle emits a plugin directory but does not place it in a Claude skills directory or register the host-owned @skills-dir identity. · 2 evidence notesdistributionPolicy.skillsDirectoryProjectTrustunavailable — Agent Bundle cannot grant or inspect the workspace trust required before Claude loads a project-scope @skills-dir plugin. · 1 evidence notedistributionPolicy.skillsDirectoryMcpApprovalunavailable — Agent Bundle can emit plugin MCP configuration but cannot complete Claude's per-server approval for a project-scope @skills-dir plugin. · 1 evidence notedistributionPolicy.skillsDirectoryLspTrustunavailable — Agent Bundle can emit plugin LSP configuration but cannot satisfy Claude's workspace-trust gate for a project-scope @skills-dir plugin. · 1 evidence notedistributionPolicy.skillsDirectoryMonitorsunavailable — Agent Bundle cannot make Claude load background monitors from a project-scope @skills-dir plugin, which the host explicitly skips. · 1 evidence notedistributionPolicy.pluginInstallScopessupported — 3 evidence notesdistributionPolicy.pluginReloadunavailable — Agent Bundle cannot reload or restart a running Claude session after plugin files or installed versions change. · 3 evidence notesdistributionPolicy.pluginTrustGatesunavailable — Agent Bundle cannot accept Claude workspace-trust, server-managed-settings approval, or command-source confirmation prompts on a user's behalf. · 2 evidence notesdistributionPolicy.syncedPluginsunavailable — Agent Bundle cannot synchronize or administer the @synced plugins attached to a user's claude.ai account. · 2 evidence notesdistributionPolicy.managedPluginScopeunavailable — Agent Bundle cannot create, remove, enable, or disable managed-scope plugins; Claude exposes that host-owned scope as read-only and update-only. · 1 evidence notedistributionPolicy.managedStrictKnownMarketplacesunavailable — Agent Bundle does not emit or override the organization-managed strictKnownMarketplaces allowlist. · 2 evidence notesdistributionPolicy.managedBlockedMarketplacesunavailable — Agent Bundle does not emit or override the organization-managed blockedMarketplaces denylist. · 2 evidence notesdistributionPolicy.managedDisableSideloadFlagsunavailable — Agent Bundle cannot configure or bypass disableSideloadFlags in Claude managed settings. · 1 evidence notedistributionPolicy.managedDisableCommandPluginSourcesunavailable — Agent Bundle emits no managed setting that can permit, block, or exempt Claude command plugin sources. · 2 evidence notesdistributionPolicy.managedAllowManagedHooksOnlyunavailable — Agent Bundle cannot configure allowManagedHooksOnly or claim that emitted plugin commands are exempt from that managed policy. · 2 evidence notesdistributionPolicy.managedPluginSuggestionsunavailable — Agent Bundle does not emit the managed pluginSuggestionMarketplaces allowlist or marketplace relevance signals for contextual installation suggestions. · 2 evidence notesdistributionPolicy.pluginCliLifecycleunavailable — Agent Bundle emits Claude plugin artifacts but does not invoke Claude's plugin creation, installation, state, update, inspection, or release commands. ·commands:init,new,install,uninstall,prune,enable,disable,update,list,details,tag· 2 evidence notesdistributionPolicy.marketplaceCliLifecycleunavailable — Agent Bundle emits marketplace manifests but does not add, list, remove, or update marketplaces in a user's Claude configuration. ·commands:add,list,remove,update· 2 evidence notes
packageLifecycle
packageLifecycle.nodeDependencyInstallunavailable — Agent Bundle emits compile-time plugin artifacts but does not currently place package.json plus a supported lockfile at the plugin root or run Claude's host-owned dependency install in a copied cache entry. ·manifest:package.json·commands.bun.lock:bun install --frozen-lockfile --ignore-scripts·commands.bun.lockb:bun install --frozen-lockfile --ignore-scripts·commands.npm-shrinkwrap.json:npm ci --ignore-scripts·commands.package-lock.json:npm ci --ignore-scripts·lockfilePrecedence:bun.lock,bun.lockb,npm-shrinkwrap.json,package-lock.json·timeoutSeconds:60· 5 evidence notespackageLifecycle.yarnPnpmInstallAlternativeunavailable — Agent Bundle does not run automatic Yarn or pnpm installs; Claude skips those lockfiles at host install time, while authors must explicitly install such dependencies from a hook into persistent plugin data. ·skippedLockfiles:yarn.lock,pnpm-lock.yaml·persistentDataToken:${CLAUDE_PLUGIN_DATA}· 2 evidence notespackageLifecycle.pluginCacheLifecycleunavailable — Agent Bundle emits compile-time artifacts; cache copying or linking, resolved-version directory naming, orphan marking and sweeping, symlink materialization, and host component path-escape rejection happen during Claude installation and runtime. ·cacheRoot:~/.claude/plugins/cache·orphanGraceDays:14· 6 evidence notespackageLifecycle.pluginPathSubstitutiondegraded — Agent Bundle lowers and validates its canonical path tokens in structured Claude MCP, LSP, settings, generated-hook, and monitor fields, but authored Skill content and target-native hook documents remain opaque compile-time payloads and actual placeholder substitution is owned by Claude at runtime. ·tokens:${CLAUDE_PLUGIN_ROOT},${CLAUDE_PLUGIN_DATA},${CLAUDE_PROJECT_DIR}·fields.skillAndAgentContent:anywhere·fields.hookCommands:command,args·fields.monitorCommands:command·fields.mcpStdio:command,args,env·fields.mcpRemote:url,headers,headersHelper·fields.lsp:command,args,env,workspaceFolder· 4 evidence notespackageLifecycle.pluginDataLifecycleunavailable — Agent Bundle can emit ${CLAUDE_PLUGIN_DATA} references but cannot observe the last installed scope, prompt for deletion, delete persistent data, or apply Claude's --keep-data uninstall option. ·deleteOnLastScopeUninstall:true·cliDeleteDefault:true·keepDataFlag:--keep-data· 2 evidence notes
experimentalThemes
experimentalThemes.defaultDirectory—themesexperimentalThemes.experimentalsupportedexperimentalThemes.manifestField—experimental.themesexperimentalThemes.readOnlysupported
devtools
devtools.detailssupporteddevtools.listJsonsupporteddevtools.pluginDirsupporteddevtools.strictValidationsupporteddevtools.tagsupporteddevtools.validatesupported
lsp
lsp.config—.lsp.jsonlsp.manifestField—lspServerslsp.manifestFieldTypes—array,object,stringlsp.optionalFields—args,diagnostics,env,initializationOptions,maxRestarts,restartOnCrash,settings,shutdownTimeout,startupTimeout,transport,workspaceFolderlsp.pathTokenFields—args,command,env,workspaceFolderlsp.requiredFields—command,extensionToLanguagelsp.transports—socket,stdiolsp.vendorsServerBinaryunavailable
nativeDiagnostics
nativeDiagnosticsunavailable — The pinned Claude plugin contract (2.1.260) documents no standalone diagnostics-provider component; diagnostics reach Claude Code only through thediagnosticsoption of an.lsp.jsonlanguage server, which is thelspkind. · 1 evidence note
nativeExtension
nativeExtensionunavailable — The pinned Claude plugin contract (2.1.260) documents no editor or native extension component; Claude Code plugins are CLI-loaded component trees, and IDE integrations ship separately from the plugin manifest. · 1 evidence note
metadata
metadata.defaultEnabled.defaultsupportedmetadata.defaultEnabled.dependencyRequirementPrecedencesupportedmetadata.defaultEnabled.fieldsupportedmetadata.defaultEnabled.marketplaceEntryPrecedencesupportedmetadata.defaultEnabled.persistedEnabledPluginsPrecedencesupportedmetadata.displayName.fallback—namemetadata.displayName.fieldsupportedmetadata.freeform.fieldsupportedmetadata.freeform.hostReadsValuesunavailablemetadata.freeform.nonObjectHandling—warning-and-ignoremetadata.freeform.strictValidation—failuremetadata.standardFields—$schema,author,description,homepage,keywords,license,repository,version
monitors
monitors.commandTokens—${CLAUDE_PLUGIN_ROOT},${CLAUDE_PLUGIN_DATA},${CLAUDE_PROJECT_DIR},${ENV_VAR}monitors.config—monitors/monitors.jsonmonitors.defaultWhen—alwaysmonitors.experimentalsupportedmonitors.interactiveCliOnlysupportedmonitors.manifestField—experimental.monitorsmonitors.monitorToolRequiredsupportedmonitors.projectScopeSkillsDirectoryPluginsunavailablemonitors.userConfigSubstitutionunavailablemonitors.unsandboxedsupported
manifest
manifest—.claude-plugin/plugin.json
marketplace
marketplace—.claude-plugin/marketplace.json
marketplaceManifest
marketplaceManifest.allowCrossMarketplaceDependenciesOnsupportedmarketplaceManifest.entryAuthenticationFields—headers,headersHelpermarketplaceManifest.entryMetadataFields—$schema,author,category,defaultEnabled,description,displayName,homepage,keywords,license,metadata,repository,strict,tags,versionmarketplaceManifest.entryRelevanceSignals—cli,cwd,filesRead,hosts,manifestDepsmarketplaceManifest.generatedSourceForms—relativemarketplaceManifest.sourceMatrix.archiveIntegrity—sha256-64-hexmarketplaceManifest.sourceMatrix.authoredForms—relative,github,url,git-subdir,npm,archive,commandmarketplaceManifest.sourceMatrix.generatedDefault—relativemarketplaceManifest.sourceMatrix.gitPinFields—ref,shamarketplaceManifest.sourceMatrix.shaOverridesRefsupportedmarketplaceManifest.sourceMatrix.versionGates.archive—2.1.224marketplaceManifest.sourceMatrix.versionGates.command—2.1.229marketplaceManifest.sourceMatrix.versionGates.pluginRootBareName—2.1.239marketplaceManifest.renamessupportedmarketplaceManifest.topLevelFields—$schema,allowCrossMarketplaceDependenciesOn,description,metadata,name,owner,plugins,renames,version
paths
paths.addsToDefault—skillspaths.fieldTypes—array,stringpaths.ignoredDefaultFolderWarningsupportedpaths.marketplaceRootSkillsSubdirectoriesReplaceDefaultsupportedpaths.relativePrefix—./paths.replacesDefault—agents,commands,experimental.monitors,experimental.themes,outputStyles,workflowspaths.skillsRootException—.paths.skillsRootExceptionSince—2.1.221
outputStyles
outputStyles.allowedSuffixes—.mdoutputStyles.directory—output-stylesoutputStyles.frontmatterFields—description,force-for-plugin,keep-coding-instructions,nameoutputStyles.manifestField—outputStylesoutputStyles.replacesDefaultsupported
settings
settings.config—settings.jsonsettings.placeholderSubstitutionunavailablesettings.precedesManifestSettingssupportedsettings.subagentStatusLineFields—command,typesettings.supportedKeys—agent,subagentStatusLinesettings.unknownKeysIgnoredsupported
skillFeatures
skillFeatures.hostFrontmattersupported — 1 evidence noteskillFeatures.markdownTokenssupported — 1 evidence note
skills
skillssupported
userConfig
userConfig.envVarPrefix—CLAUDE_PLUGIN_OPTION_userConfig.installConfigFlagsupporteduserConfig.optionalFields—default,max,min,multiple,required,sensitiveuserConfig.projectSettingsIgnoredsupporteduserConfig.requiredFields—type,title,descriptionuserConfig.sensitiveStoragesupporteduserConfig.settingsSources—managed,--settings,useruserConfig.shellSubstitutionRejected—hookShellCommands,monitorCommands,mcpHeadersHelperuserConfig.substitutionToken—${user_config.KEY}userConfig.types—boolean,directory,file,number,string
workflows
workflows.directory—workflowsworkflows.fileContents—opaqueworkflows.manifestField—workflowsworkflows.replacesDefaultsupported
web
websupported — browser host inside the composite artifact; <plugin> web runs from the installed root on any host
codex 0.147.0
apps
apps.registeredMcpMappingssupported — 1 evidence note
components
components.lspunavailable — The pinned Codex plugin contract publishes no LSP server surface; language-server configuration reaches Claude Code only. · 1 evidence notecomponents.nativeDiagnosticsunavailable — The pinned Codex plugin contract publishes no diagnostics-provider component; plugin-shipped diagnostics have no schema-backed authoring field, so the compiler emits none. · 1 evidence notecomponents.nativeExtensionunavailable — The pinned Codex plugin contract publishes no plugin-shipped editor or native extension component; the host-managed browser-extension part has no authoring field, so the compiler emits none. · 1 evidence note
overviewSurfaces
overviewSurfaces.mcpUidegraded — Agent Bundle compiles MCP Apps asui://resources with_metapassthrough served by the compiled MCP server, which is the open MCP Apps contract that ChatGPT renders; Codex CLI 0.147.0 renders no components, so the emitted UI is inert there and every tool remains usable without it. Rendering is a ChatGPT host surface, not a Codex plugin artifact. · 3 evidence notesoverviewSurfaces.browserExtensionsunavailable — Browser extensions are host-managed plugin parts with no schema-backed authoring field in the pinned .codex-plugin/plugin.json contract; the compiler infers nothing and the closed manifest schema rejects any authored field until a package contract publishes one. · 2 evidence notesoverviewSurfaces.scheduledTaskTemplatesunavailable — Scheduled task templates are host-managed plugin parts with no schema-backed authoring field in the pinned .codex-plugin/plugin.json contract; the compiler infers nothing and the closed manifest schema rejects any authored field until a package contract publishes one. · 2 evidence notes
hookEnvironment
hookEnvironment.claudePluginDatasupported — 1 evidence notehookEnvironment.claudePluginRootsupported — 1 evidence notehookEnvironment.pluginDatasupported — 1 evidence notehookEnvironment.pluginRootsupported — 1 evidence note
interface
interface.assetssupported — 1 evidence noteinterface.brandColorsupported — 1 evidence noteinterface.categoryCapabilitiessupported — 1 evidence noteinterface.descriptionssupported — 1 evidence noteinterface.identitysupported — 1 evidence noteinterface.starterPromptssupported — 1 evidence noteinterface.urlssupported — 1 evidence note
manifest
manifest—.codex-plugin/plugin.json
marketplace
marketplace—.agents/plugins/marketplace.json
manifestPackage
manifestPackage.manifestMetadatasupported —fields:author.name,author.email,author.url,homepage,repository,license,keywords· 2 evidence notesmanifestPackage.manifestPathsdegraded — The adapter emits canonical component locations and validates all documented forms, but it has no authored config surface for selecting custom component paths or inline component objects. ·admitted.hooks:path,path-array,inline-object,inline-object-array·admitted.mcpServers:path,inline-object·admitted.skills:path·emitted.hooks:./hooks/hooks.json·emitted.mcpServers:./.mcp.json·emitted.skills:./skills/· 3 evidence notesmanifestPackage.optionalAssetsunavailable — The Codex adapter copies selected assets but cannot author composerIcon, logo, logoDark, or screenshots references in the manifest. ·assets:interface.composerIcon,interface.logo,interface.logoDark,interface.screenshots· 2 evidence notesmanifestPackage.submissionPolicyunavailable — Public submission requirements are portal-owned distribution policy with no compiler-authored or compiler-validation surface. ·constraints:Apps Management write access,verified developer or business identity,listing and policy URLs,production MCP review materials,five positive and three negative test cases,country or region availability,release notes and policy attestations· 3 evidence notes
mcpServerPolicy
mcpServerPolicy.approvalModesunavailable — Plugin MCP approval modes are host-owned user configuration underplugins.<plugin>.mcp_servers.<server>; the compiler emits plugin artifacts and does not write the user's config.toml. · 1 evidence notemcpServerPolicy.enabledunavailable — Plugin MCP enabled state is host-owned user configuration underplugins.<plugin>.mcp_servers.<server>; the compiler emits plugin artifacts and does not write the user's config.toml. · 1 evidence notemcpServerPolicy.toolsunavailable — Plugin MCP tool selection is host-owned user configuration underplugins.<plugin>.mcp_servers.<server>; the compiler emits plugin artifacts and does not write the user's config.toml. · 1 evidence note
skillFeatures
skillFeatures.hostFrontmattersupported — 1 evidence noteskillFeatures.markdownTokensunavailable — The pinned Codex skills contract (0.147.0) documents no Skill Markdown interpolation placeholders; a skill body token has no Codex equivalent and fails closed (AB3008). · 1 evidence note
skills
skillssupported
web
websupported — browser host inside the composite artifact; <plugin> web runs from the installed root on any host
cursor 2026-08-28
agents
agents.componentunavailable — The #100 stage-2 G5 gate, merged in PR #220 and preserved by #107 revision 3, deliberately defers Agent Bundle's authored plugin agents/ component; Cursor documents the component, but this compiler emits no agents/ directory or manifest agents pointer until a later stage admits it. · 2 evidence notes
canvases
canvasesunavailable — Cursor advertises plugin canvases without publishing a schema-backed authoring contract; no canvas component is inferred from marketplace examples, so this compiler emits none. · 1 evidence note
commandFrontmatter
commandFrontmatterunavailable — The pinned Cursor commands surface is frontmatter-free Markdown: the lowering emits the prompt body only, so authored command frontmatter fields do not reach Cursor. ·fields:allowedTools,argumentHint,description,disableModelInvocation,model· 2 evidence notes
commands
commandssupported
componentDiscovery
componentDiscoverysupported —defaults.agents:agents/ (.md, .mdc, .markdown)·defaults.commands:commands/ (.md, .mdc, .markdown, .txt)·defaults.hooks:hooks/hooks.json·defaults.mcpServers:mcp.json·defaults.rootSkill:SKILL.md at the plugin root (only without skills/ and without a manifest skills field)·defaults.rules:rules/ (.md, .mdc, .markdown)·defaults.skills:skills/<name>/SKILL.md·emitted.commands:./commands/·emitted.hooks:./.cursor-plugin/hooks.json·emitted.mcpServers:./.cursor-plugin/mcp.json·emitted.rules:./rules/·emitted.skills:./skills/·replacement:manifest-path-replaces-default-scan· 2 evidence notes
contract
contract—cursor-plugin
distributionPolicy
distributionPolicy.autoRefreshunavailable — Agent Bundle emits marketplace documents but does not configure dashboard Auto Refresh, install the Cursor GitHub App, or trigger manual re-indexing. · 1 evidence notedistributionPolicy.installModesunavailable — Installation modes are set per plugin by team admins in Dashboard -> Plugins; no plugin manifest or marketplace field declares them, so this compiler emits nothing for them. ·modes:Default Off,Default On,Required· 1 evidence notedistributionPolicy.localPluginImportsunavailable — Agent Bundle's installer copies into ~/.cursor/plugins/local but cannot grant the admin-controlled Allow Local Plugin Imports setting a Teams or Enterprise user needs before Cursor discovers the copy. · 1 evidence notedistributionPolicy.localSymlinkInstallunavailable — The generated installer and doctor guidance copy the built bundle instead of symlinking it: Cursor's docs now show a symlink, but the observed loader rejected symlinks resolving outside ~/.cursor/plugins/local, and a copy loads under both readings. · 3 evidence notesdistributionPolicy.marketplaceAccessunavailable — Marketplace scope and access are dashboard settings on the team's marketplace, not plugin-authored fields; this compiler emits nothing for them. · 1 evidence notedistributionPolicy.marketplaceReviewunavailable — Agent Bundle emits a checklist-conformant artifact (manifest, relative pointers, declared variables, copied logo) but does not host it in a Git repository, submit it, or complete Cursor's manual review. · 1 evidence notedistributionPolicy.teamMarketplacesunavailable — Team marketplaces are created and populated in the Cursor dashboard from a Git repository; this compiler emits the repository-side .cursor-plugin/marketplace.json only. · 1 evidence note
formats
formats.agentPluginunavailable — The cursor target emits the full Cursor Plugin format only; the portable Agent Plugin format is emitted by the portable target and is never mixed into this artifact. ·manifest:plugin.json· 2 evidence notesformats.cursorPluginsupported —manifest:.cursor-plugin/plugin.json· 1 evidence note
lsp
lspunavailable — The pinned Cursor Plugin contract publishes no LSP server component; language intelligence is editor-owned and not a plugin component pointer, so language-server configuration reaches Claude Code only. · 1 evidence note
nativeDiagnostics
nativeDiagnosticsunavailable — The pinned Cursor Plugin contract publishes no diagnostics-provider component, so the compiler emits none. · 1 evidence note
nativeExtension
nativeExtensionunavailable — The pinned Cursor Plugin contract publishes no plugin-shipped editor extension component; editor extensions are outside the plugin manifest at this pin, so a plugin cannot vendor or register one. · 1 evidence note
ruleFrontmatter
ruleFrontmattersupported —fields:alwaysApply,description,globs· 1 evidence note
skillFeatures
skillFeatures.hostFrontmattersupported — 1 evidence noteskillFeatures.markdownTokensunavailable — The pinned Cursor skills contract (2026-08-28) documents no Skill Markdown interpolation placeholders; a skill body token has no Cursor equivalent and fails closed (AB3008). · 1 evidence note
localInstall
localInstall.method—copylocalInstall.root—~/.cursor/plugins/local/<name>
manifest
manifest—.cursor-plugin/plugin.json
manifestMetadata
manifestMetadatasupported —authoredFields:author.name,author.email,homepage,repository,license,keywords,publisher,category,tags,minClientVersions·generatedFields:name,displayName,description,version,logo,commands,hooks,mcpServers,rules,skills,variables·schemaOnlyFields:displayName,publisher,category,tags,minClientVersions· 3 evidence notes
marketplace
marketplace—.cursor-plugin/marketplace.json
marketplaceManifest
marketplaceManifestsupported —entryFields:name,source,description,version,author,homepage,repository,license,keywords,logo,category,tags,skills,rules,agents,commands,hooks,mcpServers,variables·generatedEntryFields:name,source,description·maxEntries:500·mergePrecedence:plugin-manifest-over-marketplace-entry· 3 evidence notes
rootSkill
rootSkillunavailable — Agent Bundle always emits skills under skills/<name>/SKILL.md with an explicit manifest skills pointer, so the root SKILL.md single-skill fallback is never produced. · 1 evidence note
rules
rulessupported
schema
schema—cursor/plugins@070189284e702e8a4d2e3cc8913994b204c5337a:schemas/plugin.schema.json
skills
skillssupported
variables
variablessupported —acceptedKeywords:type,title,description,default,enum,const,properties,required,items,length and numeric constraints·secretValuesEmitted:false· 2 evidence notes
web
websupported — browser host inside the composite artifact; <plugin> web runs from the installed root on any host
portable 1.0.0
cursorLocalInstall
cursorLocalInstall.placeholderExpansionsupported — Cursor 3.18.25 expands no Agent Plugins placeholder, provides no PLUGIN_ROOT/PLUGIN_DATA, defaults an omitted cwd to the home directory and resolves ./ commands against the workspace (spec §7.2.1/§9); the emitted installer rewrites mcp.json in the ~/.cursor/plugins/local/<name> copy with absolute paths (PLUGIN_DATA = ~/.cursor/agent-bundle/plugin-data/<name>, created), keeps the shipped document in the receipt, and Doctor proves the expanded paths (AB7326). Never claimed as Cursor behaviour: the bundle itself still relies on the consuming client. ·installer:install.mjs (emitted with the portable bundle)·provenance:derived· 2 evidence notes
extensionDirectories
extensionDirectoriesunavailable — 2026-09-02: Agent Plugins 1.0.0 §8.2 reserves top-level reverse-domain directories for client-owned files; the compiler emits no client extension directory because no pinned client publishes a file-based namespace contract for this format (https://agent-plugins.org/specification).
extensions
extensionssupported —configKey:portable.extensions· 1 evidence note
lsp
lspunavailable — The portable Agent Plugin contract (1.0.0) defines only skills and MCP components; it has no LSP server surface. · 1 evidence note
manifest
manifest—plugin.json
manifestMetadata
manifestMetadatasupported —configKey:portable·fields:author,homepage,keywords,license,repository· 1 evidence note
nativeDiagnostics
nativeDiagnosticsunavailable — The portable Agent Plugin contract (1.0.0) defines only skills and MCP components; it has no native diagnostics surface. · 1 evidence note
nativeExtension
nativeExtensionunavailable — The portable Agent Plugin contract (1.0.0) defines only skills and MCP components; it has no native extension surface, and its reverse-domainextensionsmetadata is not one. · 1 evidence note
skillFeatures
skillFeatures.hostFrontmatterunavailable — The Agent Skills specification pinned for the portable target defines only the portable frontmatter fields; host-specific extensions are not emitted in the portable SKILL.md. · 1 evidence noteskillFeatures.markdownTokensunavailable — The Agent Skills specification pinned for the portable target documents no Skill Markdown interpolation placeholders; a skill body token has no portable equivalent and fails closed (AB3008). · 1 evidence note
skills
skillssupported
web
websupported — browser host inside the composite artifact; <plugin> web runs from the installed root on any host