AI platforms evolve. Claude Code may change its MCP JSON schema. GitHub Copilot may rename its instruction file format. Windsurf may move its config directory. When a platform makes a breaking change, packages targeting the old behavior break on new platform versions. APM versioning is the mechanism that allows packages to target specific platform generations without invalidating older packages.Documentation Index
Fetch the complete documentation index at: https://aipkg.org/llms.txt
Use this file to discover all available pages before exploring further.
The Problem
Consider a scenario:- Claude Code 1.x reads MCP server configs from
.claude/mcp.json - A package ships
apm/claude-code/mcp/server-config.json - Claude Code 2.x changes to
.claude/mcp_servers.jsonand uses a different schema - All existing packages break on Claude Code 2.x
APM Version Tags
A versioned APM moniker is a child of the unversioned moniker:In the Fallback Graph
claude-code-2 install walks the full chain. A package that only ships apm/claude-code/ content still works on claude-code-2 via fallback — it just uses the older content. The publisher is responsible for updating their package to add apm/claude-code-2/ when the breaking change requires it.
What Counts as a Breaking Change
A breaking change in a platform is an event that causes previously working package content to fail or behave incorrectly on the new platform version. Breaking changes (trigger a new versioned moniker):| Category | Examples |
|---|---|
| Configuration schema changes | MCP JSON field renames or removals; settings.json format changes |
| Hook event changes | Event name renames, removal of matcher support, payload schema changes |
| Install path changes | .claude/ moving to .claude-code/ or similar |
| File format changes | Skill file format changes from Markdown to a structured format |
| API changes | Claude Code plugin API breaking changes |
| Category | Examples |
|---|---|
| Additive schema changes | New optional fields in mcp.json |
| Performance improvements | Faster hook execution |
| New capabilities | New hook event types added (old ones still work) |
| UI changes | Different display of skills or commands in the IDE |
Fallback Graph Behavior
Most-Specific Match Wins
Given aclaude-code-2 install:
- Files in
apm/claude-code-2/are installed (highest specificity) - Files in
apm/claude-code/are installed whereapm/claude-code-2/has no override - Files in
apm/claude/→apm/ai/→shared/fill in the rest
apm/claude-code/ content continues to work on claude-code-2 via fallback — it will use the claude-code content on a claude-code-2 host.
Unknown Versioned Monikers
Clients MUST:- Silently skip
apm/{unknown-moniker}/directories during extraction - Not fail and not warn the user when an unknown moniker directory is encountered
- Log the skipped moniker for diagnostics (at
debugverbosity or lower)
apm/claude-code-3/ content continue to install correctly on older aipkg CLI versions that don’t know about claude-code-3.
Deprecation Policy
When a platform version is discontinued (e.g., a host platform drops support for a major version):- The moniker is marked
deprecatedin the canonical table - The registry shows a deprecation notice on package detail pages for packages that target only the deprecated moniker
- The moniker is never deleted — forward compatibility is a hard guarantee
- Package authors receive email notification (if opted in) when their targeted platform is deprecated
Communication of Breaking Changes
Platform maintainers communicate breaking changes via the registry’s platform changelog:Publisher Guidance
When a platform you target introduces a breaking change:Read the changelog
Fetch
GET /v3/platforms/{moniker}/changelog and review the breakingChanges for the new versioned moniker.Determine impact
Assess whether your package’s content in
apm/{moniker}/ is affected by the breaking change.If affected: add a new target directory
Add
apm/{moniker}-{version}/ to your package with content updated for the new platform version.shared/ Stability
Content in shared/ is by definition platform-agnostic. It is immune to platform breaking changes because it does not rely on any platform-specific schema or path.
Normative Rules for Clients
Clients implementing theaipkg install behavior MUST comply with the following:
- Unknown monikers MUST be silently skipped. Clients MUST NOT fail or warn the user when encountering
apm/{unknown-moniker}/directories. - Unknown monikers SHOULD be logged at
debugverbosity for diagnostics. - Fallback resolution MUST walk the full chain. A
claude-code-2install must still applyapm/claude-code/,apm/claude/,apm/ai/, andshared/content in order. - Monikers MUST NOT be deleted from client implementations based on their deprecation status. A deprecated moniker in the canonical table must remain valid for resolution purposes.