--- topic: audit source_keys: - context7-microsoft-apm - context7-websites-code-claude - claude-code-plugins-docs --- ## `apm audit` ```bash apm audit # local: scan deployed files for hidden Unicode apm audit --ci # CI gate: lockfile consistency + drift replay + policy apm audit --file # standalone: scan an arbitrary file ``` Exit code `0` on success, `1` on any violation — composes as a normal CI gate step. It does not replace general lint/test/security-scan CI steps, it sits alongside them. ## Policy checks `apm audit --ci` auto-discovers an org policy from the git remote if `--policy`/`--policy-source` isn't given explicitly; `--no-policy` skips policy discovery for a single invocation. ## Marketplace ref validation Separate from `apm audit`: `apm marketplace check` validates that every package reference declared in a marketplace's `apm.yml` actually resolves (correct path/ref, manifest present) — run before `apm pack`/publish, to catch a typo'd local path or stale pinned tag before it ships. ## CI integration example (GitHub Actions) ```yaml jobs: apm-audit: runs-on: ubuntu-latest permissions: contents: read security-events: write steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: { python-version: "3.12" } - run: pip install apm-cli==X.Y.Z # pin to the version standardized on - run: apm install - run: apm audit --ci -f sarif --output apm-audit.sarif - uses: github/codeql-action/upload-sarif@v3 with: { sarif_file: apm-audit.sarif } ``` `-f sarif --output ` emits SARIF for GitHub Code Scanning's inline PR annotations. ## Frozen installs `apm install --frozen` fails instead of silently re-resolving if the lockfile is out of date — the CI equivalent of `npm ci` vs `npm install`. Use in any CI job that must not be allowed to drift the lockfile. ## Claude Code validation is a separate terminal check For packages compiling to the `claude` target, also run `claude plugin validate [--strict]` against the compiled output as a terminal check. `apm audit`/`apm audit --ci` do not check Claude Code-marketplace-specific schema rules (reserved prefixes, the `agents/` stray-file behavior — see `references/compile.md` — etc.), so they don't substitute for it. ## Gotchas - Plain `apm audit` and `apm audit --ci` check different things: plain `apm audit` scans deployed files for hidden Unicode only; `--ci` additionally runs lockfile-consistency checks, install-replay drift detection, and org policy checks. A clean plain `apm audit` is not a CI-equivalent pass.