For AI agents: the complete documentation index is available at https://scriptedalchemy.github.io/agent-bundle/llms.txt, the full documentation bundle is available at https://scriptedalchemy.github.io/agent-bundle/llms-full.txt, and this page is available as Markdown at https://scriptedalchemy.github.io/agent-bundle/reference/hosts.md.
Skip to main content
  • English
  • Host capability matrix

    Generated page

    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

    HostObserved versionPlugin manifestMarketplace manifestHooks document
    amp0.0.1788739286-gf348fe———
    claude2.1.260.claude-plugin/plugin.json.claude-plugin/marketplace.jsonhooks/hooks.json
    codex0.147.0.codex-plugin/plugin.json.agents/plugins/marketplace.jsonhooks/hooks.json
    cursor2026-08-28.cursor-plugin/plugin.json.cursor-plugin/marketplace.jsonhooks/hooks.json
    portable1.0.0plugin.json——

    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.

    HostStateDetail
    ampunverifiedexperimental
    Experimental: contract-verified, runtime-unverified. The owner has no Amp account. Type and fake-PluginAPI proofs cover the generated factory, skill registration, and event-callback contract; live activation, thread, model, and tool execution are account-dependent and have not been run.
    2 evidence notes
    claude—No separate runtime-proof row is recorded.
    codex—No separate runtime-proof row is recorded.
    cursor—No separate runtime-proof row is recorded.
    portable—No separate runtime-proof row is recorded.

    Install surface

    HostStateMethod / commandsScopesSource
    ampsupportedmethod: copy
    localRoot: .amp/plugins/<name> or $XDG_CONFIG_HOME/amp/plugins/<name>
    Agent Bundle copies only its generated Amp directory and records exact file ownership; plugins: reload remains an interactive operator action.
    project, userhttps://ampcode.com/docs/customize/plugins
    claudesupportedmarketplaceAdd: claude plugin marketplace add ./
    pluginInstall: claude plugin install <plugin>@<marketplace> --scope <scope>
    user, project, localhttps://code.claude.com/docs/en/discover-plugins
    codexsupportedmarketplaceAdd: codex plugin marketplace add ./
    pluginInstall: codex plugin add <plugin>@<marketplace>
    userhttps://developers.openai.com/codex/cli/reference
    cursorsupportedmethod: copy
    localRoot: ~/.cursor/plugins/local/<name>
    userhttps://cursor.com/docs/plugins
    portableunavailablePortable is a distribution profile, not a host runtime with one universal plugin installation location.—https://agent-plugins.org/

    Path tokens

    Tokenamp 0.0.1788739286-gf348feclaude 2.1.260codex 0.147.0cursor 2026-08-28portable 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

    HoststdioStreamable HTTPTask-augmented callsFields accepting path tokens
    ampsupportedsupportedunavailableargs:
    env:
    claudesupportedsupportedunavailablecommand: ${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}
    codexsupportedsupportedunavailableNo 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.
    cursorsupportedsupportedunavailableargs: ${CURSOR_PLUGIN_ROOT}, ${workspaceFolder}
    env: ${CURSOR_PLUGIN_ROOT}, ${workspaceFolder}
    headers: ${CURSOR_PLUGIN_ROOT}, ${workspaceFolder}
    url: ${CURSOR_PLUGIN_ROOT}, ${workspaceFolder}
    portablesupportedsupportedunavailableargs: ${PLUGIN_DATA}, ${PLUGIN_ROOT}
    cwd: ${PLUGIN_DATA}, ${PLUGIN_ROOT}
    env: ${PLUGIN_DATA}, ${PLUGIN_ROOT}

    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

    HostStateDetail
    ampunavailableThe pinned Amp skill MCP documentation does not state that the host issues MCP Tasks-augmented calls.
    claudeunavailableClaude Code never task-augments a tools/call (MCP 2025-11-25 Tasks): a main-conversation call still running after two minutes moves to a client-side background task (/tasks, CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS) while the call itself stays an ordinary tools/call held open against the server. A generated server's task-capable tools serve it as ordinary requests.
    3 evidence notes
    codexunavailableCodex 0.147.0 does not task-augment a tools/call. Its opt-in MCP 2026-07-28 support (mcp_2026_07_28) documents paginated discovery, multi-round requests, and non-blocking server startup; on that revision tasks are the io.modelcontextprotocol/tasks extension (resultType: "task", tasks/update), a shape the generated server's SDK does not serve. With the flag off it negotiates the legacy initialize handshake and sends no params.task.
    2 evidence notes
    cursorunavailableCursor does not task-augment a tools/call: its documented MCP protocol and extension support lists Tools, Prompts, Resources, Roots, Elicitation, and Apps, not Tasks, and recorded calls carry no params.task.
    2 evidence notes
    portableunavailableThe portable target pins no host client, so no host is recorded as issuing task-augmented calls. The generated server serves the 2025-11-25 Tasks utility to any client of that revision that sends params.task to a tool declaring execution.taskSupport — the MCP SDK client and the Workbench MCP page do.
    1 evidence note

    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

    HostStateDetail
    ampunavailableThe pinned local skill MCP documentation does not state client-side structuredContent validation behavior.
    claudeunavailableClaude Code is not recorded as validating structuredContent against outputSchema, or arguments against inputSchema, client-side: the tuple-bearing result that Cursor's draft-07 validator rejects was accepted by Claude Code. The generated server's SDK-side validation of arguments and structuredContent against the route's zod schemas is the only check recorded, and the same interoperable 2020-12 projection is advertised to Claude Code unchanged.
    1 evidence note
    codexunavailableCodex is not recorded as validating structuredContent against outputSchema, or arguments against inputSchema, client-side: the tuple-bearing result that Cursor's draft-07 validator rejects was accepted by Codex. The generated server's SDK-side validation of arguments and structuredContent against the route's zod schemas is the only check recorded, and the same interoperable 2020-12 projection is advertised to Codex unchanged.
    1 evidence note
    cursordegradedCursor validates every tools/call result's structuredContent against the advertised outputSchema with an Ajv-style validator that applies draft-07 keyword semantics regardless of the schema's declared 2020-12 dialect: prefixItems is an unknown keyword it ignores and items: false is applied to every element, so a zod tuple advertised as plain 2020-12 fails with MCP error -32602: Structured content does not match the tool's output schema: … boolean schema is false before the result reaches the model. Generated servers therefore advertise the interoperable projection for outputSchema and inputSchema alike — prefixItems kept, items rewritten to the union of the positional schemas (and of the .rest() schema when there is one), minItems/maxItems kept — which both dialects accept for every value the route schema accepts; 2020-12 keeps positional precision through prefixItems, while draft-07 stays position-permissive because it applies the union to every element. Only the result-side check is observed; whether Cursor also validates arguments against inputSchema client-side is not recorded.
    2 evidence notes
    portableunavailableThe portable target pins no host client, so no client-side validation of arguments against inputSchema or of structuredContent against outputSchema is recorded. The generated server validates both against the route's zod schemas itself and advertises the 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 a non-strict draft-07 validator and a 2020-12 validator alike.
    1 evidence note

    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 rowamp 0.0.1788739286-gf348feclaude 2.1.260codex 0.147.0cursor 2026-08-28portable 1.0.0
    cloud———unavailable—
    depth—degradedsupporteddegradedunavailable
    mcp-correlation—supportedsupporteddegradedunavailable
    parent—degradedsupporteddegradedunavailable
    root—supportedsupporteddegradedunavailable
    subagent-events—supportedsupportedsupportedunavailable

    Lineage row details

    Lineage rowHostStateDetail
    cloudcursorunavailable2026-09-03: cloud agents run no user hooks (https://cursor.com/docs/hooks), so nothing feeds the registry there; request.lineage reports cloud-agent-no-user-hooks.
    depthclaudedegradedlive model 2026-09-03, Claude Code 2.1.257 and 2.1.259: no depth counter is delivered to hooks (#422; the result document's subagent_stats.max_depth and the stream-json task_started.spawn_depth are not hook fields); the registry derives it from the parent chain — the placed parent's depth plus one, re-based when a host confirmation moves the parent — so it is exactly as certain as parent, resolves as confirmed only when every edge up to the root is, and matched spawn_depth 1 and 2 in the 2.1.259 orchestration run.
    depthcodexsupported1 evidence note
    depthcursordegraded2026-09-03: no depth counter is delivered (#424); derived from the inferred parent chain, so exactly as certain as parent.
    depthportableunavailable2026-09-03: Agent Plugins 1.0.0 defines no hooks.
    mcp-correlationclaudesupported3 evidence notes
    mcp-correlationcodexsupported1 evidence note
    mcp-correlationcursordegraded2026-09-03: tools/call _meta carries only progressToken and the client name is cursor-vscode (#424); the generated server resolves the caller through the open preToolUse whose tool_name is MCP:<tool>. When open windows for that tool span several conversations it narrows by the arguments: the preToolUse tool_input is the call's arguments verbatim (fixtures/host-lineage/cursor-3.18.25.ndjson rows 44/45, 53/54: MCP:probe {"note":"subagent"} / {"note":"nested"} arrived at the server as exactly those arguments), so a concurrent call with different arguments resolves (resolution: inferred, provenance derived) and identical arguments stay id-not-resolvable — never a guess by name.
    1 evidence note
    mcp-correlationportableunavailable2026-09-03: no pre-tool hook exists to open a correlation window and tools/call _meta is host-defined.
    parentclaudedegradedlive model 2026-09-03, Claude Code 2.1.257 and 2.1.259: no hook payload a subagent itself emits names its parent (#422: SubagentStart carries only the child agent_id and agent_type, and a subagent's own hooks carry session_id + agent_id; the hooks reference's common input fields list session_id, transcript_path, cwd, permission_mode, agent_id and agent_type, no parent). The runtime registry places the child under the Agent/Task PreToolUse that is the newest unclaimed spawn when SubagentStart fires (resolution: registry) — exact for sequential spawns and for the 2.1.259 parallel pair (the host serialises SubagentStart before the next Agent PreToolUse), verified at depth 1 and 2 in background, foreground and parallel spawn paths, refused as id-not-resolvable when two parents have unclaimed spawns, toolCallId withheld when siblings from one parent were claimed blind — and then takes the host's own word for the edge: the parent's Agent PostToolUse carries the spawn tool_use_id, the parent's identity and tool_response.agentId, the child. That hook confirms the edge (resolution: confirmed once every edge up to the root is host-named), fills in the sibling→tool_use_id assignment, places a start the window could not, and moves a child the window filed under the wrong parent, re-basing its descendants. It arrives right after SubagentStart for a background spawn (status async_launched; in 2.1.259 even before it) but only after the child's SubagentStop for a foreground one (status completed), so a foreground child's own events resolve as registry for their whole life. The host's stream-json task_started envelope (task_id, tool_use_id, spawn_depth) agrees with every placement but is not delivered to plugins.
    3 evidence notes
    parentcodexsupported2 evidence notes
    parentcursordegraded2026-09-03: parent_conversation_id appears only on the parent's subagentStart/subagentStop, which also omit the child conversation id (#424). The registry binds a never-seen conversation to the pending subagentStart only when exactly one is pending in the same workspace_roots (so windows sharing one durable registry never bind each other's children); with several pending — parallel workers — it stays id-not-resolvable until all but one have stopped, and a blind binding is undone — with anything started beneath it re-rooted — the moment the conversation carries a root-only event (the same Cursor root set — in practice sessionStart, sessionEnd, beforeSubmitPrompt, stop or preCompact), which a subagent never does, so a sessionEnd on a misbound chat retires that chat and never the parent it was filed under.
    parentportableunavailable2026-09-03: Agent Plugins 1.0.0 defines no hooks.
    rootclaudesupported2 evidence notes
    rootcodexsupported1 evidence note
    rootcursordegraded2026-09-03: a child's events carry only their own fresh conversation_id (host gap tracked in #424), so the root is known only through the registry that bound the child (resolution: inferred); a Cursor root itself is established only by a root-shaped event (the registry's Cursor root set is the canonical session/start, session/end, prompt/submit, stop, compact/before, compact/after and workspace/open; Cursor documents no post-compact hook and workspaceOpen is sessionless, so on this host that means sessionStart, sessionEnd, beforeSubmitPrompt, stop or preCompact — none of which a subagent's conversation carries), never by a tool hook.
    rootportableunavailable2026-09-03: Agent Plugins 1.0.0 defines no hooks and the MCP request carries no conversation identity.
    subagent-eventsclaudesupported3 evidence notes
    subagent-eventscodexsupported1 evidence note
    subagent-eventscursorsupported1 evidence note
    subagent-eventsportableunavailable2026-09-03: Agent Plugins 1.0.0 defines no hooks, so no subagent start/stop event exists; request.lineage reports no-subagent-events.

    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.

    ClientHostTierObservedInstall sourceInstall actions
    Antigravityportablenonedocs retrieved 2026-09-06; no product or CLI version is published on any page——
    Cascade (Devin Desktop)portableskillsdocs.devin.ai/desktop retrieved 2026-09-06; Windsurf renamed to Devin Desktop, Cascade documented as the legacy agent beside the Devin Local agentlocal-directoryinstall: cp -R skills/<skill> .agents/skills/<skill>
    Clineportableskills@cline/cli 0.0.13 exercised 2026-09-06; docs.cline.bot retrieved 2026-09-06 (@cline/sdk 0.0.82)local-directoryinstall: cp -R skills/<skill> ~/.cline/skills/<skill>
    CodeWhaleportableagent-pluginsHmbown/CodeWhale main 19d34a5fb6c07b34e0b7234beb74a1cf1969efb4, docs retrieved 2026-09-06 (native Agent Plugins v1.0.0 support since v0.9.4)local-directoryinstall: /plugin install ./<plugin directory>
    GitHub Copilot CLIportableagent-plugins@github/copilot 1.0.83, installed and exercised 2026-09-06local-directoryinstall: copilot plugin install <plugin directory>
    inspect: copilot plugins list
    verify: copilot --plugin-dir <plugin directory>
    Devin CLIportableagent-pluginsAgent Plugins 1.0.0; docs retrieved 2026-09-06, plugins documented as closed betalocal-directoryinstall: devin plugins install <plugin directory>
    inspect: devin plugins info <name>
    remove: devin plugins remove <name>
    Gemini CLIportableskills@google/gemini-cli 0.58.0, installed and exercised 2026-09-06local-directoryinstall: gemini skills install <plugin directory>/skills/<skill>
    inspect: gemini skills list --all
    Grok Buildportableskillsxai-org/grok-build main 72a61251fcffb464bcc687aeb5a998e5a98ec0c9, docs retrieved 2026-09-06marketplaceinstall: grok plugin install <marketplace plugin name> --trust
    trust: /hooks-trust
    enable: grok plugin enable <name>
    verify: grok plugin validate <plugin directory>
    Hermes Agentportableagent-pluginshermes-agent.nousresearch.com developer guide retrieved 2026-09-06; no version is printed on the pagerepositoryinstall: hermes plugins install <owner>/<repository> --no-enable
    JetBrains Junieportableskillsjunie.jetbrains.com/docs retrieved 2026-09-06, agent-skills page dated 01 September 2026; no CLI version is published on the pagelocal-directoryregister: junie --skill-location <plugin directory>/skills
    inspect: /skills
    Kiro (Powers)portableagent-pluginskiro.dev/docs/powers pages updated September 2, 2026 and August 4, 2026, retrieved 2026-09-06local-directoryinstall: Powers panel -> Add Custom Power -> Import power from a folder -> select <plugin directory> -> Install
    OpenClawportableagent-pluginsAgent Plugins 1.0.0; docs retrieved 2026-09-06local-directoryinstall: openclaw plugins install <plugin directory>
    inspect: openclaw plugins inspect <id>
    remove: openclaw plugins uninstall <id>
    OpenCodeportableskillsopencode-ai 1.18.29 exercised 2026-09-06; opencode.ai/docs retrieved 2026-09-06local-directoryinstall: cp -R skills/<skill> .agents/skills/<skill>
    Piportableskills@mariozechner/pi-coding-agent 0.73.1 installed from npm 2026-09-07; packaged docs/skills.md and docs/packages.md read from that releaselocal-directoryregister: pi --skill <plugin directory>/skills
    inspect: pi --help
    Qoder CLIportableskillsdocs retrieved 2026-09-06; no CLI version is published on any pagelocal-directoryinstall: qoder plugins install <plugin directory> --scope user
    verify: qoder plugins validate <plugin directory>
    inspect: qoder plugins list --json
    Swivalportableskillsdocs retrieved 2026-09-06; no product version is published on the documentation pageslocal-directoryregister: swival --skills-dir <plugin directory>/skills "<task>"
    inspect: swival skills list
    VS Code (Copilot agent plugins)portableagent-pluginscode.visualstudio.com/docs/agent-customization/agent-plugins, page footer 9/2/2026, retrieved 2026-09-06local-directoryregister: "chat.pluginLocations": { "<plugin directory>": true }
    Zed Agentportableskillszed.dev/docs retrieved 2026-09-06; no page publishes a version or last-updated datelocal-directoryinstall: cp -R skills/<skill> ~/.agents/skills/<skill>

    Client surfaces

    ClientSurfaceStateDetail
    Antigravitymanifestunavailable2026-09-06: unproven. https://www.antigravity.google/docs/cli/plugins requires a root plugin.json and embeds a closed schema for it ("additionalProperties": false, "required": ["name"], properties name and description only) that omits every other Agent Plugins manifest field this artifact emits — including the $schema its own example shows — and the schema URL that example cites returns 404. No page states what install-time validation does with an unknown root key, and no CLI run against the emitted manifest is recorded here.
    Antigravityskillsunavailable2026-09-06: unproven. The root plugin.json is "a mandatory manifest located at the root of your plugin directory" (https://www.antigravity.google/docs/cli/plugins), so component discovery depends on the unproven manifest outcome above; Antigravity does document skills/<skill-name>/SKILL.md in its own plugin layout, and nothing here establishes whether the emitted tree is reached.
    Antigravitymcpunavailable2026-09-06: the plugin MCP file is mcp_config.json, not mcp.json, and remote servers key on serverUrl rather than url (https://www.antigravity.google/docs/cli/plugins, https://www.antigravity.google/docs/cli/gcli-migration: "Legacy schema keys: url or httpUrl -> Modern schema key: serverUrl").
    Antigravityplaceholdersunavailable2026-09-06: no ${PLUGIN_ROOT}, ${PLUGIN_DATA}, or other path placeholder is documented for Antigravity MCP or hook configuration.
    Antigravityhooksunavailable2026-09-06: Antigravity reads a root hooks.json as a named-hook map (https://www.antigravity.google/docs/hooks/); Agent Plugins 1.0.0 defines no hooks, so this projection emits no hooks document for it to read.
    Cascade (Devin Desktop)manifestunavailable2026-09-06: Cascade's documented customization units are Skills, Rules, Workflows, and AGENTS.md (https://docs.devin.ai/desktop/cascade/skills, https://docs.devin.ai/desktop/cascade/memories); no page defines a plugin manifest, so the emitted root plugin.json is read by nothing there.
    Cascade (Devin Desktop)skillsdegraded2026-09-06: the emitted package root is not a Cascade discovery root; each skill directory is copied into .windsurf/skills/, ~/.codeium/windsurf/skills/, or .agents/skills/ before Cascade sees it, and the copy is what loads.
    1 evidence note
    Cascade (Devin Desktop)mcpunavailable2026-09-06: Cascade reads MCP servers from ~/.codeium/windsurf/mcp_config.json only (https://docs.devin.ai/desktop/cascade/mcp), where a remote server "requires a serverUrl or url field" and interpolation is ${env:VAR_NAME} / ${file:/path}; no page reads a plugin-relative mcp.json, so the emitted document is not a Cascade MCP source.
    Cascade (Devin Desktop)placeholdersunavailable2026-09-06: the documented interpolation patterns are ${env:VAR_NAME} and ${file:/path/to/file} in mcp_config.json (https://docs.devin.ai/desktop/cascade/mcp); ${PLUGIN_ROOT} and ${PLUGIN_DATA} are not documented anywhere for Cascade, so the reserved behavior of Agent Plugins 1.0.0 §9.1 is not provided.
    Cascade (Devin Desktop)hooksunavailable2026-09-06: Agent Plugins 1.0.0 defines no hooks, so this projection emits no hooks document for Cascade to read.
    Clinemanifestunavailable2026-09-06: a Cline plugin is installed from an npm, git, remote, or local source into ~/.cline/plugins/_installed/ with Cline's own layout; no upstream page documents reading a root Agent Plugins plugin.json, and @cline/cli 0.0.13 exposes no plugin subcommand to offer it to.
    Clineskillsdegraded2026-09-06: the skill tree must be copied into one of Cline's own roots; the emitted package is not a Cline install unit, and no CLI verb in @cline/cli 0.0.13 performs the copy.
    1 evidence note
    Clinemcpunavailable2026-09-06: Cline reads mcpServers from its own configuration and the retrieved pages give three unreconciled paths for it (~/.cline/mcp.json, .cline/mcp.json, ~/.cline/data/settings/cline_mcp_settings.json); none is a plugin-root mcp.json, and Cline's remote transport is spelled streamableHttp rather than the standard's streamable-http.
    Clineplaceholdersunavailable2026-09-06: no ${VAR} interpolation syntax is documented for Cline MCP configuration, and no emitted document carrying the Agent Plugins 1.0.0 §9.1 tokens is read at this tier.
    Clinehooksunavailable2026-09-06: Cline loads hooks from its own hooks directory (--hooks-dir, default ~/.cline/hooks); Agent Plugins 1.0.0 defines no hooks, so this projection emits no hooks document for it to read.
    CodeWhalemanifestsupported1 evidence note
    CodeWhaleskillssupported1 evidence note
    CodeWhalemcpdegraded2026-09-06: CodeWhale narrows the standard at the plugin boundary. Its env rule — "Local stdio environment entries must use exact ${SOURCE_ENV} references" — rejects an emitted env value that is anything other than one whole variable reference. A remote server emitted into mcp.json is narrower still: the URL must be HTTPS (or explicit loopback HTTP) with no user information, query, or fragment, a literal header is rejected in favor of CodeWhale's own env_headers or bearer_token_env_var keys, redirects must stay on the reviewed origin, and the bundle must declare exactly the normalized endpoint host set in capabilities.network_hosts. That declaration rides in extensions["net.codewhale"], which this projection writes only when the author authors portable.extensions; a remote server emitted without it is a validation error, and "an active bundle must be … free of validation errors", so the whole bundle stays inactive there until the author declares the matching host set.
    2 evidence notes
    CodeWhaleplaceholdersunavailable2026-09-06: CodeWhale rejects PLUGIN_ROOT and PLUGIN_DATA as env entry names (as the 1.0.0 schema does), but its documentation never states whether it provides those variables or expands ${PLUGIN_ROOT} and ${PLUGIN_DATA} in args, env values, or cwd, so the reserved behavior of §9.1 is unproven there.
    CodeWhalehooksunavailable2026-09-06: docs/HOOKS.md documents CodeWhale's own hook layout; Agent Plugins 1.0.0 defines no hooks, so this projection emits no hooks document for it to read.
    GitHub Copilot CLImanifestsupported1 evidence note
    GitHub Copilot CLIskillssupported1 evidence note
    GitHub Copilot CLImcpdegraded2026-09-06: the probe listed one stdio server: no streamable-http server from an emitted mcp.json was registered, launched, or authenticated on 1.0.83, so the evidence covers the stdio subset of the document rather than every transport the projection can emit.
    1 evidence note
    GitHub Copilot CLIplaceholdersdegraded2026-09-06: the probe proved the configuration Copilot records, not a spawned server: copilot mcp get prints static configuration, and spawning the server requires a GitHub Copilot login that was not performed.
    1 evidence note
    GitHub Copilot CLIhooksunavailable2026-09-06: Copilot CLI 1.0.83 exposes hooks (documented separately at https://docs.github.com/en/copilot/reference/hooks-reference), but Agent Plugins 1.0.0 defines no hooks, so this projection emits no hooks document for it to read.
    Devin CLImanifestsupported1 evidence note
    Devin CLIskillssupported1 evidence note
    Devin CLImcpdegraded2026-09-06: the emitted document is read, and applied after a composite root's .mcp.json, "which wins on a server-name collision" — a server this bundle names identically to one there is overridden.
    2 evidence notes
    Devin CLIplaceholderssupported1 evidence note
    Devin CLIhooksunavailable2026-09-06: Devin reads plugin hooks from a root hooks.json and documents them as "best effort and fail open" with SessionStart and SessionEnd excluded; Agent Plugins 1.0.0 defines no hooks, so this projection emits no hooks document for it to read.
    Gemini CLImanifestunavailable2026-09-06: gemini extensions validate /tmp/hostcli/fixture on 0.58.0 exited 1 with "Configuration file not found at /tmp/hostcli/fixture/gemini-extension.json" — Gemini CLI requires its own gemini-extension.json manifest, which this projection does not emit, and gemini extensions list then reported "No extensions installed."
    Gemini CLIskillssupported1 evidence note
    Gemini CLImcpunavailable2026-09-06: Gemini CLI reads MCP servers from the mcpServers map of its own gemini-extension.json manifest or a settings.json (https://geminicli.com/docs/extensions/reference/, last updated May 14, 2026); with the manifest rejected, the emitted mcp.json is never consulted, and the skills install path copies only the skill directory.
    Gemini CLIplaceholdersunavailable2026-09-06: Gemini CLI documents ${extensionPath} for portability inside its own manifest, not the reserved ${PLUGIN_ROOT} and ${PLUGIN_DATA} of Agent Plugins 1.0.0 §9.1; no emitted document that carries those tokens is read at this tier.
    Gemini CLIhooksunavailable2026-09-06: Gemini CLI loads extension hooks from hooks/hooks.json and states "hooks are not defined in the gemini-extension.json manifest" (https://geminicli.com/docs/extensions/reference/); Agent Plugins 1.0.0 defines no hooks, so this projection emits no hooks document for it to read.
    Grok Buildmanifestunavailable2026-09-06: unproven. The root manifest is documented only as optional metadata and path overrides, with no published field list, validation rule, or precedence order, so nothing about Grok's handling of the emitted manifest is pinned.
    Grok Buildskillssupported1 evidence note
    Grok Buildmcpunavailable2026-09-06: the only documented plugin MCP file is .mcp.json (https://docs.x.ai/build/features/mcp-servers: "MCP servers: a .mcp.json file"); no upstream page states that a root, non-dotted mcp.json is read, so the emitted mcp.json is not proven to load.
    Grok Buildplaceholdersunavailable2026-09-06: GROK_PLUGIN_ROOT and GROK_PLUGIN_DATA are documented only as hook environment variables ("Plugin hooks additionally receive GROK_PLUGIN_ROOT and GROK_PLUGIN_DATA in their environment"); no ${...} expansion inside plugin MCP configuration is documented.
    Grok Buildhooksunavailable2026-09-06: Grok reads plugin hooks from hooks/hooks.json and runs them only once the plugin is trusted (https://docs.x.ai/build/features/hooks); Agent Plugins 1.0.0 defines no hooks, so this projection emits no hooks document for it to read.
    Hermes Agentmanifestdegraded2026-09-06: the validation rule set is not published: the page never states that the manifest root is treated as closed or what happens to an unknown root key.
    1 evidence note
    Hermes Agentskillssupported1 evidence note
    Hermes Agentmcpsupported1 evidence note
    Hermes Agentplaceholdersdegraded2026-09-06: the expansion sites are unpublished — the page does not say whether ${PLUGIN_ROOT} and ${PLUGIN_DATA} are expanded in args, env values, and cwd as §9.1 requires, only that the variables are provided.
    1 evidence note
    Hermes Agenthooksunavailable2026-09-06: Hermes runs hooks from native plugin.yaml plus register(ctx) Python plugins, which the portable tier explicitly does not replace; Agent Plugins 1.0.0 defines no hooks, so this projection emits no hooks document either.
    JetBrains Juniemanifestunavailable2026-09-06: Junie's documented units are agent skills, guidelines, and MCP configuration (https://junie.jetbrains.com/docs/agent-skills.html); no page defines a plugin manifest, so the emitted root plugin.json is read by nothing there.
    JetBrains Junieskillsdegraded2026-09-06: the emitted skills/ root is not a default location, so it loads only once registered with --skill-location or the skill-locations config field, and "if a project-level and a user-level skills have the same name, the user-level skill will be skipped".
    1 evidence note
    JetBrains Juniemcpunavailable2026-09-06: MCP servers are read from .junie/mcp/mcp.json or ~/.junie/mcp/mcp.json (https://junie.jetbrains.com/docs/junie-cli-mcp-configuration.html). --mcp-location adds "additional folders where MCP servers should be found", but no page states the file name it looks for inside them, and the documented server fields are command/args/env and url/headers with no type discriminator, so the emitted plugin-root mcp.json is not a proven Junie MCP source.
    JetBrains Junieplaceholdersunavailable2026-09-06: no ${PLUGIN_ROOT} or ${PLUGIN_DATA} expansion is documented for Junie MCP configuration or skills, so the reserved behavior of Agent Plugins 1.0.0 §9.1 is not provided.
    JetBrains Juniehooksunavailable2026-09-06: Agent Plugins 1.0.0 defines no hooks, so this projection emits no hooks document for Junie to read.
    Kiro (Powers)manifestdegraded2026-09-06: Kiro's "Required fields" table additionally requires version, description, author, and keywords, where the canonical schema requires only $schema and name — so a bundle that declares no portable author or keywords metadata does not meet Kiro's tightened manifest, and Kiro publishes no validation-error behavior to say what happens then.
    1 evidence note
    Kiro (Powers)skillssupported1 evidence note
    Kiro (Powers)mcpdegraded2026-09-06: only stdio is documented for a power's mcp.json; no Kiro page states that a streamable-http server in that file is read, so an emitted remote server is unproven there.
    1 evidence note
    Kiro (Powers)placeholdersunavailable2026-09-06: no Kiro page documents ${PLUGIN_ROOT} or ${PLUGIN_DATA} expansion, or the provision of those variables to a power's MCP subprocess, so the reserved behavior of Agent Plugins 1.0.0 §9.1 is unproven there.
    Kiro (Powers)hooksunavailable2026-09-06: https://kiro.dev/docs/hooks/ documents Kiro's own hook configuration; Agent Plugins 1.0.0 defines no hooks, so this projection emits no hooks document for it to read.
    OpenClawmanifestsupported1 evidence note
    OpenClawskillssupported1 evidence note
    OpenClawmcpsupported1 evidence note
    OpenClawplaceholderssupported1 evidence note
    OpenClawhooksunavailable2026-09-06: https://docs.openclaw.ai/plugins/bundles supports bundle hooks only as OpenClaw hook packs (HOOK.md plus handler.ts or handler.js) and lists hooks/hooks.json as detect-only; Agent Plugins 1.0.0 defines no hooks, so this projection emits no hooks document at all.
    OpenCodemanifestunavailable2026-09-06: opencode plugin &lt;dir&gt; requires a package.json or index file and refused the emitted package on 1.18.29; OpenCode reads no root plugin.json.
    OpenCodeskillsdegraded2026-09-06: the skill tree must be copied into one of OpenCode's own roots; the emitted package as a whole is not an OpenCode install unit, and skill names must be unique across all roots ("Ensure skill names are unique across all locations").
    1 evidence note
    OpenCodemcpunavailable2026-09-06: https://opencode.ai/docs/mcp-servers/ configures servers under the mcp key of opencode.json with OpenCode's own type: "local" | "remote" shape and a command array, not a standalone mcp.json with the standard's stdio and streamable-http types.
    OpenCodeplaceholdersunavailable2026-09-06: OpenCode substitutes {env:VAR} and {file:path} in its own configuration; it documents no expansion of the reserved ${PLUGIN_ROOT} and ${PLUGIN_DATA} of Agent Plugins 1.0.0 §9.1, and no emitted document carrying them is read.
    OpenCodehooksunavailable2026-09-06: OpenCode's event hooks are JavaScript functions returned by a plugin module (https://opencode.ai/docs/plugins/); Agent Plugins 1.0.0 defines no hooks, and this projection emits no plugin module for it to load.
    Pimanifestunavailable2026-09-07: Pi's package manifest is the pi field of package.json (docs/packages.md of 0.73.1); no documented path reads an Agent Plugins root plugin.json, so the emitted manifest has no reader there.
    Piskillsdegraded2026-09-07: the emitted skills/ root is not one of the scanned default roots, so it loads only when it is named with --skill or added to the skills settings array; discovery inside it is recursive once named.
    1 evidence note
    Pimcpunavailable2026-09-07: the installed release's documentation set carries no MCP page and its CLI --help exposes no MCP option, so the emitted mcp.json has no reader there.
    Piplaceholdersunavailable2026-09-07: with no MCP document read, no ${PLUGIN_ROOT} or ${PLUGIN_DATA} placeholder of Agent Plugins 1.0.0 §9.1 is expanded.
    Pihooksunavailable2026-09-07: Agent Plugins 1.0.0 defines no hooks, so this projection emits no hooks document for Pi to read.
    Qoder CLImanifestunavailable2026-09-06: https://docs.qoder.com/cli/plugins-reference states the manifest "must not be placed in the plugin root directory", so the emitted root plugin.json is not a recognized manifest and the plugin is identified only by its directory name.
    Qoder CLIskillssupported1 evidence note
    Qoder CLImcpsupported1 evidence note
    Qoder CLIplaceholdersunavailable2026-09-06: QODER_PLUGIN_ROOT and QODER_PLUGIN_DATA are documented only for hooks (https://docs.qoder.com/cli/hooks-reference), and no ${...} placeholder is documented for MCP server configuration, so the emitted ${PLUGIN_ROOT} and ${PLUGIN_DATA} tokens are not proven to expand.
    Qoder CLIhooksunavailable2026-09-06: Qoder reads plugin hooks from hooks/hooks.json and requires the extra { "hooks": ... } wrapper (https://docs.qoder.com/cli/hooks-reference); Agent Plugins 1.0.0 defines no hooks, so this projection emits no hooks document for it to read.
    Swivalmanifestunavailable2026-09-06: Swival discovers skill directories and MCP configuration and publishes no plugin manifest of any kind (https://swival.dev/pages/skills.html, https://swival.dev/pages/mcp.html), so the emitted root plugin.json is read by nothing there.
    Swivalskillsdegraded2026-09-06: the emitted skills/ root is not a default location, so it loads only once registered with --skills-dir or the swival.toml skills_dir field, and it loses by name to the default roots: "If the same skill name exists in multiple locations, the first one in the precedence order wins", with .swival/skills/ and .agents/skills/ ahead of --skills-dir paths. A registered tree outside the project resolves as external, which Swival adds "as read-only roots".
    1 evidence note
    Swivalmcpunavailable2026-09-06: MCP servers come from swival.toml [mcp_servers.] or .swival/mcp.json (https://swival.dev/pages/mcp.html). The emitted document is a shape Swival reads, but only an invocation that passes --mcp-config at it reads this one — the flag "replaces the default .swival/mcp.json lookup" rather than adding to it, and "TOML servers (swival.toml [mcp_servers.]) always win by server name over JSON servers" — and the registration recorded here does not, so this record claims no Swival MCP source.
    Swivalplaceholdersunavailable2026-09-06: no ${PLUGIN_ROOT} or ${PLUGIN_DATA} expansion is documented for Swival MCP configuration, and the documented substitution surface is the skill body and its own directory path, so the reserved behavior of Agent Plugins 1.0.0 §9.1 is not provided.
    Swivalhooksunavailable2026-09-06: Agent Plugins 1.0.0 defines no hooks, so this projection emits no hooks document for Swival to read.
    VS Code (Copilot agent plugins)manifestsupported1 evidence note
    VS Code (Copilot agent plugins)skillssupported1 evidence note
    VS Code (Copilot agent plugins)mcpsupported1 evidence note
    VS Code (Copilot agent plugins)placeholdersunavailable2026-09-06: the page contradicts itself on the reserved placeholders — it names ${PLUGIN_ROOT} and ${PLUGIN_DATA} and in one place says they are expanded and in another that they are preserved — so §9.1 expansion in args, env values, and cwd is not established for the emitted mcp.json.
    VS Code (Copilot agent plugins)hooksunavailable2026-09-06: VS Code reads plugin hooks from com.github.copilot/hooks/hooks.json, a client-specific namespace directory this projection does not write, and Agent Plugins 1.0.0 defines no hooks; the surface is also documented as Preview.
    Zed Agentmanifestunavailable2026-09-06: no Zed page documents a plugin manifest of any shape for the Zed Agent; skills are installed as folders and MCP servers are configured in Zed's settings, so the emitted plugin.json has no reader.
    Zed Agentskillsdegraded2026-09-06: only the skill folders load, one copy at a time, and the catalog is capped — "50KB catalog budget… Skills that don't fit are dropped from the catalog with a warning in the UI" — so a large emitted skill set is not guaranteed to be wholly visible.
    1 evidence note
    Zed Agentmcpunavailable2026-09-06: https://zed.dev/docs/ai/mcp configures servers under the context_servers key of Zed's own settings file, and no page documents auto-discovery of a project-local or plugin-root MCP file, so the emitted mcp.json has no reader.
    Zed Agentplaceholdersunavailable2026-09-06: with no emitted MCP document read, none of the reserved ${PLUGIN_ROOT} or ${PLUGIN_DATA} placeholders of Agent Plugins 1.0.0 §9.1 is expanded.
    Zed Agenthooksunavailable2026-09-06: none of the retrieved Zed Agent pages documents a lifecycle or hook mechanism, and Agent Plugins 1.0.0 defines no hooks, so this projection emits no hooks document either.

    Client discovery

    ClientPaths it readsShadowed by (per surface)
    Antigravity——
    Cascade (Devin Desktop)skills—
    Clineskills—
    CodeWhalemcp.json, plugin.json, skills—
    GitHub Copilot CLImcp.json, plugin.json, skills.plugin/plugin.json (manifest)
    .mcp.json (mcp)
    Devin CLImcp.json, plugin.json, skills.devin-plugin/plugin.json (manifest, skills, mcp, placeholders)
    .claude-plugin/plugin.json (manifest, skills, mcp, placeholders)
    Gemini CLIskills—
    Grok Buildskills—
    Hermes Agentmcp.json, plugin.json, skills—
    JetBrains Junieskills—
    Kiro (Powers)mcp.json, plugin.json, skills—
    OpenClawmcp.json, plugin.json, skillsopenclaw.plugin.json (manifest, skills, mcp, placeholders)
    .claude-plugin/plugin.json (manifest, skills, mcp, placeholders)
    .codex-plugin/plugin.json (manifest, skills, mcp, placeholders)
    .cursor-plugin/plugin.json (manifest, skills, mcp, placeholders)
    OpenCodeskills—
    Piskills—
    Qoder CLImcp.json, skills.mcp.json (mcp)
    Swivalskills—
    VS Code (Copilot agent plugins)mcp.json, plugin.json, skills—
    Zed Agentskills—

    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

    • commands unavailable — Agent Bundle does not project command-palette commands from its canonical command documents.

    rules

    • rules unavailable — Amp plugin discovery has no plugin-root rules component.

    lsp

    • lsp unavailable — The pinned PluginAPI declares no language-server registration surface.

    nativeDiagnostics

    • nativeDiagnostics unavailable — The pinned PluginAPI declares no native diagnostics-provider component.

    nativeExtension

    • nativeExtension unavailable — The pinned PluginAPI declares no opaque native extension component.

    claude 2.1.260

    agents

    • 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. · 3 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 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 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 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 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 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 notes
    • agents.color unavailable — 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 notes
    • agents.initialPrompt unavailable — 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 notes
    • agents.experimentalCacheTtl unavailable — 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.bareCommands supported
    • bin.bashPath supported
    • bin.directory — bin
    • bin.enabledOnly supported
    • bin.organizationDistributionProhibited supported

    channels

    • channels.bindsToPluginMcpServer supported
    • channels.perChannelUserConfig supported

    commandFrontmatter

    • commandFrontmatter supported — fields.allowedTools: allowed-tools · fields.argumentHint: argument-hint · fields.description: description · fields.disableModelInvocation: disable-model-invocation · fields.model: model · 2 evidence notes

    commands

    • commands supported

    dependencies

    • 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

    • 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, tag · 2 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, update · 2 evidence notes

    packageLifecycle

    • 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.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 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.yaml · persistentDataToken: ${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/cache · orphanGraceDays: 14 · 6 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 · 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 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: true · cliDeleteDefault: true · keepDataFlag: --keep-data · 2 evidence notes

    experimentalThemes

    • experimentalThemes.defaultDirectory — themes
    • experimentalThemes.experimental supported
    • experimentalThemes.manifestField — experimental.themes
    • experimentalThemes.readOnly supported

    devtools

    • devtools.details supported
    • devtools.listJson supported
    • devtools.pluginDir supported
    • devtools.strictValidation supported
    • devtools.tag supported
    • devtools.validate supported

    lsp

    • 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

    • nativeDiagnostics unavailable — The pinned Claude plugin contract (2.1.260) 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

    • nativeExtension unavailable — 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.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

    • 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

    • manifest — .claude-plugin/plugin.json

    marketplace

    • marketplace — .claude-plugin/marketplace.json

    marketplaceManifest

    • 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

    • 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

    • outputStyles.allowedSuffixes — .md
    • outputStyles.directory — output-styles
    • outputStyles.frontmatterFields — description, force-for-plugin, keep-coding-instructions, name
    • outputStyles.manifestField — outputStyles
    • outputStyles.replacesDefault supported

    settings

    • settings.config — settings.json
    • settings.placeholderSubstitution unavailable
    • settings.precedesManifestSettings supported
    • settings.subagentStatusLineFields — command, type
    • settings.supportedKeys — agent, subagentStatusLine
    • settings.unknownKeysIgnored supported

    skillFeatures

    • skillFeatures.hostFrontmatter supported — 1 evidence note
    • skillFeatures.markdownTokens supported — 1 evidence note

    skills

    • skills supported

    userConfig

    • 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

    • workflows.directory — workflows
    • workflows.fileContents — opaque
    • workflows.manifestField — workflows
    • workflows.replacesDefault supported

    web

    • web supported — browser host inside the composite artifact; <plugin> web runs from the installed root on any host

    codex 0.147.0

    apps

    • apps.registeredMcpMappings supported — 1 evidence note

    components

    • 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

    • 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

    • 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

    • 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

    • manifest — .codex-plugin/plugin.json

    marketplace

    • marketplace — .agents/plugins/marketplace.json

    manifestPackage

    • manifestPackage.manifestMetadata supported — fields: author.name, author.email, author.url, homepage, repository, license, keywords · 2 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 · admitted.mcpServers: path, inline-object · admitted.skills: path · emitted.hooks: ./hooks/hooks.json · emitted.mcpServers: ./.mcp.json · emitted.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.screenshots · 2 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 attestations · 3 evidence notes

    mcpServerPolicy

    • mcpServerPolicy.approvalModes unavailable — Plugin MCP approval modes are host-owned user configuration under plugins.&lt;plugin&gt;.mcp_servers.&lt;server&gt;; 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.&lt;plugin&gt;.mcp_servers.&lt;server&gt;; 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.&lt;plugin&gt;.mcp_servers.&lt;server&gt;; the compiler emits plugin artifacts and does not write the user's config.toml. · 1 evidence note

    skillFeatures

    • 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

    • skills supported

    web

    • web supported — browser host inside the composite artifact; <plugin> web runs from the installed root on any host

    cursor 2026-08-28

    agents

    • 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

    • 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

    • 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, model · 2 evidence notes

    commands

    • commands supported

    componentDiscovery

    • componentDiscovery supported — 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.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, Required · 1 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

    • 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.json · 2 evidence notes
    • formats.cursorPlugin supported — manifest: .cursor-plugin/plugin.json · 1 evidence note

    lsp

    • 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

    • nativeDiagnostics unavailable — The pinned Cursor Plugin contract publishes no diagnostics-provider component, so the compiler emits none. · 1 evidence note

    nativeExtension

    • 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

    • ruleFrontmatter supported — fields: alwaysApply, description, globs · 1 evidence note

    skillFeatures

    • 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

    • localInstall.method — copy
    • localInstall.root — ~/.cursor/plugins/local/<name>

    manifest

    • manifest — .cursor-plugin/plugin.json

    manifestMetadata

    • manifestMetadata supported — 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

    • marketplaceManifest supported — 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

    • 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

    • rules supported

    schema

    • schema — cursor/plugins@070189284e702e8a4d2e3cc8913994b204c5337a:schemas/plugin.schema.json

    skills

    • skills supported

    variables

    • variables supported — acceptedKeywords: type, title, description, default, enum, const, properties, required, items, length and numeric constraints · secretValuesEmitted: false · 2 evidence notes

    web

    • web supported — browser host inside the composite artifact; <plugin> web runs from the installed root on any host

    portable 1.0.0

    cursorLocalInstall

    • cursorLocalInstall.placeholderExpansion supported — 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

    • 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

    • extensions supported — configKey: portable.extensions · 1 evidence note

    lsp

    • 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

    • manifest — plugin.json

    manifestMetadata

    • manifestMetadata supported — configKey: portable · fields: author, homepage, keywords, license, repository · 1 evidence note

    nativeDiagnostics

    • 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

    • 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

    • 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

    • skills supported

    web

    • web supported — browser host inside the composite artifact; <plugin> web runs from the installed root on any host