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] |
| 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/ | [x] | [ ] | [ ] | [x] | [x] | [x] | [x] |
| kiro | .kiro/ | [x] | [ ] | [ ] | [x] | [ ] | [x] | [x] |
| agent-skills | .agents/ | [ ] | [ ] | [ ] | [x] | [ ] | [ ] | [ ] |
Skills deploy to .agents/skills/ for Copilot, Cursor, OpenCode,
Gemini, Antigravity, and Codex by default (see Skills convergence
below). Claude, Windsurf, and Kiro keep target-native skill directories.
copilot-cowork (Microsoft 365 Copilot), copilot-app (GitHub
Copilot desktop App), and openclaw (OpenClaw agent runtime) are
gated behind experimental flags and not listed above. See
Experimental.
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).
If none of the above produce a target, the command falls back to
copilot. Use apm targets to preview the resolved
list before compile or install.
Detection signal whitelist
Section titled “Detection signal whitelist”| Target | Signals (any one activates the target) |
|---|---|
| claude | .claude/ directory, or CLAUDE.md file |
| copilot | .github/copilot-instructions.md file |
| 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 |
agent-skills and antigravity are never auto-detected but are canonical
targets: select them with --target or list them in a project’s apm.yml
targets: field so contributors running plain apm install pick them up
automatically.
copilot-cowork, copilot-app, and openclaw 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/.
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:
.claude/rules/<name>.md - agents:
.claude/agents/<name>.md - commands:
.claude/commands/<name>.md - skills:
.agents/skills/<name>/SKILL.md - hooks: merged into
.claude/settings.json
- instructions:
- Compile output.
CLAUDE.mdand per-rule files under.claude/rules/.
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. - 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. 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 - 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.
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.
windsurf
Section titled “windsurf”Windsurf / Cascade.
- Detection.
.windsurf/directory. - Deploy directory.
.windsurf/at project scope;~/.codeium/windsurf/at user scope. - Supported primitives. instructions, skills, commands, hooks, mcp.
- File conventions.
- instructions:
.windsurf/rules/<name>.md - skills:
.windsurf/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.
- Detection.
.kiro/directory. - Deploy directory.
.kiro/(project and user scope). - Supported primitives. instructions, skills, hooks, mcp.
- File conventions.
- 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)
- instructions:
- 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. This is the documented Kiro IDE layout only. Kiro CLI differences are tracked separately and are not part of this target.
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.
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”By default, every target with a skills primitive deploys to .agents/skills/<name>/SKILL.md rather than under the target root. This matches the cross-tool agent skills convention so a single skill bundle serves every harness.
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.