#Host capability matrix
This page is rendered at documentation build time from the pinned host capability tables claude-2.1.250.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.
#Pinned hosts
| Host | Observed version | Plugin manifest | Marketplace manifest | Hooks document |
|---|---|---|---|---|
claude | 2.1.250 | .claude-plugin/plugin.json | .claude-plugin/marketplace.json | hooks/hooks.json |
codex | 0.147.0 | .codex-plugin/plugin.json | .agents/plugins/marketplace.json | hooks/hooks.json |
cursor | 2026-08-28 | .cursor-plugin/plugin.json | .cursor-plugin/marketplace.json | hooks/hooks.json |
portable | 1.0.0 | plugin.json | — | — |
#Install surface
| Host | State | Method / commands | Scopes | Source |
|---|---|---|---|---|
claude | supported | marketplaceAdd: claude plugin marketplace add ./pluginInstall: claude plugin install <plugin>@<marketplace> --scope <scope> | user, project, local | https://code.claude.com/docs/en/discover-plugins |
codex | supported | marketplaceAdd: codex plugin marketplace add ./pluginInstall: codex plugin add <plugin>@<marketplace> | user | https://developers.openai.com/codex/cli/reference |
cursor | supported | method: copylocalRoot: ~/.cursor/plugins/local/<name> | user | https://cursor.com/docs/plugins |
portable | unavailable | Portable is a distribution profile, not a host runtime with one universal plugin installation location. | — | https://agent-plugins.org/ |
#Path tokens
| Token | claude 2.1.250 | codex 0.147.0 | cursor 2026-08-28 | portable 1.0.0 |
|---|---|---|---|---|
pluginData | ${CLAUDE_PLUGIN_DATA} | — | — | ${PLUGIN_DATA} |
pluginRoot | ${CLAUDE_PLUGIN_ROOT} | relative-with-plugin-root-cwd | ${CURSOR_PLUGIN_ROOT} | ${PLUGIN_ROOT} |
workspaceRoot | ${CLAUDE_PROJECT_DIR} | — | ${workspaceFolder} | — |
#MCP transports and token fields
| Host | stdio | Streamable HTTP | Fields accepting path tokens |
|---|---|---|---|
claude | supported | supported | command: ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA}, ${CLAUDE_PROJECT_DIR}args: ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA}, ${CLAUDE_PROJECT_DIR}env: ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA}, ${CLAUDE_PROJECT_DIR}url: ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA}, ${CLAUDE_PROJECT_DIR}headers: ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA}, ${CLAUDE_PROJECT_DIR}headersHelper: ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA}, ${CLAUDE_PROJECT_DIR} |
codex | supported | supported | No host interpolation. command, args, env values, and cwd accept a leading ${PLUGIN_ROOT} only when cwd is the plugin root; the compiler rewrites it to a ./-relative path under cwd: "./". Embedded tokens, ${PLUGIN_DATA}, and workspace-root tokens are build errors. |
cursor | supported | supported | args: ${CURSOR_PLUGIN_ROOT}, ${workspaceFolder}env: ${CURSOR_PLUGIN_ROOT}, ${workspaceFolder}headers: ${CURSOR_PLUGIN_ROOT}, ${workspaceFolder}url: ${CURSOR_PLUGIN_ROOT}, ${workspaceFolder} |
portable | supported | supported | args: ${PLUGIN_DATA}, ${PLUGIN_ROOT}cwd: ${PLUGIN_DATA}, ${PLUGIN_ROOT}env: ${PLUGIN_DATA}, ${PLUGIN_ROOT} |
#Plugin components
The plugin section of each table, flattened to dotted capability paths. Boolean rows record a component the adapter emits; rows with a state carry the reason the host evidence supports or withholds it. Evidence notes stay in the JSON files.
#claude 2.1.250
| Capability | State | Detail |
|---|---|---|
agents.component | unavailable | 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 notes |
agents.name | unavailable | 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. 2 evidence notes |
agents.description | unavailable | 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 notes |
agents.model | unavailable | 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 notes |
agents.effort | unavailable | 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 notes |
agents.maxTurns | unavailable | 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 notes |
agents.tools | unavailable | 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 notes |
agents.disallowedTools | unavailable | 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 notes |
agents.skills | unavailable | 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 notes |
agents.memory | unavailable | 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 notes |
agents.background | unavailable | 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 notes |
agents.isolationWorktree | unavailable | 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 notes |
agents.hooks | unavailable | 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 omit hooks under the host security contract. 3 evidence notes |
agents.mcpServers | unavailable | 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 omit mcpServers under the host security contract. 3 evidence notes |
agents.permissionMode | unavailable | 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 omit permissionMode under the host security contract. 3 evidence notes |
bin.bareCommands | supported | — |
bin.bashPath | supported | — |
bin.directory | — | bin |
bin.enabledOnly | supported | — |
bin.organizationDistributionProhibited | supported | — |
channels.bindsToPluginMcpServer | supported | — |
channels.perChannelUserConfig | supported | — |
commandFrontmatter | supported | fields: {"allowedTools":"allowed-tools","argumentHint":"argument-hint","description":"description","disableModelInvocation":"disable-model-invocation","model":"model"}2 evidence notes |
commands | supported | — |
dependencies.autoInstall | supported | — |
dependencies.autoInstallExceptions | — | command-source, headersHelper |
dependencies.crossMarketplaceAllowlist | — | allowCrossMarketplaceDependenciesOn |
dependencies.entryForms | — | name, object |
dependencies.errorCodes | — | dependency-unsatisfied, range-conflict, dependency-version-unsatisfied, no-matching-tag |
dependencies.objectFields | — | marketplace, name, version |
dependencies.prereleaseOptIn | supported | — |
dependencies.prune | supported | — |
dependencies.rangeIntersection | supported | — |
dependencies.semverRanges | supported | — |
dependencies.tagConvention | — | {name}--v{version} |
distributionPolicy.skillsDirectoryPlugins | unavailable | 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 notes |
distributionPolicy.skillsDirectoryProjectTrust | unavailable | Agent Bundle cannot grant or inspect the workspace trust required before Claude loads a project-scope @skills-dir plugin. 1 evidence note |
distributionPolicy.skillsDirectoryMcpApproval | unavailable | Agent Bundle can emit plugin MCP configuration but cannot complete Claude's per-server approval for a project-scope @skills-dir plugin. 1 evidence note |
distributionPolicy.skillsDirectoryLspTrust | unavailable | Agent Bundle can emit plugin LSP configuration but cannot satisfy Claude's workspace-trust gate for a project-scope @skills-dir plugin. 1 evidence note |
distributionPolicy.skillsDirectoryMonitors | unavailable | Agent Bundle cannot make Claude load background monitors from a project-scope @skills-dir plugin, which the host explicitly skips. 1 evidence note |
distributionPolicy.pluginInstallScopes | supported | 3 evidence notes |
distributionPolicy.pluginReload | unavailable | Agent Bundle cannot reload or restart a running Claude session after plugin files or installed versions change. 3 evidence notes |
distributionPolicy.pluginTrustGates | unavailable | Agent Bundle cannot accept Claude workspace-trust, server-managed-settings approval, or command-source confirmation prompts on a user's behalf. 2 evidence notes |
distributionPolicy.syncedPlugins | unavailable | Agent Bundle cannot synchronize or administer the @synced plugins attached to a user's claude.ai account. 2 evidence notes |
distributionPolicy.managedPluginScope | unavailable | 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 note |
distributionPolicy.managedStrictKnownMarketplaces | unavailable | Agent Bundle does not emit or override the organization-managed strictKnownMarketplaces allowlist. 2 evidence notes |
distributionPolicy.managedBlockedMarketplaces | unavailable | Agent Bundle does not emit or override the organization-managed blockedMarketplaces denylist. 2 evidence notes |
distributionPolicy.managedDisableSideloadFlags | unavailable | Agent Bundle cannot configure or bypass disableSideloadFlags in Claude managed settings. 1 evidence note |
distributionPolicy.managedDisableCommandPluginSources | unavailable | Agent Bundle emits no managed setting that can permit, block, or exempt Claude command plugin sources. 2 evidence notes |
distributionPolicy.managedAllowManagedHooksOnly | unavailable | Agent Bundle cannot configure allowManagedHooksOnly or claim that emitted plugin commands are exempt from that managed policy. 2 evidence notes |
distributionPolicy.managedPluginSuggestions | unavailable | Agent Bundle does not emit the managed pluginSuggestionMarketplaces allowlist or marketplace relevance signals for contextual installation suggestions. 2 evidence notes |
distributionPolicy.pluginCliLifecycle | unavailable | 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, tag2 evidence notes |
distributionPolicy.marketplaceCliLifecycle | unavailable | Agent Bundle emits marketplace manifests but does not add, list, remove, or update marketplaces in a user's Claude configuration.commands: add, list, remove, update2 evidence notes |
packageLifecycle.nodeDependencyInstall | unavailable | 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.jsoncommands: {"bun.lock":"bun install --frozen-lockfile --ignore-scripts","bun.lockb":"bun install --frozen-lockfile --ignore-scripts","npm-shrinkwrap.json":"npm ci --ignore-scripts","package-lock.json":"npm ci --ignore-scripts"}lockfilePrecedence: bun.lock, bun.lockb, npm-shrinkwrap.json, package-lock.jsontimeoutSeconds: 605 evidence notes |
packageLifecycle.yarnPnpmInstallAlternative | unavailable | 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.yamlpersistentDataToken: ${CLAUDE_PLUGIN_DATA}2 evidence notes |
packageLifecycle.pluginCacheLifecycle | unavailable | 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/cacheorphanGraceDays: 146 evidence notes |
packageLifecycle.pluginPathSubstitution | degraded | 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"],"hookCommands":["command","args"],"monitorCommands":["command"],"mcpStdio":["command","args","env"],"mcpRemote":["url","headers","headersHelper"],"lsp":["command","args","env","workspaceFolder"]}4 evidence notes |
packageLifecycle.pluginDataLifecycle | unavailable | 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: truecliDeleteDefault: truekeepDataFlag: --keep-data2 evidence notes |
experimentalThemes.defaultDirectory | — | themes |
experimentalThemes.experimental | supported | — |
experimentalThemes.manifestField | — | experimental.themes |
experimentalThemes.readOnly | supported | — |
devtools.details | supported | — |
devtools.listJson | supported | — |
devtools.pluginDir | supported | — |
devtools.strictValidation | supported | — |
devtools.tag | supported | — |
devtools.validate | supported | — |
lsp.config | — | .lsp.json |
lsp.manifestField | — | lspServers |
lsp.manifestFieldTypes | — | array, object, string |
lsp.optionalFields | — | args, diagnostics, env, initializationOptions, maxRestarts, restartOnCrash, settings, shutdownTimeout, startupTimeout, transport, workspaceFolder |
lsp.pathTokenFields | — | args, command, env, workspaceFolder |
lsp.requiredFields | — | command, extensionToLanguage |
lsp.transports | — | socket, stdio |
lsp.vendorsServerBinary | unavailable | — |
nativeDiagnostics | unavailable | The pinned Claude plugin contract (2.1.250) documents no standalone diagnostics-provider component; diagnostics reach Claude Code only through the diagnostics option of an .lsp.json language server, which is the lsp kind.1 evidence note |
nativeExtension | unavailable | The pinned Claude plugin contract (2.1.250) 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.defaultEnabled.default | supported | — |
metadata.defaultEnabled.dependencyRequirementPrecedence | supported | — |
metadata.defaultEnabled.field | supported | — |
metadata.defaultEnabled.marketplaceEntryPrecedence | supported | — |
metadata.defaultEnabled.persistedEnabledPluginsPrecedence | supported | — |
metadata.displayName.fallback | — | name |
metadata.displayName.field | supported | — |
metadata.freeform.field | supported | — |
metadata.freeform.hostReadsValues | unavailable | — |
metadata.freeform.nonObjectHandling | — | warning-and-ignore |
metadata.freeform.strictValidation | — | failure |
metadata.standardFields | — | $schema, author, description, homepage, keywords, license, repository, version |
monitors.commandTokens | — | ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA}, ${CLAUDE_PROJECT_DIR}, ${ENV_VAR} |
monitors.config | — | monitors/monitors.json |
monitors.defaultWhen | — | always |
monitors.experimental | supported | — |
monitors.interactiveCliOnly | supported | — |
monitors.manifestField | — | experimental.monitors |
monitors.monitorToolRequired | supported | — |
monitors.projectScopeSkillsDirectoryPlugins | unavailable | — |
monitors.userConfigSubstitution | unavailable | — |
monitors.unsandboxed | supported | — |
manifest | — | .claude-plugin/plugin.json |
marketplace | — | .claude-plugin/marketplace.json |
marketplaceManifest.allowCrossMarketplaceDependenciesOn | supported | — |
marketplaceManifest.entryAuthenticationFields | — | headers, headersHelper |
marketplaceManifest.entryMetadataFields | — | $schema, author, category, defaultEnabled, description, displayName, homepage, keywords, license, metadata, repository, strict, tags, version |
marketplaceManifest.entryRelevanceSignals | — | cli, cwd, filesRead, hosts, manifestDeps |
marketplaceManifest.generatedSourceForms | — | relative |
marketplaceManifest.sourceMatrix.archiveIntegrity | — | sha256-64-hex |
marketplaceManifest.sourceMatrix.authoredForms | — | relative, github, url, git-subdir, npm, archive, command |
marketplaceManifest.sourceMatrix.generatedDefault | — | relative |
marketplaceManifest.sourceMatrix.gitPinFields | — | ref, sha |
marketplaceManifest.sourceMatrix.shaOverridesRef | supported | — |
marketplaceManifest.sourceMatrix.versionGates.archive | — | 2.1.224 |
marketplaceManifest.sourceMatrix.versionGates.command | — | 2.1.229 |
marketplaceManifest.sourceMatrix.versionGates.pluginRootBareName | — | 2.1.239 |
marketplaceManifest.renames | supported | — |
marketplaceManifest.topLevelFields | — | $schema, allowCrossMarketplaceDependenciesOn, description, metadata, name, owner, plugins, renames, version |
paths.addsToDefault | — | skills |
paths.fieldTypes | — | array, string |
paths.ignoredDefaultFolderWarning | supported | — |
paths.marketplaceRootSkillsSubdirectoriesReplaceDefault | supported | — |
paths.relativePrefix | — | ./ |
paths.replacesDefault | — | agents, commands, experimental.monitors, experimental.themes, outputStyles, workflows |
paths.skillsRootException | — | . |
paths.skillsRootExceptionSince | — | 2.1.221 |
outputStyles.allowedSuffixes | — | .md |
outputStyles.directory | — | output-styles |
outputStyles.frontmatterFields | — | description, force-for-plugin, keep-coding-instructions, name |
outputStyles.manifestField | — | outputStyles |
outputStyles.replacesDefault | supported | — |
settings.config | — | settings.json |
settings.placeholderSubstitution | unavailable | — |
settings.precedesManifestSettings | supported | — |
settings.subagentStatusLineFields | — | command, type |
settings.supportedKeys | — | agent, subagentStatusLine |
settings.unknownKeysIgnored | supported | — |
skillFeatures.hostFrontmatter | supported | 1 evidence note |
skillFeatures.markdownTokens | supported | 1 evidence note |
skills | supported | — |
userConfig.envVarPrefix | — | CLAUDE_PLUGIN_OPTION_ |
userConfig.installConfigFlag | supported | — |
userConfig.optionalFields | — | default, max, min, multiple, required, sensitive |
userConfig.projectSettingsIgnored | supported | — |
userConfig.requiredFields | — | type, title, description |
userConfig.sensitiveStorage | supported | — |
userConfig.settingsSources | — | managed, --settings, user |
userConfig.shellSubstitutionRejected | — | hookShellCommands, monitorCommands, mcpHeadersHelper |
userConfig.substitutionToken | — | ${user_config.KEY} |
userConfig.types | — | boolean, directory, file, number, string |
workflows.directory | — | workflows |
workflows.fileContents | — | opaque |
workflows.manifestField | — | workflows |
workflows.replacesDefault | supported | — |
#codex 0.147.0
| Capability | State | Detail |
|---|---|---|
apps.registeredMcpMappings | supported | 1 evidence note |
components.lsp | unavailable | The pinned Codex plugin contract publishes no LSP server surface; language-server configuration reaches Claude Code only. 1 evidence note |
components.nativeDiagnostics | unavailable | 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 note |
components.nativeExtension | unavailable | 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.mcpUi | degraded | Agent Bundle compiles MCP Apps as ui:// resources with _meta passthrough 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 notes |
overviewSurfaces.browserExtensions | unavailable | 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 notes |
overviewSurfaces.scheduledTaskTemplates | unavailable | 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.claudePluginData | supported | 1 evidence note |
hookEnvironment.claudePluginRoot | supported | 1 evidence note |
hookEnvironment.pluginData | supported | 1 evidence note |
hookEnvironment.pluginRoot | supported | 1 evidence note |
interface.assets | supported | 1 evidence note |
interface.brandColor | supported | 1 evidence note |
interface.categoryCapabilities | supported | 1 evidence note |
interface.descriptions | supported | 1 evidence note |
interface.identity | supported | 1 evidence note |
interface.starterPrompts | supported | 1 evidence note |
interface.urls | supported | 1 evidence note |
manifest | — | .codex-plugin/plugin.json |
marketplace | — | .agents/plugins/marketplace.json |
manifestPackage.manifestMetadata | supported | fields: author.name, author.email, author.url, homepage, repository, license, keywords2 evidence notes |
manifestPackage.manifestPaths | degraded | 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"],"mcpServers":["path","inline-object"],"skills":["path"]}emitted: {"hooks":"./hooks/hooks.json","mcpServers":"./.mcp.json","skills":"./skills/"}3 evidence notes |
manifestPackage.optionalAssets | unavailable | 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.screenshots2 evidence notes |
manifestPackage.submissionPolicy | unavailable | 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 attestations3 evidence notes |
mcpServerPolicy.approvalModes | unavailable | Plugin MCP approval modes are host-owned user configuration under plugins.<plugin>.mcp_servers.<server>; the compiler emits plugin artifacts and does not write the user's config.toml.1 evidence note |
mcpServerPolicy.enabled | unavailable | Plugin MCP enabled state is host-owned user configuration under plugins.<plugin>.mcp_servers.<server>; the compiler emits plugin artifacts and does not write the user's config.toml.1 evidence note |
mcpServerPolicy.tools | unavailable | Plugin MCP tool selection is host-owned user configuration under plugins.<plugin>.mcp_servers.<server>; the compiler emits plugin artifacts and does not write the user's config.toml.1 evidence note |
skillFeatures.hostFrontmatter | supported | 1 evidence note |
skillFeatures.markdownTokens | unavailable | 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 | supported | — |
#cursor 2026-08-28
| Capability | State | Detail |
|---|---|---|
agents.component | unavailable | 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 | unavailable | 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 | unavailable | 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, model2 evidence notes |
commands | supported | — |
componentDiscovery | supported | defaults: {"agents":"agents/ (.md, .mdc, .markdown)","commands":"commands/ (.md, .mdc, .markdown, .txt)","hooks":"hooks/hooks.json","mcpServers":"mcp.json","rootSkill":"SKILL.md at the plugin root (only without skills/ and without a manifest skills field)","rules":"rules/ (.md, .mdc, .markdown)","skills":"skills/<name>/SKILL.md"}emitted: {"commands":"./commands/","hooks":"./hooks/hooks.json","mcpServers":"./mcp.json","rules":"./rules/","skills":"./skills/"}replacement: manifest-path-replaces-default-scan2 evidence notes |
contract | — | cursor-plugin |
distributionPolicy.autoRefresh | unavailable | Agent Bundle emits marketplace documents but does not configure dashboard Auto Refresh, install the Cursor GitHub App, or trigger manual re-indexing. 1 evidence note |
distributionPolicy.installModes | unavailable | 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, Required1 evidence note |
distributionPolicy.localPluginImports | unavailable | 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 note |
distributionPolicy.localSymlinkInstall | unavailable | 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 notes |
distributionPolicy.marketplaceAccess | unavailable | Marketplace scope and access are dashboard settings on the team's marketplace, not plugin-authored fields; this compiler emits nothing for them. 1 evidence note |
distributionPolicy.marketplaceReview | unavailable | 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 note |
distributionPolicy.teamMarketplaces | unavailable | 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.agentPlugin | unavailable | 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.json2 evidence notes |
formats.cursorPlugin | supported | manifest: .cursor-plugin/plugin.json1 evidence note |
lsp | unavailable | 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 | unavailable | The pinned Cursor Plugin contract publishes no diagnostics-provider component, so the compiler emits none. 1 evidence note |
nativeExtension | unavailable | 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 | supported | fields: alwaysApply, description, globs1 evidence note |
skillFeatures.hostFrontmatter | supported | 1 evidence note |
skillFeatures.markdownTokens | unavailable | 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.method | — | copy |
localInstall.root | — | ~/.cursor/plugins/local/<name> |
manifest | — | .cursor-plugin/plugin.json |
manifestMetadata | supported | authoredFields: author.name, author.email, homepage, repository, license, keywords, publisher, category, tags, minClientVersionsgeneratedFields: name, displayName, description, version, logo, commands, hooks, mcpServers, rules, skills, variablesschemaOnlyFields: displayName, publisher, category, tags, minClientVersions3 evidence notes |
marketplace | — | .cursor-plugin/marketplace.json |
marketplaceManifest | supported | entryFields: name, source, description, version, author, homepage, repository, license, keywords, logo, category, tags, skills, rules, agents, commands, hooks, mcpServers, variablesgeneratedEntryFields: name, source, descriptionmaxEntries: 500mergePrecedence: plugin-manifest-over-marketplace-entry3 evidence notes |
rootSkill | unavailable | 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 | supported | — |
schema | — | cursor/plugins@070189284e702e8a4d2e3cc8913994b204c5337a:schemas/plugin.schema.json |
skills | supported | — |
variables | supported | acceptedKeywords: type, title, description, default, enum, const, properties, required, items, length and numeric constraintssecretValuesEmitted: false2 evidence notes |
#portable 1.0.0
| Capability | State | Detail |
|---|---|---|
extensionDirectories | unavailable | 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 | supported | configKey: portable.extensions1 evidence note |
lsp | unavailable | The portable Agent Plugin contract (1.0.0) defines only skills and MCP components; it has no LSP server surface. 1 evidence note |
manifest | — | plugin.json |
manifestMetadata | supported | configKey: portablefields: author, homepage, keywords, license, repository1 evidence note |
nativeDiagnostics | unavailable | The portable Agent Plugin contract (1.0.0) defines only skills and MCP components; it has no native diagnostics surface. 1 evidence note |
nativeExtension | unavailable | The portable Agent Plugin contract (1.0.0) defines only skills and MCP components; it has no native extension surface, and its reverse-domain extensions metadata is not one.1 evidence note |
skillFeatures.hostFrontmatter | unavailable | 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 note |
skillFeatures.markdownTokens | unavailable | 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 | supported | — |