Plugins
APM supports plugins through the plugin.json format. Plugins are automatically detected and integrated into your project as standard APM dependencies.
Overview
Section titled “Overview”Plugins are packages that contain:
- Skills - Reusable agent personas and expertise
- Agents - AI agent definitions
- Commands - Executable prompts and workflows
- Instructions - Context and guidelines
APM automatically detects plugins with plugin.json manifests and synthesizes apm.yml from the metadata, treating them identically to other APM packages.
Installation
Section titled “Installation”Install plugins using the standard apm install command:
# Install a plugin from GitHubapm install owner/repo/plugin-name
# Or add to apm.ymldependencies: apm: - anthropics/claude-code-plugins/commit-commands#v1.2.0How APM Handles Plugins
Section titled “How APM Handles Plugins”When you run apm install owner/repo/plugin-name:
- Clone - APM clones the repository to
apm_modules/ - Detect - It searches for
plugin.jsonin priority order:plugin.json(root).github/plugin/plugin.json(GitHub Copilot format).claude-plugin/plugin.json(Claude format)
- Map Artifacts - Plugin primitives from the repository root are mapped into
.apm/:agents/→.apm/agents/skills/→.apm/skills/commands/→.apm/prompts/*.mdcommand files are normalized to*.prompt.mdfor prompt/command integration
- Synthesize -
apm.ymlis automatically generated from plugin metadata - Integrate - The plugin is now a standard dependency with:
- Version pinning via
apm.lock - Transitive dependency resolution
- Conflict detection
- Everything else APM packages support
- Version pinning via
This unified approach means no special commands needed — plugins work exactly like any other APM package.
Plugin Format
Section titled “Plugin Format”A plugin repository contains a plugin.json manifest and primitives at the repository root.
Supported Plugin Structures
Section titled “Supported Plugin Structures”APM supports multiple plugin manifest locations to accommodate different platforms:
GitHub Copilot Format
Section titled “GitHub Copilot Format”plugin-repo/├── .github/│ └── plugin/│ └── plugin.json # GitHub Copilot location├── agents/│ └── agent-name.agent.md├── skills/│ └── skill-name/│ └── SKILL.md└── commands/ └── command-1.md └── command-2.mdClaude Format
Section titled “Claude Format”plugin-repo/├── .claude-plugin/│ └── plugin.json # Claude location├── agents/│ └── agent-name.agent.md├── skills/│ └── skill-name/│ └── SKILL.md└── commands/ └── command-1.md └── command-2.mdRoot Format
Section titled “Root Format”plugin-repo/├── plugin.json # Root location (checked first)├── agents/│ └── agent-name.agent.md├── skills/│ └── skill-name/│ └── SKILL.md└── commands/ └── command-1.md └── command-2.mdPriority Order: APM checks for plugin.json in exactly three locations:
plugin.json(root).github/plugin/plugin.json.claude-plugin/plugin.json
Note: Primitives (agents, skills, commands, instructions) are always located at the repository root, regardless of where plugin.json is located.
plugin.json Manifest
Section titled “plugin.json Manifest”Only name is required. version and description are optional metadata:
{ "name": "Plugin Display Name", "version": "1.0.0", "description": "What this plugin does"}Optional fields:
{ "name": "My Plugin", "version": "1.0.0", "description": "A plugin for APM", "author": "Author Name", "license": "MIT", "repository": "owner/repo", "homepage": "https://example.com", "tags": ["ai", "coding"], "dependencies": [ "another-plugin-id" ]}Custom component paths
Section titled “Custom component paths”By default APM looks for agents/, skills/, commands/, and hooks/ directories at the plugin root. You can override these with custom paths using strings or arrays:
{ "name": "my-plugin", "agents": ["./agents/planner.md", "./agents/coder.md"], "skills": ["./skills/analysis", "./skills/review"], "commands": "my-commands/", "hooks": "hooks.json"}- String — single directory or file path
- Array — list of directories or individual files
- For skills, directories are preserved as named subdirectories (e.g.,
./skills/analysis/→.apm/skills/analysis/SKILL.md) - For agents, directory contents are flattened into
.apm/agents/(agents are flat files, not named directories) hooksalso accepts an inline object:"hooks": {"hooks": {"PreToolUse": [...]}}
MCP Server Definitions
Section titled “MCP Server Definitions”Plugins can ship MCP servers that are automatically deployed through APM’s MCP pipeline. Define servers using mcpServers in plugin.json:
{ "name": "my-plugin", "mcpServers": { "my-server": { "command": "npx", "args": ["-y", "my-mcp-server"] }, "my-api": { "url": "https://api.example.com/mcp" } }}mcpServers supports three forms:
- Object — inline server definitions (as above)
- String — path to a JSON file containing
mcpServers - Array — list of JSON file paths (merged, last-wins on name conflicts)
When mcpServers is absent, APM auto-discovers .mcp.json at the plugin root (then .github/.mcp.json as fallback), matching Claude Code’s auto-discovery behavior.
Servers with command are configured as stdio transport; servers with url use http (or the type field if it specifies sse or streamable-http). All plugin-defined MCP servers are treated as self-defined (registry: false).
Trust model: Self-defined MCP servers from direct dependencies (depth=1) are auto-trusted. Transitive dependencies require --trust-transitive-mcp. See dependencies.md for details.
Examples
Section titled “Examples”Installing Plugins from GitHub
Section titled “Installing Plugins from GitHub”# Install a specific pluginapm install anthropics/claude-code-plugins/commit-commands
# With versionapm install anthropics/claude-code-plugins/commit-commands#v1.2.0Adding Multiple Plugins to apm.yml
Section titled “Adding Multiple Plugins to apm.yml”dependencies: apm: - anthropics/claude-code-plugins/commit-commands#v1.2.0 - anthropics/claude-code-plugins/refactor-tools#v2.0 - mycompany/internal-standards#mainThen sync and install:
apm installVersion Management
Section titled “Version Management”Plugins support all standard APM versioning:
dependencies: apm: # Latest version - owner/repo/plugin
# Latest from branch - owner/repo/plugin#main
# Specific tag - owner/repo/plugin#v1.2.0
# Specific commit - owner/repo/plugin#abc123Run apm install to download and lock versions in apm.lock.
Supported Hosts
Section titled “Supported Hosts”- GitHub -
owner/repoorowner/repo/plugin-path - GitHub - GitHub URLs or SSH references
- Azure DevOps -
dev.azure.com/org/project/repo
Lock File Integration
Section titled “Lock File Integration”Plugin versions are automatically tracked in apm.lock:
apm_modules: anthropics/claude-code-plugins/commit-commands: resolved: https://github.com/anthropics/claude-code-plugins/commit-commands#v1.2.0 commit: abc123def456789This ensures reproducible installs across environments.
Conflict Detection
Section titled “Conflict Detection”APM automatically detects:
- Duplicate plugins from different sources
- Version conflicts between dependencies
- Missing transitive dependencies
Run with --verbose to see dependency resolution details:
apm install --verboseCompilation
Section titled “Compilation”Plugins are automatically compiled during apm compile:
apm compileThis:
- Generates
AGENTS.mdfrom plugin agents - Integrates skills into the runtime
- Includes prompt primitives
Finding Plugins
Section titled “Finding Plugins”Plugins can be found through:
- GitHub repositories (search for repos with
plugin.json) - Organization-specific plugin repositories
- Community plugin collections
Once found, install them using the standard apm install owner/repo/plugin-name command.
Troubleshooting
Section titled “Troubleshooting”Plugin Not Detected
Section titled “Plugin Not Detected”If APM doesn’t recognize your plugin:
- Check
plugin.jsonexists in one of the checked locations:plugin.json(root).github/plugin/plugin.json(GitHub Copilot format).claude-plugin/plugin.json(Claude format)
- Verify JSON is valid:
cat plugin.json | jq . - Ensure
namefield is present (only required field) - Verify primitives are at the repository root (
agents/,skills/,commands/)
Version Resolution Issues
Section titled “Version Resolution Issues”See the concepts.md guide on dependency resolution.
Custom Hosts / Private Repositories
Section titled “Custom Hosts / Private Repositories”See integration-testing.md for enterprise setup.