Skip to content

Compile produced no output

apm compile exited cleanly but printed:

[!] Compilation completed but produced no output files. Check that target
directories exist (e.g. .github/, .claude/) or set 'target:' in apm.yml
/ pass --target explicitly.

This is APM refusing to claim success when zero files were written. The compile ran, the target list resolved, but every primitive was either missing, filtered, or unsupported by the resolved targets. Walk the ladder below in order.

Terminal window
apm targets

If the active list is empty, no harness was detected and no target: was pinned. APM has nothing to write against. Either:

  • Create one of the canonical signals (.claude/, .github/copilot-instructions.md, .cursor/, .codex/, .gemini/ or GEMINI.md, .opencode/, .windsurf/).
  • Pin targets in apm.yml (target: [claude, copilot]) or pass --target to apm compile.

See apm targets and the manifest schema.

Terminal window
apm deps

Each installed package row shows per-type counts (Prompts, Instructions, Agents, Skills, Hooks). If every column is -, the project ships nothing to compile. Either you haven’t installed a package yet, or your local .apm/ tree is empty.

To check the local tree directly:

Terminal window
find .apm -name '*.instructions.md' -o -name '*.prompt.md' -o \
-name '*.agent.md' -o -name '*.chatmode.md' -o -name 'SKILL.md'

3. Confirm the includes filter is not excluding everything

Section titled “3. Confirm the includes filter is not excluding everything”

If apm.yml declares an includes: filter on a dependency, only matching primitives are integrated. A typo or overly narrow glob can silently drop the entire package contribution.

dependencies:
apm:
- name: org/security-pack
includes: [skills] # prompts and instructions are excluded

See manifest schema for the full include/exclude semantics.

4. Confirm the target supports the primitive types you ship

Section titled “4. Confirm the target supports the primitive types you ship”

This is the most common cause. Each target supports a subset of primitive types. Shipping only types a target rejects produces zero output for that target.

Authoritative matrix: targets matrix.

[i] Ship only prompts to claude? Zero output — Claude has no prompts slot. [i] Ship only instructions to codex? Zero output — Codex has no instructions slot.

Org policy rules can deny specific primitives, sources, or transformers. If a policy denies what would otherwise be written, the file count drops to zero.

Terminal window
apm policy status

See policy schema.

”I added a skill but compile produced nothing”

Section titled “”I added a skill but compile produced nothing””
Terminal window
apm targets # what will be written to?
apm deps # is the skill counted?

If apm targets is empty, the project has no detected harness — create .claude/ (or any canonical dir) or pin target: in apm.yml. If apm deps shows the skill but compile still emits nothing, every active target lacks skills support (rare — most targets do support skills via .agents/SKILL.md).

”I targeted cursor but my command files don’t appear”

Section titled “”I targeted cursor but my command files don’t appear””

Cursor commands route through the shared claude_command transformer, which only preserves the common frontmatter subset (description, allowed-tools, model, argument-hint, input). If your command file has only Cursor-specific keys (author, mcp, parameters, …), nothing the transformer recognises is left to write. Add at least a description: field, then re-run:

Terminal window
apm compile --target cursor

Dropped keys are surfaced via diagnostics at install time — check apm install output for warnings.

”All targets resolve, but only some integrations land”

Section titled “”All targets resolve, but only some integrations land””

Expected when targets and primitive types don’t intersect uniformly. Example: a project with target: [claude, gemini] shipping instructions + commands writes:

  • claude: instructions (as rules) + commands — both land.
  • gemini: commands only — instructions are silently skipped because Gemini has no rules/ slot.

Cross-check against the targets matrix before filing a bug.

Re-run with --verbose for source attribution and per-target stats:

Terminal window
apm compile --verbose

If *_files_written and *_files_generated are all zero across the stats block, every target was a no-op. Use the ladder above to find which step silently filtered everything out.

Reference: apm compile, apm targets, apm view, targets matrix, manifest schema, policy schema.