Targets matrix
The canonical reference for what APM deploys, where, for every supported harness. Use this page to choose a target, debug an unexpected deploy location, or confirm whether a primitive is supported on a given tool.
For background on the target model, see
Primitives and targets. For
the runtime CLI surface, see apm targets and
apm compile. For the primitive types themselves,
see Primitive types.
Summary
Section titled “Summary”| Target | Deploy root | instructions | prompts | agents | skills | commands | hooks | mcp |
|---|---|---|---|---|---|---|---|---|
| copilot | .github/ | [x] | [x] | [x] | [x] | [ ] | [x] | [x] |
| claude | .claude/ | [x] | [ ] | [x] | [x] | [x] | [x] | [x] |
| grok-build | .grok/ | [x] | [ ] | [x] | [x] | [x] | [ ] | [ ] |
| cursor | .cursor/ | [x] | [ ] | [x] | [x] | [x] | [x] | [x] |
| codex | .codex/ + .agents/ | [ ] | [ ] | [x] | [x] | [ ] | [x] | [x] |
| gemini | .gemini/ | [ ] | [ ] | [ ] | [x] | [x] | [x] | [x] |
| antigravity | .agents/ | [x] | [ ] | [ ] | [x] | [ ] | [x] | [x] |
| opencode | .opencode/ | [ ] | [ ] | [x] | [x] | [x] | [ ] | [x] |
| windsurf | .windsurf/ + .agents/ | [x] | [ ] | [ ] | [x] | [x] | [x] | [x] |
| kiro | .kiro/ | [x] | [ ] | [x] | [x] | [ ] | [x] | [x] |
| intellij | user MCP config; files via Copilot | [x] (*) | [x] (*) | [x] (*) | [x] (*) | [ ] | [x] (*) | [x] |
| agent-skills | .agents/ | [ ] | [ ] | [ ] | [x] | [ ] | [ ] | [ ] |
Skills deploy to .agents/skills/ for Copilot, Cursor, OpenCode,
Gemini, Antigravity, Codex, and Windsurf by default (see Skills convergence
below). Claude, Grok Build, and Kiro keep target-native skill directories.
(*) For intellij, file primitives route through the Copilot profile:
instructions, prompts, agents, and hooks use .github/, while skills use
.agents/skills/. The IntelliJ-specific adapter configures MCP only.
copilot-cowork (Microsoft 365 Copilot), copilot-app (GitHub Copilot
desktop App), grok-cloud (xAI Grok Cloud), openclaw (OpenClaw agent
runtime), and hermes are gated behind experimental flags and not listed
above. See Experimental.
Post-install instruction compilation
Section titled “Post-install instruction compilation”After a project install stages dependency instructions, the APM CLI requires a
separate root-context compile for codex, gemini, and opencode, plus
experimental hermes when enabled. It emits the
req-tg-007 reminder for those targets.
All other targets in this matrix either deploy instructions as native per-file
rules, do not support dependency instructions, or have no verified
root-context reader, so they do not trigger that reminder. A target not
classified here does not trigger it by default.
Detection and resolution
Section titled “Detection and resolution”apm install and apm compile resolve the active target list with this
priority:
--target/--allon the command line.targets:inapm.yml.- Auto-detection from filesystem signals (table below).
For MCP installation, the equivalent explicit legacy --runtime flag also
has highest priority. MCP machine discovery runs only when targets: is
omitted (or legacy all is treated as omission). Declared targets therefore produce portable MCP ownership in apm.lock.yaml;
omitted targets intentionally make that ownership machine-dependent.
apm install fails closed when no target can be detected. apm compile
retains its documented unsignalled fallback because install writes
runtime-specific configuration while compile only generates project output. Use
apm targets to preview the resolved list.
Detection signal whitelist
Section titled “Detection signal whitelist”| Target | Signals (any one activates the target) |
|---|---|
| copilot | .github/copilot-instructions.md file, or .github/instructions/, .github/agents/, .github/prompts/, or .github/hooks/ directory |
| claude | .claude/ directory, or CLAUDE.md file |
| grok-build | .grok/ directory |
| cursor | .cursor/ directory, or .cursorrules file |
| codex | .codex/ directory |
| gemini | .gemini/ directory, or GEMINI.md file |
| opencode | .opencode/ directory |
| windsurf | .windsurf/ directory |
| kiro | .kiro/ directory |
| intellij | Global github-copilot/intellij/ config directory (MCP runtime discovery only) |
IntelliJ-specific integration is MCP-only and writes JetBrains Copilot’s
user-scope mcp.json. That global signal does not auto-select file-primitive
deployment. When intellij is selected explicitly, package file primitives use
the Copilot profile. intellij does not participate in plain all expansion.
agent-skills is a canonical target key; antigravity is explicit-only for
auto-detection. Both are available with --target and can be listed in a
project’s apm.yml targets: field so contributors running plain apm install pick them up automatically.
copilot-cowork, copilot-app, grok-cloud, openclaw, and hermes are
experimental targets that require apm experimental enable <name> before use.
They are selected with --target only and cannot be listed in apm.yml (the
canonical targets validator will reject them).
copilot
Section titled “copilot”GitHub Copilot (CLI and IDE).
- Detection.
.github/copilot-instructions.md. - Deploy directory.
.github/at project scope;~/.copilot/at user scope. - Supported primitives. instructions, prompts, agents, skills, hooks, mcp.
- File conventions.
- instructions:
.github/instructions/<name>.instructions.md - prompts:
.github/prompts/<name>.prompt.md - agents:
.github/agents/<name>.agent.md - skills:
.agents/skills/<name>/SKILL.md - hooks:
.github/hooks/<name>.json - generated:
.github/copilot-instructions.md(compile output)
- instructions:
- User scope. Partial.
promptsdeploy under~/.copilot/prompts/;instructionsfrom all packages are concatenated into~/.copilot/copilot-instructions.md(Copilot CLI reads only that single file at user scope). User-scope deploys land under~/.copilot/, not~/.github/; hook script commands are written as absolute paths so Copilot CLI can invoke them from any working directory. - Global compile.
apm compile -gcan also render global instructions to~/.copilot/AGENTS.mdfor root-context readers that honorAGENTS.md.
claude
Section titled “claude”Claude Code.
- Detection.
.claude/directory, orCLAUDE.md. - Deploy directory.
.claude/(project and user scope; user scope honorsCLAUDE_CONFIG_DIRif set). - Supported primitives. instructions, agents, skills, commands, hooks, mcp. (No
prompts.) - File conventions.
- instructions: deployed directly by
apm installto.claude/rules/<name>.md - agents:
.claude/agents/<name>.md - commands:
.claude/commands/<name>.md - skills:
.claude/skills/<name>/SKILL.md - hooks: merged into
.claude/settings.json
- instructions: deployed directly by
- Compile output.
CLAUDE.md; instructions already deployed under.claude/rules/are omitted fromCLAUDE.mdto avoid duplicate context.
cursor
Section titled “cursor”Cursor.
- Detection.
.cursor/directory, or legacy.cursorrulesfile. - Deploy directory.
.cursor/. - Supported primitives. instructions, agents, skills, commands, hooks, mcp. (No
prompts.) - File conventions.
- instructions:
.cursor/rules/<name>.mdc - agents:
.cursor/agents/<name>.md - commands:
.cursor/commands/<name>.md - skills:
.agents/skills/<name>/SKILL.md - hooks:
.cursor/hooks.json
- instructions:
- User scope. Partial.
instructionsis excluded at user scope; Cursor reads global rules from its Settings UI rather than from disk. - Global compile.
apm compile -gcan render global instructions to~/.cursor/AGENTS.mdfor root-context readers that honorAGENTS.md; Cursor global rules still use the Settings UI. - Caveat. Command files use the shared
claude_commandtransformer today; Cursor-specific frontmatter keys (author,mcp,parameters, …) are dropped at install time and surfaced via diagnostics.
OpenAI Codex CLI.
- Detection.
.codex/directory. - Deploy directory.
.codex/plus.agents/for skills. - Supported primitives. agents, skills, hooks, mcp. (No
instructions,prompts, orcommands.) - File conventions.
- agents:
.codex/agents/<name>.toml - skills:
.agents/skills/<name>/SKILL.md - hooks:
.codex/hooks.json
- agents:
- Compile output.
AGENTS.mdonly. Per-file instructions are not installed for Codex.
gemini
Section titled “gemini”Gemini CLI.
- Detection.
.gemini/directory, orGEMINI.md. - Deploy directory.
.gemini/(project and user scope). - Supported primitives. commands, skills, hooks, mcp.
- File conventions.
- commands:
.gemini/commands/<name>.toml - skills:
.agents/skills/<name>/SKILL.md - hooks: merged into
.gemini/settings.json
- commands:
- Compile output.
GEMINI.md. Gemini CLI does not read per-file rules from.gemini/rules/, soinstructionsis compile-only.
antigravity
Section titled “antigravity”Google Antigravity CLI (agy), successor to Gemini CLI.
- Detection. None — explicit-only for auto-detection. Antigravity shares the cross-tool
.agents/root, so there is no unique auto-detect signal. Select it with--target antigravityor list it inapm.ymltargets:; it is not part of--target all. Project-scope MCP writes are opt-in:.agents/must already exist (APM does not create it automatically for MCP). - Deploy directory.
.agents/(project scope);~/.gemini/(user scope). - Supported primitives. instructions, skills, hooks, mcp.
- File conventions.
- instructions:
.agents/rules/<name>.md(formatted natively withtrigger: globandglobsfrontmatter mapped from the packageapplyTopatterns) - skills:
.agents/skills/<name>/SKILL.md - hooks:
.agents/hooks.json(Antigravity’s native schema:PreToolUse/PostToolUse/PreInvocation/PostInvocation/Stop) - mcp:
.agents/mcp_config.json(project;mcpServerskey) or~/.gemini/config/mcp_config.json(user)
- instructions:
- Compile output.
AGENTS.md. Supports compilation deduplication: if.agents/rules/exists and contains at least one deployed instruction rule file (for the discovered.apm/instructions/*.instructions.mdset), those instructions are omitted fromAGENTS.mdto avoid duplicate context.
opencode
Section titled “opencode”OpenCode.
- Detection.
.opencode/directory. - Deploy directory.
.opencode/at project scope;~/.config/opencode/at user scope. - Supported primitives. agents, commands, skills, mcp.
- File conventions.
- agents:
.opencode/agents/<name>.md - commands:
.opencode/commands/<name>.md - skills:
.agents/skills/<name>/SKILL.md
- agents:
- Caveat. OpenCode has no hooks concept; the
hooksprimitive is silently skipped for this target. - Global compile.
apm compile -gwrites~/.config/opencode/AGENTS.mdfrom global instructions.
windsurf
Section titled “windsurf”Windsurf / Cascade.
- Detection.
.windsurf/directory. - Deploy directory. Native primitives deploy under
.windsurf/at project scope and~/.codeium/windsurf/at user scope; skills converge on.agents/skills/at both scopes (~/.agents/skills/at user scope). - Supported primitives. instructions, skills, commands, hooks, mcp.
- File conventions.
- instructions:
.windsurf/rules/<name>.md - skills:
.agents/skills/<name>/SKILL.md - commands:
.windsurf/workflows/<name>.md - hooks:
.windsurf/hooks.json
- instructions:
- Agents. Not deployed. Cascade auto-invokes any
SKILL.mdby itsdescription:frontmatter, so a separate agents primitive would collide with skills on the same path. Ship personas as skills under.apm/skills/<name>/SKILL.mdinstead. - User scope. Partial.
instructionsis excluded at user scope; Windsurf stores global memory in a single~/.codeium/windsurf/memories/global_rules.mdfile with a different format.
Kiro IDE/CLI v3 unified agent harness.
- Detection.
.kiro/directory. - Deploy directory.
.kiro/(project and user scope). - Supported primitives. agents, instructions, skills, hooks, mcp.
- File conventions.
- agents:
.kiro/agents/<relative-stem>.md— identity derives from the relative path. Onlydescription,model, andtoolsfrontmatter are emitted;nameand unknown fields are stripped. Tools are permission-bearing: APM fails closed (no partial write) if any tool value is outside the approved set (read,write,shell,web,subagent,knowledge,context,todo_list,@mcp,@builtin,*). Kiro may warn and fall back if the specifiedmodelis unavailable; APM passes model values through without validation. Ref: kiro.dev/docs/custom-agents/ (accessed 2026-08-03). - instructions:
.kiro/steering/<name>.mdwithinclusion: alwaysorinclusion: fileMatchfrontmatter - skills:
.kiro/skills/<name>/SKILL.md - hooks: one JSON file per hook action under
.kiro/hooks/ - mcp:
.kiro/settings/mcp.json(project) or~/.kiro/settings/mcp.json(user)
- agents:
- MCP shape. JSON
mcpServersentries usecommand/args/envfor stdio andurl/headersfor remote servers. Kiro resolves${VAR}placeholders at runtime, so APM preserves them rather than writing secrets to disk. - Scope. Covers the documented Kiro IDE and CLI v3 layout (unified harness). Ref: kiro.dev/docs/cli/v3/ (accessed 2026-08-03).
intellij
Section titled “intellij”GitHub Copilot for JetBrains IDEs.
- Detection. MCP runtime discovery uses the global
github-copilot/intellij/config directory. It does not auto-select a file-primitive target. - Deploy directory. User-scope
mcp.json; see the JetBrains integration guide for OS-specific paths. macOS and Linux use$XDG_CONFIG_HOME(default~/.config), while Windows uses%LOCALAPPDATA%. - Supported primitives. The IntelliJ-specific adapter supports MCP.
Instructions, prompts, agents, and hooks deploy through the Copilot profile
under
.github/; skills deploy under.agents/skills/. - Scope. MCP configuration is user scope only. File primitives use the
project or user scope selected for the Copilot profile. IntelliJ does not
participate in plain
allexpansion.
agent-skills
Section titled “agent-skills”Cross-client shared skills directory.
- Detection. Never auto-detected. Select with
--target agent-skills. - Deploy directory.
.agents/. - Supported primitives. skills only.
- File conventions.
.agents/skills/<name>/SKILL.md. - Use case. Author-time target for shipping a SKILL bundle that any Skills-aware client (Codex, Copilot CLI, Claude Code, etc.) can read without per-tool deployment.
grok-build
Section titled “grok-build”Grok Build native configuration.
- Detection. Auto-detected when
.grok/exists. - Selection. Included in
all; no experimental flag is required. - Deploy directory.
.grok/at project scope;~/.grok/at user scope. - Supported primitives. instructions, agents, commands, and skills.
- File conventions.
.grok/rules/*.md,.grok/agents/*.md,.grok/commands/*.md, and.grok/skills/<name>/SKILL.md. - Compile behavior. Produces
AGENTS.md.
grok-cloud (experimental)
Section titled “grok-cloud (experimental)”xAI Grok Cloud skills deployment.
- Detection. Never auto-detected. After enabling the experimental flag,
selecting
--target grok-cloudcreates the deploy directory when needed. - Enable.
apm experimental enable grok-cloud. - Deploy directory.
.grok/at project scope;~/.grok/at user scope. - Supported primitives. skills only.
- File conventions.
.grok/skills/<name>/SKILL.md. - Compile behavior.
apm compile --target grok-cloudis a successful no-op.
openclaw (experimental)
Section titled “openclaw (experimental)”OpenClaw agent runtime.
- Detection. Never auto-detected. Select with
--target openclawafter enabling the experimental flag. - Enable.
apm experimental enable openclaw. - Deploy directory.
.agents/skills/at project scope (identical toagent-skills);~/.openclaw/skills/at user scope (--global). - Supported primitives. skills only.
- File conventions.
.agents/skills/<name>/SKILL.md(project) or~/.openclaw/skills/<name>/SKILL.md(user). - Note. At project scope the output is identical to
agent-skills. The--globaluser path is the distinguishing capability, deploying skills where OpenClaw reads its managed/local skill directory (priority 4 in the OpenClaw loading order).
Skills convergence
Section titled “Skills convergence”Most targets with a skills primitive deploy to
.agents/skills/<name>/SKILL.md. Claude, Grok Build, Kiro, and experimental
Grok Cloud keep target-native skill directories.
To restore the pre-convergence per-target layout (skills land under each target’s own root), use the --legacy-skill-paths flag on apm install or set APM_LEGACY_SKILL_PATHS=1.
MCP servers
Section titled “MCP servers”MCP is not a TargetProfile primitive; it is wired by a separate
integrator that writes per-client config files (e.g.
.vscode/mcp.json, .cursor/mcp.json, .claude.json, .kiro/settings/mcp.json) for every
target in the active set that has an MCP client adapter. Active set
follows the same --target > targets: > auto-detect chain as
apm install: a runtime with an adapter but outside the active set
is skipped and APM emits an [i] Skipped MCP config for X (active targets: Y) line so the gate decision is observable. The matrix
above marks mcp supported when an adapter exists; whether the
config gets written on a given install is a function of the active
target set, not just adapter availability. See
Install MCP servers for the
gate behavior and apm mcp for the runtime surface.
See also
Section titled “See also”apm targets- inspect resolved targets at runtime.apm compile- target selection and compile flags.- Primitive types - what each primitive is.
- Primitives and targets - conceptual model.