Skip to content

Instantly share code, notes, and snippets.

@johnlindquist
Created March 3, 2026 00:47
Show Gist options
  • Select an option

  • Save johnlindquist/217aaa5023879dfa9bc654c7d7ad0260 to your computer and use it in GitHub Desktop.

Select an option

Save johnlindquist/217aaa5023879dfa9bc654c7d7ad0260 to your computer and use it in GitHub Desktop.
Open Plugin - Plugin Feature Comparison Grid (8 tools + Open Plugin)

Plugin Feature Comparison Grid

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)

Gap Analysis

Universal features (safe for open-plugin core)

  • 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.

Features only a subset support well (riskier to over-standardize)

  • 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.

Where open-plugin has gaps

  • 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.

Strategic recommendations

  1. Standardize plugin settings (highest leverage) β€” add optional settings.schema.json with keys, types, defaults, descriptions, scope behavior, and secret handling. Design it to map cleanly onto VS Code's contributes.configuration and Claude/Gemini settings models.
  2. 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.
  3. 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.
  4. 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.
  5. Add optional advanced agent metadata β€” toolsAllowed/toolsDenied, modelPreference, maxSteps/budget, and execution constraints. Hosts can safely ignore.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment