Skip to main content
AI Platform Monikers (APMs) are hierarchical string identifiers that describe AI platforms and tools that can consume AIpkg packages. They serve the same purpose as Target Framework Monikers (TFMs) in NuGet: they allow a single package to ship platform-specific content and allow the installer to select the most appropriate files for the current environment.

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 -:
ai
ai-{platform}
ai-{platform}-{variant}
The root moniker is ai. Every moniker implicitly has ai as its ultimate ancestor.

Canonical Moniker Table

MonikerDisplay NameParentInstall PathVersioning
aiAll AI Platforms(root fallback only)Stable
claudeClaude (all)ai(parent group only)Stable
claude-codeClaude Codeclaude.claude/See Platform Versioning
claude-desktopClaude DesktopclaudeSee belowSee Platform Versioning
copilotGitHub Copilot (all)ai(parent group only)Stable
copilot-vscodeCopilot in VS Codecopilot.github/See Platform Versioning
copilot-githubCopilot on GitHub.comcopilot.github/Stable
cursorCursorai.cursor/Stable
windsurfWindsurfai.windsurf/Stable
continueContinueai.continue/Stable
opencodeOpenCodeai.opencode/Stable
aiderAiderai.aider/Stable
clineClineai.cline/Stable
zedZed AIai.zed/Stable
geminiGemini (all)ai(parent group only)Stable
gemini-cliGemini CLIgemini.gemini/Stable
gemini-code-assistGemini Code Assistgemini.gemini/Stable
tabnineTabnineai.tabnine/Stable
qodoQodoai.qodo/Stable
codegptCodeGPTai(IDE extension settings)Stable
devinDevinai.devin/Stable
copilot-cliGitHub Copilot CLIcopilot.copilot/Stable
rooRoo Codeai.roo/Stable
gooseGooseai~/.config/goose/Stable
ampAmpai.amp/Stable
augmentAugment Codeai.augment/Stable
codexCodex CLIai.codex/Stable
amazon-qAmazon Q Developerai.amazonq/Stable
jetbrainsJetBrains (all)ai(parent group only)Stable
jetbrains-aiJetBrains AIjetbrains.aiassistant/Stable
jetbrains-airJetBrains Airjetbrains.air/Stable
junieJuniejetbrains.junie/Stable
sourcegraph-codySourcegraph Codyai(IDE extension settings)Stable
chatgptChatGPTai(cloud-based)Stable
kiro-cliKiroai.kiro/Stable
openhandsOpenHandsai.openhands/Stable
replitReplitai(cloud-based)Stable
traeTraeai.trae/Stable
warpWarpai.warp/Stable
kilo-codeKilo Codeai.kilocode/Stable
qwen-codeQwen Codeai.qwen/Stable
droidDroidai.factory/Stable
cortex-codeCortex Codeai.snowflake/cortex/Stable
kimi-cliKimi Code CLIai.kimi/Stable
crushCrushai.crush/Stable
iflow-cliiFlow CLIai.iflow/Stable
codebuddyCodeBuddyai.codebuddy/Stable
command-codeCommand Codeai.commandcode/Stable
antigravityAntigravityai.agent/Stable
mcpjamMCPJamai.mcpjam/Stable
kodeKodeai.kode/Stable
mistral-vibeMistral Vibeai.vibe/Stable
muxMuxai.mux/Stable
openclawOpenClawai.openclaw/Stable
piPiai.pi/Stable
adalAdaLai.adal/Stable
neovateNeovateai.neovate/Stable
pochiPochiai.pochi/Stable
qoderQoderai.qoder/Stable
zencoderZencoderai.zencoder/Stable

Claude Desktop Install Paths

Claude Desktop uses OS-specific config directories:
OSPath
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:
claude-code     →  claude  →  lib/shared
claude-desktop  →  claude  →  lib/shared
copilot-vscode  →  copilot →  lib/shared
copilot-github  →  copilot →  lib/shared
cursor          →  lib/shared
windsurf        →  lib/shared
continue        →  lib/shared
opencode        →  lib/shared
aider           →  lib/shared
cline           →  lib/shared
zed             →  lib/shared
gemini-cli      →  gemini  →  lib/shared
gemini-code-assist → gemini → lib/shared
tabnine         →  lib/shared
qodo            →  lib/shared
codegpt         →  lib/shared
devin           →  lib/shared
copilot-cli     →  copilot →  lib/shared
roo             →  lib/shared
goose           →  lib/shared
amp             →  lib/shared
augment         →  lib/shared
codex           →  lib/shared
amazon-q        →  lib/shared
jetbrains-ai    →  jetbrains →  lib/shared
jetbrains-air   →  jetbrains →  lib/shared
junie           →  jetbrains →  lib/shared
sourcegraph-cody → lib/shared
chatgpt         →  lib/shared
kiro-cli        →  lib/shared
openhands       →  lib/shared
replit          →  lib/shared
trae            →  lib/shared
warp            →  lib/shared
kilo-code       →  lib/shared
qwen-code       →  lib/shared
droid           →  lib/shared
cortex-code     →  lib/shared
kimi-cli        →  lib/shared
crush           →  lib/shared
iflow-cli       →  lib/shared
codebuddy       →  lib/shared
command-code    →  lib/shared
antigravity     →  lib/shared
mcpjam          →  lib/shared
kode            →  lib/shared
mistral-vibe    →  lib/shared
mux             →  lib/shared
openclaw        →  lib/shared
pi              →  lib/shared
adal            →  lib/shared
neovate         →  lib/shared
pochi           →  lib/shared
qoder           →  lib/shared
zencoder        →  lib/shared
Each step in the chain maps to a directory inside 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 APM T, build the chain:
1

Start with T

Begin the chain with [T].
2

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

Append shared

Append lib/shared (always last).
For file resolution, iterate the chain from end to start (least specific first), applying each 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:
  1. The package’s targets array in .aispec includes the target APM exactly, OR
  2. The package’s targets array includes a parent of the target APM (e.g., a package targeting claude is compatible with claude-code), OR
  3. The package’s targets array is empty or contains only ai (universal package).
Compatibility checking is performed by PlatformCompatibilityService in AIpkg.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 AIpkg spec repository. Requirements for a new moniker:
  1. Must have a public, documented plugin/extension system
  2. Must have a clearly defined install path
  3. Must be lower-kebab-case
  4. Must not conflict with an existing moniker or be a prefix of one

APM in Search Queries

The search endpoint accepts an apm query parameter that filters results to packages compatible with the specified platform:
GET /v3/search?q=mcp&apm=claude-code
The server expands 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

MonikerStability
claude, claude-code, claude-desktopStable
copilot, copilot-vscode, copilot-githubStable
cursor, windsurf, continueStable
opencode, aider, cline, zedStable
gemini, gemini-cli, gemini-code-assistStable
tabnine, qodo, codegpt, devinStable
copilot-cliStable
roo, goose, amp, augment, codexStable
amazon-q, sourcegraph-cody, chatgptStable
jetbrains, jetbrains-ai, jetbrains-air, junieStable
kiro-cli, openhands, replit, trae, warpStable
kilo-code, qwen-code, droid, cortex-code, kimi-cliStable
crush, iflow-cli, codebuddy, command-code, antigravityStable
mcpjam, kode, mistral-vibe, mux, openclawStable
pi, adal, neovate, pochi, qoder, zencoderStable
Any other monikerProvisional 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:
my-tool.1.0.0.aipkg
├── my-tool.aispec
└── lib/
    ├── shared/
    │   └── prompts/
    │       └── base-prompt.md          ← All platforms
    ├── claude-code/
    │   └── skills/
    │       └── my-tool.md              ← Claude Code only
    └── copilot/
        └── instructions/
            └── my-tool.md              ← All Copilot variants
  • base-prompt.md is installed (from lib/shared/)
  • skills/my-tool.md is installed (from lib/claude-code/)
  • instructions/my-tool.md is not installed (wrong platform)