Generated: 2026-03-02 Source: GPT-5.2 Pro (via Oracle) + web research (March 2026) Tools compared: Claude Code, Cursor, Codex CLI, OpenCode, Gemini CLI, Windsurf, VS Code / Copilot, Aider
Legend: β full support | π‘ partial/limited | β no support
| Category / Feature | Claude Code | Cursor | Codex CLI | OpenCode | Gemini CLI | Windsurf | VS Code / Copilot | Aider | Open Plugin |
|---|---|---|---|---|---|---|---|---|---|
| Plugin Packaging | β | β | β | β | β | β | β | β | β |
| Plugin manifest/metadata | β (.claude-plugin/plugin.json) | β (.cursor-plugin/plugin.json) | β (no bundled manifest) | β (Open Plugin-compatible manifest) | β (extension manifest metadata) | π‘ (VS Code extensions; agent features not packaged) | β (package.json + Copilot chat metadata) | π‘ (AiderDesk packaging only) | β (.plugin/plugin.json; vendor dirs allowed) |
| Namespacing (conflict prevention) | β (/plugin:skill prefixing) | β (Open Plugin namespacing) | β (no plugin namespace) | β (Open Plugin namespacing) | β (extension IDs; @ext/command) | β (extension IDs via Open VSX) | β (publisher.ext + @participant) | β (no namespace layer) | β ({plugin}:{component}) |
| Versioning | β (SemVer in manifest) | β (manifest + marketplace versioning) | π‘ (Git/manual versioning) | β (SemVer in manifest) | β (extensions versioned) | β (extension SemVer) | β (SemVer enforced by marketplace) | π‘ (package/pip versioning) | β (SemVer version field) |
| Marketplace/registry | β (official + marketplace.json) | β (official marketplace) | β (no marketplace) | π‘ (community ecosystem; no official registry) | β (extensions marketplace) | π‘ (Open VSX registry) | β (VS Code Marketplace + MCP Gallery) | β (no marketplace) | β (marketplace.json index) |
| Install CLI/UI | β (claude plugin install) | β (marketplace UI install) | π‘ (manual install/config; MCP setup) | π‘ (tool-specific plugin install flow) | β (extension install workflow) | β (Extensions UI install) | β
(UI + code --install-extension) |
π‘ (pip + AiderDesk setup) | π‘ (spec defines semantics; host-defined UX) |
| Dev mode (load local dir) | β (--plugin-dir local load) | π‘ (local dir plugins; no flag documented) | π‘ (auto-detect skills dirs; feature-flagged) | β
(auto-load .opencode/plugins/ + user dir) |
β
(gemini extensions link symlinks) |
π‘ (VS Code extension dev; agent layer limited) | β (F5 Extension Dev Host + debugging) | β (no native dev mode) | β (--plugin-dir recommended) |
| Plugin scopes (user/project/local) | β (user/project/local/managed) | π‘ (VS Code user/workspace scopes) | π‘ (global + project layering) | π‘ (user + project dirs; no "managed") | π‘ (user-global only; no project scope) | π‘ (VS Code user/workspace) | β (user/workspace/folder enablement) | π‘ (config-based; per-repo patterns) | β (user/project/local; managed optional) |
| Content Components | β | β | β | β | β | β | β | β | β |
| Skills (slash commands) | β
(commands/ β /plugin:cmd) |
β (bundle skills/commands) | π‘ (skills exist; not slash-first UX) | β (Open Plugin commands/skills) | π‘ (commands/skills exist; UX differs) | π‘ (Agent Skills; not "slash" native) | β
(prompt files surface as /...) |
β (no slash command layer) | β (commands/ markdown) |
| Agent Skills (SKILL.md) | β (skills/*/SKILL.md) | β (Open Plugin / Agent Skills) | β (skills/*/SKILL.md) | β (Open Plugin skills; dynamic load) | π‘ (agent skill concept; format differs) | π‘ (Cascade/skills concept; not SKILL.md) | β (Agent Skills folders w/ resources) | β (no agent skills) | β (skills/*/SKILL.md) |
| Custom agents/sub-agents | β (agents/*.md) | β (sub-agents support) | β ([agents] in config.toml) | β (configurable agents) | β (sub-agents in extensions) | π‘ (Cascade agents; less standardized) | β (Chat Participants + subagents) | β (no sub-agent system) | β (agents/*.md) |
| Rules/coding standards | β (rules/*.mdc) | β (.cursorrules + plugin rules) | β (AGENTS.md layered rules) | β (rules/config support) | β (policies/*.toml) | β (.windsurf/rules + Cascade memories) | β (copilot-instructions.md + settings) | β (prompting only) | β (rules/*.mdc) |
| Custom commands | β (commands/*.md) | β (commands in bundles) | β (no dedicated commands layer) | β (commands/*.md) | β (.gemini/commands/*.toml) | β (no custom commands layer) | β (prompt files as commands) | β (no custom commands) | β (commands/*.md) |
| Automation & Integration | β | β | β | β | β | β | β | β | β |
| Hooks (lifecycle events) | β (rich lifecycle hooks) | β (agent/MCP lifecycle hooks) | π‘ (limited notifications/hooks) | β (event hooks supported) | β (scripts/hooks support) | β (Cascade hooks) | β (.github/hooks/*.json; tool hooks) | β (AiderDesk hooks) | β (hooks/hooks.json) |
| Hook types (command/prompt/agent) | β (command + prompt + agent) | π‘ (types not clearly documented) | β (no typed hook actions) | π‘ (varies by plugin; not uniform) | π‘ (script-based; not typed) | π‘ (prompt/tool triggers; limited typing) | β (pre/post tool + session events) | π‘ (JS callbacks; limited surface) | β (command, prompt, agent) |
| MCP server bundling | β (.mcp.json in plugin) | β (MCP in bundles) | π‘ (MCP configured globally) | β (MCP integration) | β (MCP via extensions) | β (MCP + OAuth) | β (MCP Gallery + mcp.json + bundling) | β (MCP supported; can be server) | β (.mcp.json or inline) |
| LSP server bundling | β (.lsp.json config) | π‘ (via VS Code extensions) | β (no LSP bundling) | π‘ (not confirmed) | β (no LSP bundling) | π‘ (via VS Code extensions) | β (extensions commonly bundle LSP) | β (no LSP bundling) | β (.lsp.json config; no binaries) |
| Plugin settings | β (settings.json support) | π‘ (VS Code settings; limited schema) | π‘ (config.toml profiles) | π‘ (config-based; plugin-defined varies) | β (install-time prompts/settings) | π‘ (IDE settings; partial) | β (contributes.configuration typed) | π‘ (CLI/config flags) | β (no settings schema) |
| Ecosystem | β | β | β | β | β | β | β | β | β |
| Official marketplace | β (official marketplace) | β (official marketplace) | β (none) | β (none official) | β (official extensions marketplace) | π‘ (Open VSX, not VS Code Marketplace) | β (VS Code Marketplace) | β (none) | π‘ (index spec; host-specific stores) |
| Community sharing | β (marketplace + git sharing) | β (marketplace + bundles sharing) | β (GitHub sharing common) | β (community plugin repos) | π‘ (ecosystem growing; repo-based) | β (VS Code/Open VSX ecosystem) | β (massive extension community) | π‘ (informal scripts/prompts) | β (git + marketplace.json) |
| Cross-tool portability | β (Open Plugin portable) | β (Open Plugin portable) | π‘ (skills portable; no manifest) | β (Open Plugin portable) | β (tool-specific extension system) | π‘ (extensions portable to forks; not Open Plugin) | π‘ (extensions portable to forks; not Open Plugin) | β (no standard plugin format) | β (designed for portability) |
- MCP integration β present across all 8 tools now (native, bundled, or configured). VS Code / Copilot's MCP Gallery reinforces MCP as a shared baseline.
- Hooks/automation β broadly supported, but depth varies. Claude Code and VS Code / Copilot expose typed lifecycle/tool hooks; Cursor/OpenCode/Windsurf/Gemini have hook systems with differing structure; Codex remains comparatively limited; Aider relies on AiderDesk.
- Rules/always-on guidance β common in 7/8 tools. Repo-scoped instruction files are now clearly mainstream (VS Code / Copilot + Windsurf), with Aider still the primary outlier.
- Versioning + install flows β universal in practice: marketplaces for IDE ecosystems (VS Code / Copilot, Cursor, Gemini CLI, Windsurf/Open VSX) and Git/pip distribution where no marketplace exists (Codex, OpenCode, Aider).
Takeaway: Open-plugin's emphasis on packaging + namespacing + discovery + hooks + MCP + rules/skills still targets the highest-overlap surface area β and adding VS Code / Copilot makes those primitives look even more "standard," not less.
- Rich, typed hook events (pre/post tool use, errors, session lifecycle) β now clearly first-class in Claude Code and VS Code / Copilot. Most other tools expose hooks as scripts/callbacks/notifications without a stable typed contract.
- Explicit, multi-scope enablement models β Claude Code (user/project/local/managed) and VS Code / Copilot (user/workspace/folder) are the most explicit. Many CLI tools are user-global or "user + project folder" only.
- LSP bundling as a plugin component β strongly IDE-centric (VS Code extensions) and supported by Claude Code via config; outside the IDE ecosystem it's inconsistent or absent.
- First-class settings schema + UI β VS Code / Copilot is the benchmark; Claude Code and Gemini CLI have meaningful structured settings; other tools are partial/ad-hoc.
- Plugin settings β still the biggest gap. Open-plugin has no standardized typed settings schema (keys/types/defaults/scopes/secrets) or host UX guidance, while VS Code / Copilot is highly mature here and Claude/Gemini benefit from structure.
- Hook interoperability taxonomy β open-plugin has a hooks concept, but needs a canonical event list + alias/mapping guidance that realistically bridges Claude-style lifecycles and VS Code / Copilot tool hooks.
- Richer agent/participant metadata β Claude sub-agents and VS Code / Copilot Chat Participants increasingly encode structured constraints (tools, behavior, orchestration). Open-plugin would benefit from optional structured fields that hosts can ignore safely.
- Policy engines β Gemini's safety/policy rules still exceed open-plugin's current "rules" abstraction.
- Standardize plugin settings (highest leverage) β add optional
settings.schema.jsonwith keys, types, defaults, descriptions, scope behavior, and secret handling. Design it to map cleanly onto VS Code'scontributes.configurationand Claude/Gemini settings models. - Define a minimal hook event contract + mapping β standardize a small core set (e.g.,
sessionStart,sessionEnd,preToolUse,postToolUse,errorOccurred,agentStop) plus aliasing guidance for host-specific event names. - Keep the core small β manifest + namespacing + versioning + scopes + marketplace index + skills/commands/agents/rules/hooks/MCP is still the right core. Everything else stays optional.
- Treat LSP as optional and IDE-driven β keep "config only, no binaries." Hosts that can run/ship servers (VS Code) do so via their extension system; CLI hosts can ignore.
- Add optional advanced agent metadata β
toolsAllowed/toolsDenied,modelPreference,maxSteps/budget, and execution constraints. Hosts can safely ignore.