Skip to content

Existing Projects

APM is additive. It never deletes, overwrites, or modifies your existing configuration files. Your current .github/copilot-instructions.md, AGENTS.md, .claude/ config, .cursor-rules — all stay exactly where they are, untouched.

Run apm init in your project root:

Terminal window
apm init

This creates an apm.yml manifest alongside your existing files. Nothing is deleted or moved.

Add the shared packages your team needs:

Terminal window
apm install microsoft/copilot-best-practices
apm install your-org/team-standards

Each package brings in versioned, maintained configuration instead of stale copies. Your apm.yml tracks these as dependencies, and apm.lock.yaml pins exact versions.

Terminal window
git add apm.yml apm.lock.yaml
git commit -m "Add APM manifest"

Your teammates run apm install and get the same setup. No more copy-pasting configuration between repositories.

They continue to work. APM-managed files coexist with manually-created ones. There is no conflict and no takeover.

Over time, you may choose to move manual configuration into APM packages for portability across repositories, but there is no deadline or requirement to do so. APM and manual configuration coexist indefinitely.

If you decide APM is not for you:

  1. Delete apm.yml and apm.lock.yaml.
  2. Your original files are still there, unchanged.

No uninstall script, no cleanup command. Zero risk.

APM is a drop-in replacement. The install gesture is identical, and you also get a manifest, lockfile, and reproducible installs across machines.

Terminal window
# Install a whole skill bundle (equivalent to: npx skills add vercel-labs/agent-skills)
apm install vercel-labs/agent-skills
# Install a single skill from a bundle and persist the selection to apm.yml
apm install vercel-labs/agent-skills --skill deploy-to-vercel
# Subsequent bare apm install respects the persisted selection
apm install

The --skill flag is repeatable. Your selection is written to apm.yml and apm.lock.yaml so the exact subset is reproducible on every machine.

Terminal window
# Pick two skills, then reset to all
apm install vercel-labs/agent-skills --skill deploy-to-vercel --skill preview
apm install vercel-labs/agent-skills --skill '*' # back to full bundle

Any public repo that works with npx skills add owner/repo also works with apm install owner/repo. APM recognizes bare skills/<name>/SKILL.md layouts (the agentskills.io convention) as a first-class package type; apm.yml is optional.

See Package Types for the full skill collection layout reference.

When you upgrade APM and run apm install, the tool automatically detects legacy per-client skill paths (.github/skills/, .cursor/skills/, .opencode/skills/, .gemini/skills/) recorded in your apm.lock.yaml and migrates them to .agents/skills/.

What happens:

  • Old per-client skill files are deleted after the new .agents/skills/ files are written
  • The lockfile is updated to reflect the new paths
  • The migration is idempotent — running apm install again is a no-op
  • Foreign / hand-authored skills outside the lockfile are never touched

What does NOT migrate:

  • .claude/skills/ — Claude is not part of the convergence
  • .codex/skills/ — Codex was already on .agents/skills/ before this change
  • Any file not tracked in apm.lock.yaml

If a collision is detected (e.g., a foreign file already exists at the destination .agents/skills/ path with different content), the migration aborts entirely with a clear error. Use --legacy-skill-paths to skip migration and keep per-client paths.

The first apm install after upgrading to this version will migrate legacy per-client skill paths to .agents/skills/ and update apm.lock.yaml. In CI pipelines, this means the working tree will show:

  • Deletions under .github/skills/, .cursor/skills/, .opencode/skills/, and/or .gemini/skills/
  • Additions under .agents/skills/
  • An updated apm.lock.yaml

To handle this in CI, either:

  • Commit the migrated lockfile and .agents/skills/ directory, then update your CI to expect the new layout, OR
  • Set APM_LEGACY_SKILL_PATHS=1 in your CI environment to defer the migration until you are ready to update the lockfile in a controlled commit.