SKILL 35 / FRONTIER · DEEP DIVE

Agent Plugins 1.0.0

Skills and MCP servers finally get a vendor-neutral package format, and the half it deliberately leaves alone

2026-10-06 · BigCat

A set of skills plus an MCP server used to need a separate package for every client. Agent Plugins standardizes the package layer: one plugin.json, one skills/, one mcp.json. Below: the spec itself, the official marketplace, install steps for five launch clients, and how it differs from Claude Code's own format.

Skill 6 Official Authoring Guide · Skill 8 AGENTS.md and Portability · Skill 12 MCP Security Boundaries · Skill 30 How Risky Are Other People's Skills

// WHY THIS MATTERS

Agent Skills standardized what one skill looks like. MCP standardized how to connect a tool server. But bundling them into one installable package was different in every client: Claude Code uses .claude-plugin/plugin.json, Cursor uses .cursor-plugin/plugin.json, Kiro calls it a power. According to the GitHub Changelog (2026-08-12), Agent Plugins 1.0 was published on 2026-08-06 with AWS, Anysphere (Cursor), Microsoft, OpenAI and Vercel as founding partners. The five Core Maintainers listed in the spec repo's MAINTAINERS file come from exactly those five companies.

// 01

What it removes · how to install · a first runnable example

Claim: it removes "package the same toolkit once per client"; the smallest conformant plugin is two files.

1. The spec: agentplugins/agent-plugins-spec (about 1.4k stars per the GitHub repo page, read 2026-10). spec/1.0.0.md is the normative text and schemas/1.0.0/ holds the two JSON Schemas; 1.1.0 is still a working draft. The smallest plugin:

hello-plugin/
├── plugin.json
└── skills/greet/SKILL.md

# plugin.json: only $schema and name are required
{ "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "hello-plugin" }

Install steps for the launch clients (all from each vendor's official docs, searched 2026-10):

When to skip it: Claude Code is not on the launch list, and its official plugin docs (read 2026-10) don't mention the spec; it still reads .claude-plugin/plugin.json and .mcp.json. If Claude Code is your only client, there is no reason to change formats today.
// 02

Mechanism: why it can work across clients

Claim: by doing less. It standardizes only two component types that already have consensus, and fences everything else into per-client namespaces.

1. Fixed locations, no configuration

Skills are found only as SKILL.md in the immediate children of skills/; the spec explicitly forbids recursive search. Each skill follows the Agent Skills spec, and a non-conforming one is skipped while the rest of the plugin loads. MCP is read only from the root mcp.json, never from plugin.json.

2. MCP config is a closed union

Every server must state its type: stdio, streamable-http or legacy sse; one extra field makes that entry invalid. The Design Decisions section explains why: existing clients use incompatible MCP config shapes and infer transports differently. A client only needs to support one of stdio or streamable-http and skips entries it can't run.

{ "$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
  "mcpServers": {
    "lint": { "type": "stdio", "command": "./bin/lint-server",
              "args": ["--cache", "${PLUGIN_DATA}/cache"] } } }

Only two placeholders expand: ${PLUGIN_ROOT} (the plugin root) and ${PLUGIN_DATA} (a client-managed writable directory that survives updates). Every path must start with ./ and must not resolve outside the plugin root.

3. Client-specific extras go in reverse-domain directories

Hooks, commands, agents, rules and LSP servers are explicitly out of v1 as "too client-specific". They go in directories like com.github.copilot/ or under the extensions field of plugin.json; clients must ignore namespaces they don't implement, without validating them.

// 03

Real usage and limits: one folder for Claude Code and the other five

Claim: skills/ is shared for free; MCP config and the manifest get one copy each. This layout is inferred from both sets of official docs; the spec itself promises nothing about Claude Code.
my-tools/
├── plugin.json                # Agent Plugins: $schema + name
├── .claude-plugin/plugin.json # Claude Code manifest (optional)
├── skills/review/SKILL.md     # shared, written once
├── mcp.json                   # explicit type + ${PLUGIN_ROOT}
├── .mcp.json                  # Claude Code copy + ${CLAUDE_PLUGIN_ROOT}
└── com.github.copilot/hooks/  # one client's extras live here

Two checks: on the Claude Code side, claude --plugin-dir ./my-tools loads it directly and claude plugin validate ./my-tools checks the manifest; for the skill layer, use skills-ref validate from agentskills/agentskills. The spec's own FUTURE_CONSIDERATIONS admits there is no official validator yet, so on the Agent Plugins side you rely on the two JSON Schemas and each client's error messages.

Criteria: when to package as an Agent Plugin

// 04

Costs and alternatives

Claim: it unified the package, not the trust. None of the review before installing goes away.

1. The trust boundary is left to clients

The spec explicitly does not define installation, permission or trust models, distribution and marketplaces, registries, or OAuth and credentials. FUTURE_CONSIDERATIONS lists what's pending: permission declarations in the manifest, signatures and provenance, secret injection, enterprise allowlists. None of that is in 1.0. A stdio MCP server is a program that runs on your machine; review it with the checklists in Skill 30 and Skill 12.

2. "Works across clients" is not "works equally well"

The spec says where a client finds components, not how it exposes a skill to users or models. The same skill can trigger differently, get a different namespace, and cost different context in each client; run it at least once in each before publishing broadly.

3. Two configs drift

Supporting Claude Code means two MCP configs, which is one more place for things to drift. There are no dependency declarations either (also on the pending list), so plugins can't reference each other.

Alternatives, cheapest first: drop one SKILL.md into each client's skills directory → use npx skills from vercel-labs/skills to symlink one copy into several agents → each vendor's native plugin format → Agent Plugins.
Sources: Agent Plugins Specification 1.0.0 (component discovery, MCP closed union, placeholders, Design Decisions) · FUTURE_CONSIDERATIONS · Claude Code plugins reference (all read 2026-10)

// Buyer's card

Look at these three first: 1. The Design Decisions section of spec/1.0.0.md: ten minutes tells you what it covers and what it doesn't. 2. github/awesome-copilot: install a ready-made spec plugin in VS Code or Copilot CLI and look at a real directory. 3. Your main client's local loading path: Cursor's ~/.cursor/plugins/local/, Claude Code's --plugin-dir, Kiro's Import power from GitHub.

Add as needed: skills-ref validate (check each skill before packaging) · claude plugin validate (check the Claude Code manifest if you support it) · codex plugin marketplace add (if teammates use Codex).

Don't: build a whole plugin for one skill · put hooks at the root and hope every client reads them · treat "it installed" as "it was reviewed" · set PLUGIN_ROOT yourself in an mcp.json env block (the spec forbids it).

// Glossary

manifest
The plugin.json at the plugin root, declaring the spec version and plugin name.
$schema
The spec URL written into the JSON; clients use it to pick a version and must not fetch it over the network while loading.
closed union
A config format allowing only a few fixed shapes; one extra field makes the entry invalid.
extension namespace
A reverse-domain name like com.github.copilot that holds one client's private data or directory without collisions.
stdio / streamable-http
The two MCP transports: the first starts a local process over standard input and output; the second connects to a remote HTTP service.

// Three open questions

Anthropic isn't on the list. Is this just a coalition outside Claude Code?
From the repo: the five people in MAINTAINERS come from Amazon, Cursor, Microsoft, OpenAI and Vercel, with no one from Anthropic, yet both foundations it packages, Agent Skills and MCP, originated at Anthropic. The charter says no single vendor may hold a majority of Core Maintainer seats. Whether Claude Code will read a root plugin.json has no official answer yet; until it does, the dual-manifest layout in section 03 is the safe bet.
Why not standardize hooks? Everyone uses them.
The spec's answer is "too client-specific": lifecycle event names, inputs and outputs, and whether a hook can block all differ, so a forced common subset would serve nobody. v1 only takes the two things that already have independent specs and cross-client adoption. The cost: the most deterministic part of a plugin is exactly the least portable.
The repo's earliest commit calls it the Open Plugin Specification. What does that tell us?
Per the commit history, the first commit on 2026-04-02 was "Add Open Plugin Specification v1.0.0"; it was renamed to Agent Plugins on 07-19, and on 07-10 a marketplace appendix was removed. So distribution and marketplaces were once in the draft and were taken out on purpose. Leaving trust out is a deliberate trade-off, not an oversight, which tells you to look for safety guarantees in the client, not in the package format.

// Further reading