Five documents told authors that a prose-form dangling routing target blocks. The
gate reports it as a SUGGESTION and exits 0. Verified on fixtures: `-> name` and
`/name` are blocking ERRORs, the prose form is SUGGESTION-tier unless a second
resolving target in the same sentence corroborates it. ADR-0020 and gates.md were
right; contract.md, retrofit.md, description-quality.md, finding-criteria.md and
agent-author's contract.md were wrong — and they are what an author and an auditor
actually read. The whole 39-skill corpus was retrofitted against them.
skill-audit was also self-contradictory: it imports validate.sh's SUGGESTIONs into
the Structure dimension verbatim while its own rubric grades the same target a FAIL,
so one target got reported twice at two tiers. The script owns the grade; the rubric
now says so.
The YAML-fold trap that broke gitea-labels-milestones (#100) was warned about only
in retrofit.md, reachable only from the improve flow when a budget is exceeded. It
is now in both contract.md files, which SKILL.md mandates on the create flow too.
agent-audit loaded both rubrics unconditionally on every run — 3,323 words for a
clean audit against skill-audit's 1,636. dac9cad fixed exactly this in skill-audit
and edited agent-audit in the same commit without applying it. Same treatment: the
criteria move to a new finding-criteria.md and load per dimension. Clean run now
2,083 words, a 37% cut.
Routing: apm-workflow's description shed dependency installation while still owning
the flow, and apm-install's boundary did not exclude it, so "install my apm
dependencies" matched the CLI-binary skill with no route back. Fixed on both sides.
forge regains two of the three phrasings the retrofit deleted.
forge Step 1 called grill-with-docs unconditionally — a skill in plugins/bin, which
kyberforge does not declare as a dependency. It resolves here only because the
walk-up sweeps sibling plugins; a standalone install dead-ends. Step 1 now names
the cross-plugin dependency and gives an inline fallback. Declaring it properly in
apm.yml remains the better fix.
Also: both audit SKILL.md files now grade exit 2 as "did not run, dimension
unverified" rather than as findings; skill-audit's README row described content that
moved, which its own finding-criteria.md grades a FAIL; and body-discipline.md's
`git show <sha>:plugins/...` command is fenced, since an installed plugin cache has
no repo and file-structure.md makes a bare repo path a FAIL.
Refs: #100, #101, #125
ADR: 0020
2.9 KiB
2.9 KiB
name, description, metadata
| name | description | metadata | |||||
|---|---|---|---|---|---|---|---|
| apm-install | Use when installing, pinning, or upgrading the apm (Agent Package Manager) CLI itself, or installing and managing an agent runtime apm drives. Not authoring, publishing, auditing, or dependency installation for an apm package -> `apm-workflow`. |
|
Gotchas
- apm never executes an agent itself — it only installs and manages the runtimes that do. Installing apm alone leaves the user with a package manager and no working agent CLI, so Step 2 is required whenever the user actually wants one; skip it only when they explicitly want the package manager alone.
apm runtime setup copilotneeds Node.js v22+ and npm v10+ already onPATH; apm will not install them for you.
Step 1 — Install the apm CLI
If apm --version already answers and the user is not pinning or upgrading, skip to Step 2.
Default:
curl -sSL https://aka.ms/apm-unix | sh
Escape hatches — combine as needed:
- Pin a version — append
@vX.Y.Zto the piped script's arguments:curl -sSL https://aka.ms/apm-unix | sh -s -- @v1.2.3. - Custom install directory — set
APM_INSTALL_DIRon the piped script's command:curl -sSL https://aka.ms/apm-unix | APM_INSTALL_DIR=$HOME/.local/bin sh. - Air-gapped mirror / GitHub Enterprise — an air-gapped host cannot reach
aka.msat all, so getinstall.shonto the box and run it from disk instead of piping. Point it at the mirror withAPM_RELEASE_BASE_URLand pinVERSION:APM_RELEASE_BASE_URL=https://mirror.corp/apm VERSION=v1.2.3 sh install.sh; addAPM_RELEASE_METADATA_URLinstead if you leaveVERSIONunset.GITHUB_URLis the GitHub Enterprise host, not a release mirror. All four are ordinary environment variables that also work through the pipe — running from disk is a network constraint, not a script one. - pip —
pip install apm-clirequires Python 3.10+. Not on an externally-managed (PEP 668) Python such as Debian or Ubuntu, where it hard-fails witherror: externally-managed-environment; use pipx below. The quick-install script has no Python prerequisite, so prefer it unless the environment is pip-first. - pipx —
pipx install apm-clion those PEP 668 environments. Same PyPI package, but pipx builds an isolated venv and exposesapmonPATH. - Manual — download the platform archive from the GitHub releases page, extract, and place the binary on
PATH.
Verify with apm --version.
Step 2 — Install or manage an agent runtime
Default:
apm runtime setup copilot
Other targets: apm runtime setup codex, apm runtime setup gemini, apm runtime setup llm.
apm runtime list— show installed runtimes.apm runtime status— show which runtimeapm runwill pick by default.apm runtime remove <name> -y— uninstall without an interactive prompt.