APM is a package manager for AI-agent configuration, using a manifest to declare reusable instructions, skills, prompts, agents, hooks, plugins, and MCP components. Development teams use it to reproduce agent setups across projects and control their dependencies through policies and lockfiles, while the catalogue contains many of these agent components.
Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/microsoft/apm/apm-review-panelnpx skills add microsoft/apm --skill apm-review-panelgit clone --depth 1 https://github.com/microsoft/apmWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/microsoft/apm/apm-review-panel)<a href="https://agentmods.dev/skills/microsoft/apm/apm-review-panel"><img src="https://agentmods.dev/badge/skills/microsoft/apm/apm-review-panel.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00178 | $0.06287 |
| Opus 5 | $0.00089 | $0.03143 |
| Sonnet 5 | $0.00036 | $0.01257 |
| Haiku 4.5 | $0.00018 | $0.00629 |
Grade A, and why
apm-review-panel scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 6d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Runs shell commandslowCapability
Expected in a hook, worth knowing in a rule or an instructions file.
`subprocess.run` calls on a path that executes per-package or How it starts
The opening of the file, as written. The whole thing — 512 lines — stays where its author put it; the contents beside it link to each section on GitHub.
APM Review Panel - Fan-Out Advisory Review
The panel is FAN-OUT + SYNTHESIZER. Each persona runs in its own agent
thread (via the task tool) and returns JSON matching
assets/panelist-return-schema.json. The orchestrator schema-validates
each return, hands all returns to the apm-ceo synthesizer (also a task
thread, returns JSON matching assets/ceo-return-schema.json), then
renders ONE recommendation comment from assets/recommendation-template.md.
This skill is ADVISORY by design. It does not compute a binary verdict, it does not apply verdict labels, and it does not gate merge. The panel surfaces findings; the maintainer and the PR author decide ship.
Architecture invariants
- Advisory regime, not gate regime. There is no
APPROVE/REJECT, nopanel-approved/panel-rejectedlabel, no deterministic verdict computation. The CEO returns aship_recommendation.stance(ship_now/ship_with_followups/needs_discussion/needs_rework); this is prose for the human reviewer, never auto-applied as a label or status check. This is the architectural fix for the previous regime's over-strictness: removing the binary gate removes the incentive for panelists to inflaterequired[]defensively. - Three severity buckets, none of them gate. Findings carry
severity: blocking | recommended | nit.blockingis the highest signal a panelist can send and renders prominently in the comment; it still does not block merge.recommendedis the default for substantive feedback.nitis one-line polish. The orchestrator never reads severity to gate anything. - Single-writer interlock. Only the orchestrator writes to the PR:
exactly one
add-commentand oneremove-labelscall. Theremove-labelscall always sweepspanel-review(trigger idempotency) AND defensively removespanel-approved/panel-rejectedif present (legacy verdict labels from the pre-advisory regime; they have no meaning here and would mislead readers if left on a PR after a fresh advisory pass). NOadd-labelscall -- there are no verdict labels to apply. Panelist subagents and the CEO subagent return JSON only and MUST NOT call anyghwrite command, post comments, apply labels, or touch the PR state. - Single-emission discipline. Exactly one comment per panel run,
rendered from
assets/recommendation-template.mdafter all subagents return. - Non-empty turn exit (the run's hard contract). gh-aw decides
success by inspecting
agent_outputAFTER your turn ends: a turn that ends with zero safe outputs (agent_output = {"items":[]}) is detected as a failure, the safe-output detection job is skipped, theadd-commentjob never runs, and the workflow opens a "No Safe Outputs Generated" issue. Therefore your turn MUST end with at least one safe output -- the rendered comment on success (step 7), or an explicitnoopif the run genuinely cannot produce one. NEVER end the turn empty. - Synchronous fan-out -- never spawn-and-forget. Every
taskspawn (each panelist AND the CEO synthesizer) is BLOCKING: spawn it, WAIT for its JSON return, then continue. Use thetasktool's synchronous mode; do NOT use its background/detached mode -- the variant that returns anagent_idimmediately and runs the subagent in the background -- for any panelist or the CEO. Their returns are LOAD-BEARING: the comment cannot be rendered without them. Spawning the CEO (or a panelist) detached and then ending the turn while it is still running is the documented cause of the empty-output failure above.
What ships with it
11 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- apm.yml 498 B
- assets/ceo-return-schema.json 3.7 KB
- assets/panelist-return-schema.json 10 KB
- assets/recommendation-template.md 4.8 KB
- evals/fixtures/01-ship-now-pr1084-shape.json 9.3 KB
- evals/fixtures/01-ship-now-pr1084-shape.rendered.md 7.4 KB
- evals/fixtures/02-needs-rework-shape.json 13 KB
- evals/fixtures/02-needs-rework-shape.rendered.md 10 KB
- evals/README.md 2.3 KB
- evals/render_eval.py 9.1 KB runs code
- evals/trigger-evals.json 1.1 KB
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 6d ago First seen · 512 lines · 178 tokens per session scan A c9fee6c311b2
apm-review-panel is a skill published in the GitHub repository microsoft/apm (3,735 stars, last pushed today), licensed MIT. It adds 178 tokens to every session and 6,287 once invoked, about $0.0009 per session on Opus 5. A static security scan graded it A with 1 finding (runs shell commands). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
review
Review a proposed change before applying it.
mcp-server-review
Review a Model Context Protocol (MCP) server implementation against the 2026-07-28 protocol revision, which removed the initialize handshake and Mcp-Session-Id and made the protocol stateless. Use when the user asks to review, audit, upgrade or migrate an MCP server, asks whether their MCP server is spec compliant…
code-review-csharp
Perform structured code reviews of C# source code covering naming conventions, performance, security, readability, and .NET best practices. Trigger phrases include "review this C# code", "check my C# for best practices", "analyze this C# class", "find issues in my C# code".
self-awareness-review
Reviews a given week of your OWN Teams meetings, chats, and sent emails to surface moments where you may have misread social signals or come across as passive-aggressive, curt, sarcastic, or dismissive — returning the exact quote, how it likely landed, and a kinder rewrite. Private self-reflection coaching for the…
git-branch-cleanup
Analyzes and safely cleans up local Git branches. Categorizes branches by merge status, staleness, and remote tracking. Provides interactive selection with safety guards. Use when the user wants to clean up branches, delete old branches, organize Git branches, or asks about which branches can be safely deleted.
audit
Audits recent work against its Definition of Done and project patterns. Runs the test suite, compares code against the spec, and reports PASS / PARTIAL / FAIL. Also runs the Critical Gate — a safety scan of the diff for destructive or dangerous operations. Generates an incremental prompt pack for any gaps found. With…