Files
holocron/plugins/kyberforge/skills/apm-workflow/references/configure.md
Defame1297 394052ff66 docs(kyberforge): fix remaining PR #91 review findings, add apm install routing
Re-review (comment 24) of fix commit e16c3dc found six new issues, mostly
introduced by that fix commit itself: a dangling reference to a Hard Rule
bullet the same commit deleted (apm-orchestrate.md/.agent.md Process step
2 still named "secret indirection"), and an ADR-0015 Decision bullet that
claimed "this ADR does not update CONTEXT.md" while the same commit had
just added a forward-pointer sentence to CONTEXT.md's Plugin/Plugin
marketplace entries. Both reworded to match what actually happened.

apm-install's APM_INSTALL_DIR escape-hatch example dropped the curl pipe
entirely (`APM_INSTALL_DIR=... sh` with nothing piped into it) — fixed in
both apm-install/SKILL.md and the installation.md research doc, verified
against the upstream Microsoft APM docs via Context7.

Neither apm-workflow nor apm-orchestrate routed to plain `apm install
[PACKAGE_REF]`, the CLI command that actually resolves/fetches
dependencies declared in apm.yml — apm-install only bootstraps the apm
binary/runtime, not per-package deps. Added a 5th "install" dispatch
action to apm-workflow (new references/install.md, SKILL.md table row,
README usage/files sync, sources.md provenance entry) and a matching
"install" operation group on apm-orchestrate so it can route there.

configure.md's apm.yml schema block was also missing the "legacy singular
`target:` CSV form is still accepted" caveat its sibling research doc
documents for the same field — added for consistency.

The sixth finding (paired .md/.agent.md Output-contract disagreement) was
checked against git-orchestrate and gitea-orchestrate's existing pairs and
found to match established repo convention (JSON schema in .md, prose
summary without the enum in .agent.md) — left unchanged as a false
positive rather than "fixed."

kyberforge bumped 1.3.0 -> 1.3.1 via agent-author's normal improve flow.

Refs: #91

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0186ERbyACLRuRxPRnqwpa4m
2026-08-11 11:09:43 +00:00

3.6 KiB

topic, source_keys
topic source_keys
configure
context7-microsoft-apm

Scaffolding a new package

apm plugin init <name> --yes

Scaffolds apm.yml + a .apm/ skeleton in the current directory. Run this once per package (e.g. once per plugins/<name>/ directory in a monorepo-hybrid layout), not once for the whole repo.

apm.yml — required fields

Only name and version (SemVer) are required:

name: my-pkg
version: 1.0.0

apm.yml — full schema

name: my-pkg
version: 1.0.0
description: Code review skills for Python services
author: Jane Doe            # plain string, or {name, email?, url?} object
license: MIT
homepage: https://example.com/my-pkg
repository: https://github.com/org/my-pkg
keywords: [ai, review, python]

type: skill                 # instructions | skill | hybrid | prompts — constrains .apm/ contents

targets:                    # which harnesses this package compiles to; prefer plural list form — legacy singular `target: copilot,claude` CSV form is still accepted
  - copilot
  - claude

includes: auto               # "auto" = publish the authoritative local layout; or list explicit repo paths

dependencies:
  apm:
    - microsoft/apm-sample-package#v1.0.0        # pinned to a tag
    - github/awesome-copilot/skills/review-and-refactor  # single primitive
  mcp:
    - microsoft/azure-devops-mcp                 # MCP server dependency
  lsp:
    - name: pyright
      command: pyright-langserver
      args: ["--stdio"]
      extensionToLanguage:
        ".py": python

devDependencies:             # same shape as dependencies, excluded from the shipped artifact
  apm:
    - my-org/internal-test-skills

scripts:                     # named commands runnable via `apm run <name>`
  start: "copilot -p 'README.prompt.md'"
  review: "copilot -p 'code-review.prompt.md'"

compilation:
  target: all
  strategy: distributed
  exclude:
    - "apm_modules/**"
  placement:
    min_instructions_per_file: 1

policy:
  fetch_failure_default: warn

registries:
  public-apm:
    url: https://registry.example.com/api/public-apm
  default: public-apm

marketplace:                 # see references/marketplace.md for the full marketplace workflow
  owner:
    name: contoso
    url: https://github.com/contoso
  packages:
    - name: code-review
      source: contoso/code-review
      version: "^1.0.0"
      tags: [review, quality]

Dependency reference forms

dependencies.apm entries accept: a pinned tag (owner/repo#tag), a plain repo (uses default branch), a single primitive path within a repo, a raw git URL, a git:/path:/ref: object for finer control, or a local relative path (./packages/my-shared-skills).

MCP server secrets

Use ${VAR} indirection for headers/env vars — never a literal secret value in apm.yml:

mcp:
  - name: linear
    registry: false
    transport: http
    url: https://mcp.linear.app/sse
    headers:
      Authorization: "Bearer ${LINEAR_TOKEN}"
  - name: my-internal
    registry: false
    transport: stdio
    command: my-server
    env:
      API_TOKEN: "${MY_API_TOKEN}"

Registries (config-level, not apm.yml)

Any git repo is a valid package source by default — no registry required. To declare named registries for shorthand dependency resolution:

apm experimental enable registries   # required first — see SKILL.md Gotchas
apm config set registry.corp-main.url https://artifactory.corp.example.com/apm
apm config set registry.corp-main.token eyJ...
apm config set registry.corp-main.default true

apm config get/apm config unset manage individual keys the same way.