Adopt the Agent Plugins open standard as the portable target contract
Spec pin: Agent Plugins 1.0.0 — https://agent-plugins.org/specification, repository agentplugins/agent-plugins-spec @ ff8ab5e392cc87bd88d87c060815a87490e51003 (2026-08-19). Vendored schema hashes (sha256):
plugin.schema.json: 0a4aad95ce337878ad38802ebf0daa3fde76abe3f65400c86bcbb1ec0b3ab883
mcp.schema.json: 6539175bfcdf43085855183e86da40ea94b166547a72b47ae9a0a390516d3acb
Decision
The portable target IS the Agent Plugins adapter (adapterRevision 1.3.0). It emits root plugin.json (canonical $schema), skills/, and mcp.json, validates against the pinned schemas at build time, and declares rules/commands/hooks/events/marketplace honestly unavailable (the v1 standard packages only skills and MCP servers).
Native proof status
- Repeatable CI-safe proof: installer + isolated-Cursor-home filesystem + pinned-schema conformance (
runPortableHostInstallProof).
- IDE dogfood (2026-09-02, Cursor 3.18.25 stable
280eca2911f1, isolated instance): plugin discovered with Local badge, skill discovered with exact SKILL.md description, MCP config discovered and spawned, stdio handshake completed with a launchable config. Audit: docs/audits/2026-09-02-agent-plugins-cursor-ide-proof.md.
Upstream interop gaps observed in Cursor 3.18.25 (all violate spec 7.2.1/9.2 MUSTs)
${PLUGIN_ROOT} not expanded in cwd — literal cwd → spawn <cmd> ENOENT (the spec's own stdio example uses "cwd": "${PLUGIN_ROOT}").
${PLUGIN_ROOT} not expanded in args — server starts, gets the literal path, exits MODULE_NOT_FOUND.
- Omitted
cwd defaults to $HOME, not the plugin root.
Cursor's proprietary ${CURSOR_PLUGIN_ROOT} expands and connects (verified, stable heartbeat), so the loader pipeline works — it is not wired to the standard's placeholders for this format. Consequence: spec-conformant portable stdio MCP servers currently cannot launch on Cursor, though discovery/skills work fully.
Follow-ups
Adopt the Agent Plugins open standard as the portable target contract
Spec pin: Agent Plugins 1.0.0 — https://agent-plugins.org/specification, repository
agentplugins/agent-plugins-spec@ff8ab5e392cc87bd88d87c060815a87490e51003(2026-08-19). Vendored schema hashes (sha256):plugin.schema.json:0a4aad95ce337878ad38802ebf0daa3fde76abe3f65400c86bcbb1ec0b3ab883mcp.schema.json:6539175bfcdf43085855183e86da40ea94b166547a72b47ae9a0a390516d3acbDecision
The
portabletarget IS the Agent Plugins adapter (adapterRevision 1.3.0). It emits rootplugin.json(canonical$schema),skills/, andmcp.json, validates against the pinned schemas at build time, and declares rules/commands/hooks/events/marketplace honestlyunavailable(the v1 standard packages only skills and MCP servers).Native proof status
runPortableHostInstallProof).280eca2911f1, isolated instance): plugin discovered with Local badge, skill discovered with exact SKILL.md description, MCP config discovered and spawned, stdio handshake completed with a launchable config. Audit:docs/audits/2026-09-02-agent-plugins-cursor-ide-proof.md.Upstream interop gaps observed in Cursor 3.18.25 (all violate spec 7.2.1/9.2 MUSTs)
${PLUGIN_ROOT}not expanded incwd— literal cwd →spawn <cmd> ENOENT(the spec's own stdio example uses"cwd": "${PLUGIN_ROOT}").${PLUGIN_ROOT}not expanded inargs— server starts, gets the literal path, exitsMODULE_NOT_FOUND.cwddefaults to$HOME, not the plugin root.Cursor's proprietary
${CURSOR_PLUGIN_ROOT}expands and connects (verified, stable heartbeat), so the loader pipeline works — it is not wired to the standard's placeholders for this format. Consequence: spec-conformant portable stdio MCP servers currently cannot launch on Cursor, though discovery/skills work fully.Follow-ups