DIRTY STATIC / DISPATCH Tools09 NOV 2026 β€’ 12 MIN READ
Yellow labelled crates for skills, prompts and tool servers moving on a conveyor through a manifest checkpoint gate in a concrete warehouse, hazard stripes on the floor
ToolsINTELLIGENCE FOR THE MACHINE AGE

Microsoft APM: Package Manager for Agent Skills

Microsoft APM is an open source dependency manager for AI agents. One apm.yml declares the skills, prompts, instructions, plugins and MCP servers a project needs, and apm install deploys them to the agent tools a team already uses, with a lockfile for repeat installs and a policy file for org control. This profile covers the manifest, the parts it manages, the target limits, the security defaults, the price, and who should adopt it now.

Start reading ↓

Your agent setup lives in six places and none of them agree. One person keeps skills in a folder for Claude Code. Another keeps prompts inside Copilot. The MCP servers, the programs that give an agent access to outside tools and data, sit in a config file someone edited by hand and never shared. A new teammate clones the repo and gets the code, but not the agent setup that makes the code easy to work on.

Microsoft APM exists to close that gap. APM stands for Agent Package Manager. It treats agent context the way npm treats code libraries. You declare what a project needs in one manifest file. Anyone who clones the project runs one install command, and each part lands in the right folder for the agent tool they use.

Microsoft APM

Official site

A dependency manager for AI agents, described by Microsoft as a manager for agent context in the style of npm. Primary use case: declaring the agent setup for a project once, in a file that ships with the repo, so every person and every supported agent tool starts from the same skills, prompts, instructions and tool servers.

Key features: one manifest for all agent parts; a lockfile that pins exact versions and content hashes; installs from GitHub, GitLab, Bitbucket, Azure DevOps, Gitea and other git hosts; a security scan on every install; and a policy file that an org can enforce when parts are installed.

Advantages: the setup travels with the repo, repeat installs produce the same content, and one declaration serves many agent tools at once. Limitations: support for each part varies by tool, the manifest format is still a working draft in the docs, and the policy file controls installs only. What an agent does at run time stays with the agent tool itself.

Platforms
macOS, Linux and Windows for the CLI; deploys to GitHub Copilot, Claude Code, Grok Build, Cursor, OpenCode, Codex, Gemini, Windsurf and Kiro
Pricing
Free and open source under the MIT license

A glowing yellow manifest document on a concrete desk stamping copies that slide into folders for separate workstations One manifest, many desks: APM deploys the same declared parts into the folders each agent tool reads. Illustration: Dirty Static

The problem is drift, not talent

Agent tools multiplied faster than the habits for sharing them. A skill is a folder with a SKILL.md file that teaches an agent one task. A prompt is a saved workflow. An instruction file holds the rules for a repo. Each tool reads these parts from its own folder, in its own format, and most teams have more than one tool in play.

Copying files by hand works for a week. Then one copy changes and the others do not. Two people ask the same agent for the same job and get different behaviour, because their setups quietly parted ways. APM makes the setup a declared dependency instead, with the same discipline teams already accept for code: a manifest, a lockfile, and a review when either one changes.

This is the same supply question our look at PlugVet raised from the other side. PlugVet grades skills and servers before you trust them. APM is about what happens after that choice, when a team needs the chosen parts installed the same way, on every machine, for every tool.

One manifest, three files that matter

The manifest is apm.yml. It sits at the root of a repo, like package.json, and it names the project and lists two kinds of dependency: APM packages under dependencies.apm, and MCP servers under dependencies.mcp. A package can be a single skill, a single agent file, a plugin, or a full package that carries several parts at once. Version pins ride on the dependency string, so a team can hold one skill at a fixed release while the rest move.

Running apm install does the rest. It resolves the full set of dependencies, including parts that other parts depend on. It fetches each one into a local cache folder, works out which agent tools the project uses, and writes each part into the folder that tool reads. It also writes the lockfile.

FileWhat it doesCommit it
apm.ymlThe manifest. Declares the packages, MCP servers, scripts and targets a project needsYes
apm.lock.yamlThe lockfile. Pins the exact source, version and content hash for every partYes
apm-policy.ymlThe optional policy file. Sets what may be installed, enforced when installs runYes, when used
apm_modules/The local cache of fetched packagesNo. APM marks it to be ignored by git, and installs restore it from the lockfile

The clone test is the whole pitch in one line. Per the quickstart, a teammate clones a repo, runs apm install at the root, and gets the same parts, at the same versions, with the same content hashes. The deployed folders for each tool are committed as well, so the setup stays visible in review, not hidden in a cache.

What APM manages

Microsoft calls each unit of agent context a primitive. The word is worth keeping, because APM manages eight kinds of them, and a package can carry any mix.

Instructions are coding standards and guidelines, scoped to files by a pattern. Prompts are saved workflows an agent can run. Agents are specialist personas with their own scope and tool limits. Skills are task guides in the SKILL.md format. Hooks are scripts that run at set points in a session, such as before or after a tool call. Commands are the prompt files in the form tools with a command palette expect. Plugins are bundles that APM unpacks into the parts above at install time. MCP servers are declared in the manifest itself, and APM writes the MCP config for each tool when it installs.

Two commands sit beside install. apm compile folds instructions into the shared context files tools read, such as AGENTS.md and CLAUDE.md, and it can place a focused file beside each folder instead of one large file at the root. apm run runs named scripts declared in the manifest, in the style of npm scripts. Each script shells out to a runtime command you already have installed, such as copilot or claude. APM does not ship those runtimes. It invokes the one your script names.

Nine main targets, and support is not equal

A target is one agent tool APM can deploy to. The main list runs to nine: GitHub Copilot, Claude Code, Grok Build, Cursor, OpenCode, Codex, Gemini, Windsurf and Kiro. Three more, Antigravity, Hermes and Grok Bot, can be named on purpose but are never picked by detection. APM finds targets three ways, in order: a flag on the command, a targets: list in the manifest, or the folders already present in a repo, such as .claude/ or .cursor/. With no signal at all, install stops with an error rather than guessing.

A concrete switchboard wall with nine terminal doors, one yellow cable splitting from a central hub into each door One hub, nine doors: each target still decides which parts it can accept. Illustration: Dirty Static

PartCopilotClaude CodeCursorCodexGemini
InstructionsYesYesYesNoNo
PromptsYesNoNoNoNo
AgentsYesYesYesYesNo
SkillsYesYesYesYesYes
HooksYesYesYesYesYes
MCP serversYesYesYesYesYes

Read the table as a planning tool, not a flaw list. A team that lives on prompts inside Copilot gets full value on day one. A team spread across Codex and Gemini should build its shared setup around skills and MCP servers, the parts that travel everywhere, and keep tool specific extras in tool specific folders. Our profile of WordPress Studio showed the same shape from inside one app: the harness decides what an outside agent can reach, and the honest tools say so in a table.

Security and policy, stated plainly

Installing agent parts means installing prose that steers an agent, and in the case of MCP servers, code that an agent can call. APM treats that as a supply risk by default. Per the docs, every install scans content for hidden Unicode, pins content hashes in the lockfile, and blocks MCP servers that arrive only as a dependency of a dependency, unless those servers are declared in your own manifest or trusted on purpose.

The policy file adds org control. apm-policy.yml is enforced when installs run, and it covers the transitive MCP servers as well as the direct ones. Policy flows from the enterprise level to the org level to the repo level, and each level can only tighten what the level above it allowed. The docs point orgs at apm audit --ci to gate builds on the same rules.

Getting it onto a machine

The CLI runs on macOS, Linux and Windows. Homebrew is the short path on a Mac. The docs also list a shell installer for Linux and macOS, a PowerShell installer for Windows, and Scoop, pip and manual archive installs for teams that need them.

macOS Β· Homebrew

brew install apm
apm init my-agent
apm install microsoft/apm-sample-package

The sample package in the last line is Microsoft’s own starter package. It is the fastest way to see the shape of a real install: prompts, agents, instructions and a skill landing in the right folders, with the lockfile written beside the manifest. From there, adding a part is one line in apm.yml or one install command naming a repo and a path inside it.

Pricing and platforms

APM costs nothing. The CLI and the manifest format are open source under the microsoft org on GitHub, under the MIT license. There is no hosted registry fee and no per seat charge in the docs, because there is no hosted registry at all in the npm sense. A dependency string names a git repo, on GitHub or another git host, and APM fetches it from there with your own git access. Teams pay only for the agent tools and models they already use.

One status note matters here. The docs describe the manifest contract as a working draft, and the manifest schema page carries the same label. The shape in use today is documented in detail, but a draft can still change. Pin your APM version in team docs, read the changelog when you upgrade, and let the lockfile do its job between upgrades.

What Works

  • One declared setup for a whole team, shipped inside the repo it describes
  • Lockfile pins exact versions and content hashes, so repeat installs match
  • Skills, prompts, instructions, agents, hooks, plugins and MCP servers share one system
  • Works across nine main agent tools instead of locking a team to one
  • Hidden Unicode scans, hash pinning and blocked transitive MCP servers by default
  • Policy file gives orgs a real gate at install time, with CI audit support

What Does Not

  • Support for each part varies by target, so the matrix needs checking before a rollout
  • The manifest format is still labelled a working draft in the docs
  • Policy stops at install time and does not control runtime behaviour
  • No central registry means trust rests on the repos a team chooses to depend on
  • APM does not install the agent runtimes its scripts call, so each machine still needs its own tools

Which should you choose

Adopt APM now if your team shares agent setup by folklore. If skills live in chat messages, prompts live on one laptop, and MCP configs differ per person, APM replaces that drift with a file a team can review. Start with skills and one or two MCP servers, the parts with the widest support, and add the rest as your tools allow.

Adopt it if you run more than one agent tool. A solo builder who switches between Claude Code and Cursor for different jobs gets the same win at smaller scale. One declaration, two deploys, and no manual sync when a skill improves. It pairs well with a vetting habit: grade a new part with a directory such as the one in our PlugVet profile before it earns a line in the manifest.

Wait if you use one tool, alone, with a setup that never changes. APM solves a sharing and drift problem. A single stable setup has little drift to solve, and the manifest is one more file to tend. The same goes for teams that need runtime control as their main safeguard. APM will help them govern installs, and they will still need the controls inside their agent tools for the rest.

Final thoughts

APM is unglamorous in the best way. It does not promise a smarter model or a faster agent. It promises that the agent setup a team agreed on is the setup every person actually runs, on every tool, after every clone. That promise needed a manifest, a lockfile and a policy gate, and Microsoft built all three on open standards it names in the docs: AGENTS.md, Agent Skills and MCP. The draft label on the format is the one real caution. Adopt it for the drift it kills today, pin it like you mean it, and keep your runtime controls where they belong, in the tools themselves.

Sources

β– 

END OF TRANSMISSION

Stay curious. Question everything.

CONTINUE THE DESCENT

MORE FROM DIRTY STATIC β†˜