Best for
- Design a plugin system for a coding-agent CLI or terminal runtime
- Add installable extensions that provide commands, skills, hooks, agents, or MCP servers
- Separate built-in capabilities from marketplace or repo-local plugins
vasilyu1983/AI-Agents-public/frameworks/shared-skills/skills/ai-coding-agents-plugins/SKILL.md
Designs plugin systems for coding-agent runtimes and CLIs. Use when adding plugin manifests, extension points, built-in plugins, or reloadable agent integrations.
Decision brief
Use this skill to design or review plugin systems for coding-agent runtimes, especially terminal-first CLIs that load skills, hooks, MCP servers, commands, agents, or output styles from installable extensions.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Declared | Source record | Install path and trigger |
| Claude Code | Declared | Source record | Install path and trigger |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/vasilyu1983/AI-Agents-public --skill "frameworks/shared-skills/skills/ai-coding-agents-plugins"Inspect the Agent Skill "ai-coding-agents-plugins" from https://github.com/vasilyu1983/AI-Agents-public/blob/53f6cb73ea53a2646e3e7d4665062ad66f3683ac/frameworks/shared-skills/skills/ai-coding-agents-plugins/SKILL.md at commit 53f6cb73ea53a2646e3e7d4665062ad66f3683ac. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
1. Classify the extension surface. Decide whether the user actually needs a plugin, or just a local skill, hook, MCP server, or built-in command. 2. Define capability families first. Model commands, skills, hooks, agents, output styles, and MCP servers as typed host-owned extens…
Review the “ASCII Flow” section in the pinned source before continuing.
Review the “Quick Reference” section in the pinned source before continuing.
Design a plugin system for a coding-agent CLI or terminal runtime
Review the “Use Other Skills” section in the pinned source before continuing.
Permission review
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 94/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 80 | Source | Repository attention, not individual Skill quality |
| Compatibility | 2 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Use this skill to design or review plugin systems for coding-agent runtimes, especially terminal-first CLIs that load skills, hooks, MCP servers, commands, agents, or output styles from installable extensions.
This skill owns plugin architecture for coding agents. For the broader coding-agent creation workflow, start with ../ai-coding-agents/SKILL.md.
plugin package
|
v
manifest validation
identity + version + capability declarations + trust class
|
v
install or load
built-in | user | project | marketplace | repo-local
|
v
registration
skills + commands + tools + hooks + agents + MCP servers
|
v
policy filter + namespace
only safe capabilities enter the runtime
|
v
reload/disable/uninstall invalidates caches and visible registries
| Question | Read | Outcome |
|---|---|---|
| How should a coding-agent plugin be structured? | references/plugin-manifest-and-capability-model.md | Package layout, manifest fields, capability families |
| How should plugins load, reload, and register? | references/plugin-loading-and-runtime-lifecycle.md | Discovery order, activation flow, cache and reload rules |
| Where should trust boundaries live? | references/plugin-trust-boundaries-and-safety.md | Install-time safety, runtime restrictions, policy controls |
| How does OpenAI Codex structure plugin manifests and marketplace lifecycle? | references/openai-codex-plugin-manifest-and-marketplace.md | Skills/MCP/apps/hooks paths, interface metadata, path rules, marketplace add/remove/upgrade |
| How does GitHub Copilot CLI structure plugin manifests and marketplaces? | references/github-copilot-cli-plugin-manifest-and-marketplace.md | Manifest search order, component paths, marketplace.json shape, install sources, cross-runtime manifest convergence with Claude Code |
| Need | Use Instead |
|---|---|
| End-to-end coding agent or coding team design | ../ai-coding-agents/SKILL.md |
| MCP server design and connectivity | ../agents-mcp/SKILL.md |
| Hook authoring and lifecycle automation | ../agents-hooks/SKILL.md |
| Subagent definitions and delegation contracts | agents-subagents |
| Generic CLI and SDK design outside agent runtimes | ../software-devtools/SKILL.md |
| Skill packaging and shared-skills validation | ../agents-skills/SKILL.md |
Use these defaults unless the runtime has a better documented model:
Source: code.claude.com/docs/en/plugins-reference and code.claude.com/docs/en/discover-plugins (verified 2026-06-09).
The manifest lives at .claude-plugin/plugin.json and is optional (auto-discovery applies without it). name is the only required field if a manifest is present.
Key fields (complete schema):
| Field | Type | Notes |
|---|---|---|
$schema | string | JSON Schema URL for editor autocomplete; ignored by Claude Code at load time |
name | string | Required if manifest present. Kebab-case, no spaces. Used for component namespacing (plugin-name:skill-name). The marketplace entry can list the plugin under a different name; that entry name, not the one in plugin.json, is what enabledPlugins and /plugin key on |
displayName | string | Human-readable, may contain spaces; shown in /plugin picker |
version | string | Semantic version. Resolution order when a user checks for updates: plugin.json version, then the marketplace entry's version, then the git commit SHA of the source, then "unknown" (non-git sources). Pin an explicit version only if you will remember to bump it on every release — a stale explicit version silently blocks users from receiving new commits, where an unset version updates on every commit |
description | string | Brief purpose statement |
author | object | {name, email, url} |
homepage | string | Documentation URL |
repository | string | Source code URL |
license | string | SPDX identifier |
keywords | array | Discovery tags |
defaultEnabled | boolean | If false, installs disabled; user must explicitly enable |
skills | string|array | Custom skill directories (adds to default skills/) |
commands | string|array | Flat .md skill files (replaces default commands/) |
agents | string|array | Agent files (replaces default agents/) |
hooks | string|array|object | Hook configs (merges) |
mcpServers | string|array|object | MCP configs (merges) |
lspServers | string|array|object | LSP server configs |
outputStyles | string|array | Output style files (replaces default) |
experimental.themes | string|array | Color theme files |
experimental.monitors | string|array | Background monitor configs |
userConfig | object | Prompted at enable time; values available as ${user_config.KEY} |
channels | array | Message channel declarations (Telegram/Slack/Discord style; bound to MCP servers) |
dependencies | array | Other plugins this one requires, optionally with semver constraints, e.g. {"name": "secrets-vault", "version": "~2.1.0"}. Enabling a plugin transitively enables its dependencies at the same scope; disabling fails (with a chained command in the error) while a dependent is still enabled. claude plugin prune removes auto-installed dependencies no longer required by anything |
Two directories round out the package but aren't manifest fields: bin/ (executables added to the Bash tool's PATH while the plugin is enabled — invokable as bare commands) and a root settings.json (default configuration applied on enable; only the agent and subagentStatusLine keys are currently honored). A plugin-root CLAUDE.md is not loaded as context — ship instructions as a skill instead.
Component path rules: skills adds to default; commands, agents, outputStyles, experimental.themes, experimental.monitors replace the default; hooks, mcpServers, lspServers have their own merge rules.
Unrecognized fields are tolerated, not rejected — Claude Code ignores top-level keys it doesn't recognize (a type mismatch on a recognized field still fails to load). This lets one plugin.json double as an npm package.json or a VS Code/Cursor/MCPB manifest. Use claude plugin validate --strict in CI to turn unrecognized-field and near-miss-name warnings into errors before publishing, without making every runtime load pedantic.
Plugin subagent restrictions: plugin-shipped agents support name, description, model, effort, maxTurns, tools, disallowedTools, skills, memory, background, isolation ("worktree" only). Fields hooks, mcpServers, and permissionMode are explicitly not supported for plugin-shipped agents.
@skills-dir)Any folder under a skills directory (~/.claude/skills/ or <project>/.claude/skills/) that contains its own .claude-plugin/plugin.json loads automatically as a plugin named <name>@skills-dir on the next session — no marketplace, no install step, and the plugin is used in place rather than copied into the plugin cache. claude plugin init <name> scaffolds one. This is the fastest path from "a skill with extra opinions" to "a real plugin with bundled agents/hooks/MCP," and it is the mechanism a solo developer or small team should reach for before standing up a marketplace.
Trust follows scope, not source-of-truth intent: a personal-scope (~/.claude/skills/) plugin has no extra restrictions, but a project-scope (<cwd>/.claude/skills/) plugin — checked into a repo and therefore attacker-controlled if the repo is untrusted — loads only after the workspace trust dialog, and its MCP servers, LSP servers, and background monitors are restricted further (monitors do not load at all from project scope). Design new runtimes with this same scope-to-trust mapping: repo-sourced plugin content should never get the same default trust as a plugin the user personally placed in their home directory.
Plugins with lspServers configuration provide real-time code intelligence via the LSP tool. This is distinct from MCP:
diagnostics: false in lspServers config keeps code navigation but suppresses diagnostic injectionclaude-plugins-official: clangd-lsp, csharp-lsp, gopls-lsp, jdtls-lsp, kotlin-lsp, lua-lsp, php-lsp, pyright-lsp, rust-analyzer-lsp, swift-lsp, typescript-lspTwo Anthropic-run marketplaces, three different registered names — do not assume the install-time name matches the repo name:
| Marketplace | Install-time @name | Source repo | Auto-enabled |
|---|---|---|---|
| Official (curated by Anthropic) | claude-plugins-official | anthropics/claude-plugins-official | Yes — auto-loaded at startup; auto-update on by default |
| Community (safety-screened third-party, pinned to commit SHA per plugin) | claude-community | anthropics/claude-plugins-community | No — added manually via /plugin marketplace add anthropics/claude-plugins-community; auto-update off by default |
| Demo/example (Anthropic-maintained, not curated) | claude-code-plugins | anthropics/claude-code | No — added manually via /plugin marketplace add anthropics/claude-code |
Trap: the community marketplace's repo is anthropics/claude-plugins-community but its registered marketplace name is the shorter claude-community — installing with <plugin>@claude-plugins-community fails. Always confirm the actual name with /plugin marketplace list before writing install instructions into docs or onboarding scripts. This name/repo mismatch is a general marketplace-design trap, not unique to Anthropic's catalogs — expect it whenever a marketplace author renames the catalog independently of the repo.
Install syntax: /plugin install <plugin-name>@<marketplace-name> (interactive scope picker), or non-interactively claude plugin install <plugin>@<marketplace> --scope {user|project|local} (default user). claude plugin details <name> shows the always-on and per-invoke token cost before you install.
The /plugin command opens a four-tab interface (cycle with Tab / Shift+Tab):
| Scope | Settings file | Use case |
|---|---|---|
user | ~/.claude/settings.json | Personal, all projects (default) |
project | .claude/settings.json | Shared via version control |
local | .claude/settings.local.json | Project-specific, gitignored |
managed | Managed settings | Read-only, admin-installed, update-only |
Run /reload-plugins to activate newly installed, enabled, or disabled plugins without restarting. Shows counts for plugins, skills, agents, hooks, MCP servers, and LSP servers reloaded. If a plugin provides MCP servers, reloading invalidates the prompt cache; a warning is shown; pass --force to apply anyway.
The details pane and claude plugin details <name> command show per-component always-on token cost and per-invoke token cost before installation.
Plugin-shipped agents cannot set hooks, mcpServers, or permissionMode. These fields are silently ignored when the agent is defined inside a plugin. This prevents plugins from escalating privileges through agent definitions.
| Setting | Effect |
|---|---|
disableBundledSkills | Disables skills bundled with Claude Code itself (not marketplace plugins) |
strictPluginOnlyCustomization | Restricts customization sources to plugins and managed settings only; blocks user/project skills, hooks, MCP from non-plugin paths |
strictKnownMarketplaces | Limits installable plugins to admin-allowlisted marketplaces |
blockedMarketplaces | Blocks specific marketplaces (including skills-dir source) |
Source: docs.github.com/en/copilot/concepts/agents/copilot-cli/about-cli-plugins and docs.github.com/en/copilot/reference/copilot-cli-reference/cli-plugin-reference (verified 2026-07-11). Copilot CLI went GA 2026-02-27; enterprise-managed plugins hit public preview 2026-05-06. Full field tables in references/github-copilot-cli-plugin-manifest-and-marketplace.md.
Copilot CLI converged on essentially the same capability model as Claude Code: agents (*.agent.md), skills (SKILL.md), hooks, MCP servers, and LSP servers, discovered from a plugin.json manifest whose required field is name and whose install sources include owner/repo, owner/repo:path/to/plugin, git URLs, local paths, or plugin@marketplace. Two marketplaces (copilot-plugins, awesome-copilot) are registered by default.
The load-bearing fact for anyone building a new coding-agent plugin host: Copilot CLI's manifest loader checks .plugin/plugin.json, then plugin.json, then .github/plugin/plugin.json, then falls back to .claude-plugin/plugin.json — the exact Claude Code manifest location — before giving up. That is a deliberate compatibility decision, not coincidence: a plugin authored for Claude Code loads on Copilot CLI without modification for the fields both hosts share. Treat .claude-plugin/plugin.json plus the skills/, agents/, hooks/hooks.json, .mcp.json conventions as the emerging cross-vendor baseline, and design any new runtime to read that shape rather than inventing a fourth one. Do not oversell the convergence, though — host-specific fields (Copilot's extensions block with an exclusive flag, Claude Code's experimental.themes/experimental.monitors/channels) have no counterpart on the other host and are silently dropped there, not migrated.
Goose unifies the "plugin" and "MCP extension" concepts into a single typed extension model, and shows what manifest-in-recipe delivery looks like when tasks ship with their own extension declarations.
type: discriminatorGoose recipes declare extensions inline:
extensions:
- type: builtin
name: developer
- type: mcp
name: github
Both are extension entries; the type discriminator selects transport and trust. This collapses the dual-track "built-ins vs MCP" mental model into one ontology with two transports.
origin or transport field carries builtin | mcp | .... Manifest, precedence, namespacing, and cache identity apply uniformly.Extension trait / interface, one activation path, one cache-identity rule. The transport field is free to evolve — builtin, mcp-stdio, mcp-sse, acp-client — without new mental models.In Goose, the unit of work (recipe) declares its extension dependencies inline. This differs from classic plugin systems where plugins are enabled globally at runtime-config level.
(host_config, project_config, task_manifest). The resolver intersects them — task can narrow but not broaden. A task's declared extensions must be subsets of the project's allowlist; violations are install-time errors, not runtime surprises.OpenAI's Codex CLI ships first-party plugins ("Build iOS Apps", "Build macOS Apps", authored by Thomas Ricouard / @Dimillian) that auto-update with each Codex release. They package skills (SwiftUI Liquid Glass, Performance Audit, View Refactor, App Intents, AppKit interop, signing/notarization) behind a single plugin identity.
origin: official | builtin | marketplace | local tag on every plugin record. Tie official cache keys to (runtime_version, plugin_id) and refresh on runtime upgrade without prompting the user. Source: https://github.com/openai/codexGoose's recipe-scanner/ validates YAML recipes (and therefore their declared extensions) at build/ship time. This generalizes: plugin manifests and task manifests should face static validation before activation, not just at runtime load.
references/plugin-manifest-and-capability-model.md — Package layout, manifest structure, and capability typingreferences/plugin-loading-and-runtime-lifecycle.md — Discovery, caching, reload, and activation flowreferences/plugin-trust-boundaries-and-safety.md — Trust model, validation, and policy guardrailsreferences/openai-codex-plugin-manifest-and-marketplace.md — OpenAI Codex plugin manifest fields, interface metadata, path validation, and marketplace lifecyclereferences/github-copilot-cli-plugin-manifest-and-marketplace.md — GitHub Copilot CLI manifest search order, component paths, marketplace.json shape, and cross-runtime convergence with Claude Codedata/sources.json — Primary documentation and source references for plugin-runtime guidance../ai-coding-agents/SKILL.md — Broader coding-agent architecture and creation workflow../agents-hooks/SKILL.md — Hook lifecycle design../agents-mcp/SKILL.md — MCP server integrationclaude_code source snapshot. Re-check upstream code or docs before relying on volatile runtime details.Before applying this skill on a non-trivial task, read learnings.consolidated.md in this directory (and learnings.md if present).
After applying it, if you encountered a pattern worth remembering, a mistake worth preventing, or a domain fact that surprised you, append one dated bullet to learnings.md via agents-skills-feedback-loop/scripts/append_learning.py. Do not modify SKILL.md itself.
Frequently asked questions
Use this skill to design or review plugin systems for coding-agent runtimes, especially terminal-first CLIs that load skills, hooks, MCP servers, commands, agents, or output styles from installable extensions.
The source record exposes this install command: npx skills add https://github.com/vasilyu1983/AI-Agents-public --skill "frameworks/shared-skills/skills/ai-coding-agents-plugins". Inspect the command and pinned source before running it.
The pinned source record declares support for: codex, claude code.
Alternatives
vasilyu1983/AI-Agents-public
Guides iOS testing with XCTest, XCUITest, Swift Testing, simctl, and xcresult. Use when choosing destinations, controlling flakes, or parsing test artifacts for native apps.
vasilyu1983/AI-Agents-public
Designs and audits UI/UX systems with usability and accessibility requirements. Use when shaping flows, design systems, interaction patterns, or WCAG-aware product behavior.
vasilyu1983/AI-Agents-public
Designs session lifecycle for coding-agent runtimes. Use when implementing resume, transcript restoration, checkpoint rewind, cross-worktree recovery, or session-state persistence.
vasilyu1983/AI-Agents-public
Designs and audits native Android interfaces. Use when reviewing Compose layout, typography, color, motion, or adaptive patterns on a verified emulator build.