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] |
| opencode | .opencode/ | [ ] | [ ] | [x] | [x] | [x] | [ ] | [x] |
| windsurf | .windsurf/ | [x] | [ ] | [ ] | [x] | [x] | [x] | [x] |
| agent-skills | .agents/ | [ ] | [ ] | [ ] | [x] | [ ] | [ ] | [ ] |
Skills deploy to .agents/skills/ for Copilot, Cursor, OpenCode,
Gemini, and Codex by default (see Skills convergence
below). Claude and Windsurf keep target-native skill directories.
copilot-cowork (Microsoft 365 Copilot) and copilot-app (GitHub
Copilot desktop App) 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 |
agent-skills, copilot-cowork, and copilot-app are never
auto-detected. Select them explicitly with --target, or list them in
a project’s apm.yml targets: field so contributors running plain
apm install pick them up automatically.
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.
promptsandinstructionsare not supported 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.
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.
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.
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) 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.