Skip to content

Emit an APM (Agent Package Manager) manifest from per-repo firing evidence #8

Description

@brianluby

What platform or feature?

A reap apm target that turns skillreaper's per-repo firing evidence into an APM (Agent Package Manager) apm.yml. Read-only: it emits YAML, it never edits the repo or runs apm install.

Why is this useful?

skillreaper already knows what's actually used per repo — reap by-project builds the skill→project firing map and tags ⚑ repo-local items. APM is a dependency manager whose unit of config is a per-repo apm.yml declaring what should be installed. Those are two ends of the same loop, but today an apm.yml is hand-curated and the author guesses; skillreaper holds the evidence to derive it. It also makes skillreaper's "act" step durable: instead of reap prune quarantining files on one machine, the lean set gets encoded in a manifest that every teammate's apm install reproduces.

Describe the solution

A subcommand in the style of reap by-project / reap manifest, emitting YAML (with --json / --md parity), in two modes:

reap apm                 # propose an apm.yml from what fired in this repo
reap apm --diff apm.yml  # reconcile: suggest dropping declared-but-cold entries,
                         # flag fired-but-undeclared ones

Selection reuses the existing verdicts: KEEP → include, REAP → omit (or suggest removing in --diff), REVIEW → never auto-omit, keeping skillreaper's rule that incomplete evidence never flags an item.

The one hard part is identity. skillreaper knows a skill by its local name; APM declares it by upstream coordinates (e.g. anthropics/skills/skills/frontend-design), and scan.Item.Source only records a coarse provenance class today. Proposed handling: recover the source from the repo's apm.lock.yaml when present — which also enables a real --diff — and otherwise emit a clearly-marked placeholder rather than inventing coordinates.

Additional context

Builds mostly on existing machinery: the SkillProjects map behind reap by-project, plus the Manifest emitter in internal/report/manifest.go. So it's largely a new renderer over report data plus a small source-resolution step. Suggest scoping the first cut to skills only (strongest firing evidence), with MCP servers and agents as follow-ups.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions