Moniker Syntax
APMs are lowercase alphanumeric strings with hyphens. The hierarchy is encoded in the moniker string itself — a parent is a prefix of its child, separated by-:
The root moniker is
ai. Every moniker implicitly has ai as its ultimate ancestor.Canonical Moniker Table
| Moniker | Display Name | Parent | Install Path | Versioning |
|---|---|---|---|---|
ai | All AI Platforms | — | (root fallback only) | Stable |
claude | Claude (all) | ai | (parent group only) | Stable |
claude-code | Claude Code | claude | .claude/ | See Platform Versioning |
claude-desktop | Claude Desktop | claude | See below | See Platform Versioning |
copilot | GitHub Copilot (all) | ai | (parent group only) | Stable |
copilot-vscode | Copilot in VS Code | copilot | .github/ | See Platform Versioning |
copilot-github | Copilot on GitHub.com | copilot | .github/ | Stable |
cursor | Cursor | ai | .cursor/ | Stable |
windsurf | Windsurf | ai | .windsurf/ | Stable |
continue | Continue | ai | .continue/ | Stable |
opencode | OpenCode | ai | .opencode/ | Stable |
aider | Aider | ai | .aider/ | Stable |
cline | Cline | ai | .cline/ | Stable |
zed | Zed AI | ai | .zed/ | Stable |
Claude Desktop Install Paths
Claude Desktop uses OS-specific config directories:| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/Claude/ |
| Windows | %APPDATA%\Claude\ |
| Linux | ~/.config/claude/ |
Fallback Graph
The fallback graph defines which platform directories the installer checks, ordered from most specific to most general:lib/. For example, claude-code maps to lib/claude-code/, claude maps to lib/claude/, and the terminal step always maps to lib/shared/.
Resolution Algorithm
Given a target APMT, build the chain:
Walk to parent
Find the parent of
T in the canonical table. If a parent exists, append it to the chain and repeat until no parent remains.lib/{entry}/ directory’s files. The last write wins, so most-specific files override less-specific ones.
Package Compatibility
A package is compatible with a target APM if any of the following are true:- The package’s
targetsarray in.aispecincludes the target APM exactly, OR - The package’s
targetsarray includes a parent of the target APM (e.g., a package targetingclaudeis compatible withclaude-code), OR - The package’s
targetsarray is empty or contains onlyai(universal package).
Compatibility checking is performed by
PlatformCompatibilityService in AI•Pkg.Core. See SDK Interface for the API surface.Moniker Normalization
APMs are always lowercased. During ingestion and search, the server normalizes APM values:- Convert to lowercase
- Strip leading/trailing whitespace
- Reject any characters outside
[a-z0-9-] - Reject monikers longer than 64 characters
Unknown Monikers
A package may declare a dependency on or include files for a moniker not in the canonical table. Installers must:- Warn (not error) when encountering an unknown moniker in
targets[] - Silently skip unknown
lib/{unknown-moniker}/directories during installation - Not fail validation solely due to an unknown moniker (forward compatibility)
The registry server logs unknown monikers for monitoring purposes.
Moniker Registration
New monikers are added to the canonical table by opening a PR to the AI•Pkg spec repository. Requirements for a new moniker:- Must have a public, documented plugin/extension system
- Must have a clearly defined install path
- Must be lower-kebab-case
- Must not conflict with an existing moniker or be a prefix of one
APM in Search Queries
The search endpoint accepts anapm query parameter that filters results to packages compatible with the specified platform:
claude-code to [claude-code, claude] using the fallback graph, then returns packages whose targets array intersects with the expanded set (plus universal packages targeting lib/shared/).
APM Stability Guarantees
| Moniker | Stability |
|---|---|
claude, claude-code, claude-desktop | Stable |
copilot, copilot-vscode, copilot-github | Stable |
cursor, windsurf, continue | Stable |
opencode, aider, cline, zed | Stable |
| Any other moniker | Provisional until canonical registration |
Stable monikers will not be removed or renamed. If a platform is discontinued, its moniker is deprecated (marked in the registry) but not deleted. For how platforms evolve over time and how breaking changes in host platforms are handled, see Platform Versioning.
Example: Multi-Platform Package Layout
A package that ships different skill files for Claude Code vs Copilot but shares a common prompt:- claude-code install
- copilot-vscode install
base-prompt.mdis installed (fromlib/shared/)skills/my-tool.mdis installed (fromlib/claude-code/)instructions/my-tool.mdis not installed (wrong platform)