ADR 005 — Adaptive Skills: APM packaging strategy
Reference documentation for ADR 005 — Adaptive Skills: APM packaging strategy in Adaptive Skills.
| Field | Value |
|---|---|
| Status | Accepted |
| Date | 2026-05-25 |
| Author | Neviton Santana |
| Deciders | Neviton Santana |
| Related | ADR-001 (Adaptive Skills as capability library), ADR-002 (Domain agnosticism), ADR-004 (agentskills.io conformance), AletheIA ADR-007 (AletheIA APM packaging strategy) |
| Supersedes | — |
1. Context
Épico 5 of the 2026-05-21 cross-repo plan requires packaging Adaptive Skills as an APM package installable via apm install nevitonsantana/adaptive-skills, with optional per-skill install via --skill <name> (plan §5 Frente 4). ADR-004 settled agentskills.io conformance strategy (Case A — high conformance with mechanical remediation: move version/owner into metadata block). AletheIA ADR-007 documented its own APM packaging path (type: hybrid, two-step apm install + apm run scaffold-overlay) and explicitly noted that Adaptive Skills “will face a different mismatch (its primitives map more cleanly to APM skill type) and likely use a different layout.”
Investigating the current APM specification (microsoft.github.io/apm/, fetched 2026-05-25) confirmed four package layouts:
- APM Package (
.apm/directory) — typed subdirectories; no--skillpartial install. - Skill Bundle (
SKILL.mdat root) — one skill per package. - Skill Collection (
skills/<name>/SKILL.md) — multiple skills; supports--skill <name>per-skill install; aligns withagentskills.iodirectory convention. - Plugin Collection (
plugin.json) — Claude-native plugin manifest.
The apm.yml type: enum is instructions | skill | hybrid | prompts. version: matches ^\d+\.\d+\.\d+. includes: is the allow-list controlling package payload.
Three structural questions had to be answered before authoring apm.yml:
- Layout: the repo organized skills nested as
skills/<category>/<skill-name>/SKILL.md, two levels underskills/. APM Skill Collection promotes “eachskills/<name>/directory” — direct children ofskills/. The nested layout would be ambiguous to the layout detector (cross-functional,design,engineering, … could be read as skill names with broken inner structure). - Versioning: the cross-repo plan sketched alignment with the library roadmap (
v1.1,v2.0), but a fresh first APM release wants alpha signalling. AletheIA used0.1.0-alpha. APM’sversion:regex (^\d+\.\d+\.\d+) does not document prerelease-suffix tolerance. - Domain packs (
crisis-management/): Épico 2 explicitly demoted Crisis Monitor from canonical to “first validation case among many expected.” Bundlingdomain-packs/into the main APM payload would silently re-canonicalize it.
2. Decision
Adaptive Skills ships as a single APM Skill Collection (type: skill, target: claude) with three accompanying structural decisions:
2.1 Flatten skills layout (decision A1)
skills/<category>/<skill-name>/SKILL.md is rewritten to skills/<skill-name>/SKILL.md. The category is preserved as a string attribute in the skill’s frontmatter metadata.category field (already a string→string map by the agentskills.io spec). The on-disk taxonomy is replaced by a metadata-driven taxonomy.
The category narrative and per-category backlog (previously held in skills/<category>/README.md) are consolidated into docs/skill-categories.md, which is the canonical narrative source from this ADR forward. The machine-readable mapping continues to live in projections/registry.json under each skill’s category field.
2.2 Version 0.1.0 (decision C1)
apm.yml declares version: 0.1.0 — the minimal three-part semver that APM’s regex unambiguously accepts. The alpha signal is carried by the git tag (v0.1.0-alpha-apm) and the manifest description, not by the manifest version string. This matches AletheIA’s effective release stance while staying inside the documented APM constraint.
2.3 Exclude domain-packs/ from APM payload (decision D3)
domain-packs/ is omitted from includes: and therefore does not ship with apm install nevitonsantana/adaptive-skills. Domain packs remain consumable via git clone for adopters who explicitly want them. This preserves the Épico 2 positioning of crisis-management/ as a case study, not canonical surface. If soft-launch (Épico 8) reveals demand for domain-pack distribution, a separate APM package (nevitonsantana/adaptive-skills-crisis-pack) becomes the natural answer — a decision deferred to a future ADR.
2.4 What the manifest looks like
name: adaptive-skills
version: 0.1.0
type: skill
target: claude
includes:
- apm.yml
- skills/**
- docs/skill-categories.md
- docs/guides/install-via-apm.md
- docs/adr/ADR-004-agentskills-io-conformance.md
- docs/adr/ADR-005-apm-packaging-strategy.md
- LICENSE
- README.md
Full file: apm.yml. Adopter-facing companion: docs/guides/install-via-apm.md.
3. Consequences
Positive.
apm install nevitonsantana/adaptive-skillsandapm install nevitonsantana/adaptive-skills --skill <name>both work natively because the layout is exactly what APM’s Skill Collection expects. No projection layer, no two-step adoption flow (AletheIA needed one for scaffold-at-root delivery; Adaptive Skills does not, because skills are first-class APM primitives).- ADR-004 Case A remediation lands in the same PR as the flatten, satisfying the lockstep requirement explicitly stated in ADR-004 §2.3 and §3. Library-internal validator (
scripts/validate_skills.py) and spec-conformance validator (skills-ref validate) both pass against all 21 skills post-remediation, andskills-ref validateis added to the Quality Gate CI workflow per ADR-004 §2.4. - Category taxonomy survives the flatten without quality loss: machine-readable mapping in
projections/registry.json, human-readable narrative indocs/skill-categories.md, and per-skill self-description inmetadata.category. Discovery tooling (e.g., a future Skill Finder) reads the same source of truth no matter the question. - Domain packs are not silently promoted to canonical, honoring Épico 2’s anti-criterion.
Negative.
- The category dimension loses visual presence on disk. Anyone scanning
skills/no longer seesengineering/,design/, etc. as grouping containers. Mitigation:docs/skill-categories.mdis linked from the README and the install guide;projections/registry.jsonexposes the same data structurally. - Any external code, docs, or harness configuration referencing the old nested paths (
skills/<category>/<name>/SKILL.md) breaks at the path level. The repo’s own internal references were swept in the same PR; external breakage is unknown and bounded by the fact that v0.1.0 is the library’s first APM release with no prior distribution. - The
--skill <name>mechanism is fully dependent on APM’s documented Skill Collection behavior. If APM changes the partial-install semantics, the install guide is wrong until updated. Bounded risk: the spec is stable enough to depend on for v0.1.0.
Accepted tradeoffs.
- Flatten over dual-layout-with-projection: rejected projecting the library into a flat shape under
dist/skills/because it would reintroduce the translation layer that ADR-004 Case A explicitly rejected. Choosing A1 means the repo and the APM payload are the same shape, end to end. 0.1.0over0.1.0-alpha: rejected the suffix because the documented APM regex does not include prerelease tolerance. Carrying the alpha signal in the git tag is observable enough; encoding it in the manifest would risk install-time validation failure for cosmetic gain.- Exclude over include for
domain-packs/: rejected including them as a default because doing so contradicts Épico 2. Future demand can promote them via a separate package without affecting the main library’s adopter surface.
4. Alternatives considered
- A2 — keep nested layout (
skills/<category>/<name>/SKILL.mdplustype: skill). Rejected: APM Skill Collection’sskills/<name>/semantics are ambiguous on nested structure; the most likely behavior is that category directories are interpreted as broken skill folders. The risk of silent install failure for adopters outweighs the cosmetic benefit of keeping categories as folders. - A3 —
.apm/package layout. Rejected: it would shift all skills under.apm/skills/to use the APM Package type, losing the--skill <name>partial install which is an explicit Épico 5 requirement. - A4 — dual layout (source nested, built flat). Rejected because it reintroduces a projection layer that ADR-004 Case A removed. Adds maintenance and CI complexity for no install-side benefit.
- C2 —
version: 0.1.0-alpha. Rejected because the APM manifest schema documentsversion:as matching^\d+\.\d+\.\d+; prerelease suffix support is undocumented and risky for the first release. - C3 —
version: 1.0.0. Rejected because the library is materially in soft-launch territory and adopters should know they are picking up the first packaged release. Inflating the version misrepresents maturity. - D1 — separate
adaptive-skills-crisis-packAPM package. Not rejected, but deferred. Promotes domain-packs to peer distribution status without forcing it on adopters who only want generic skills. Will be reopened if soft-launch demand justifies a second package. - D2 — include
domain-packs/in the main payload. Rejected: re-canonicalizes Crisis Monitor against Épico 2. - D4 — subdirectory
skills/crisis-management/. Rejected: violates thedomain-packs/boundary the Épico 2 work spent capital reinforcing.
5. Relationship
- ADR-001 declared Adaptive Skills’ posture as a capability library. This ADR specifies the distribution layer that makes that posture installable.
- ADR-002 declared domain agnosticism. The D3 decision (exclude domain-packs from the main APM package) operationalizes that ADR at the distribution surface.
- ADR-004 declared
agentskills.ioCase A as the conformance strategy and explicitly designated Épico 5 (this work) as the place where remediation lands. Section 2.1 above completes the remediation lockstep: 21 SKILL.md updated,scripts/validate_skills.pyupdated,skills-ref validateadded to CI. - AletheIA ADR-007 addressed the sibling problem for AletheIA. The contrast is informative: AletheIA needed
type: hybridand a two-step adoption flow because it is a project scaffold; Adaptive Skills usestype: skilland one-step adoption because its primitives are exactly what APM Skill Collection delivers. The two ADRs together document that AletheIA + Adaptive Skills spans both ends of APM’s compatibility spectrum. docs/guides/install-via-apm.mdis the adopter-facing companion to this ADR.- 2026-05-21 cross-repo plan §7 (success metrics). This ADR contributes to the “Adoptabilidade técnica” signal — time-to-install for a context-free adopter should be one
apm installaway after this ADR’s PR merges.
6. Review
Reopen this decision when any of the following occurs:
- The
agentskills.iospec adds, removes, or modifies required frontmatter fields, or changes Skill Collection layout semantics. Re-audit against the new spec; reaffirm or amend. - The APM specification publishes new package types, lifecycle hooks, or partial-install mechanisms that change which layout is optimal. Most likely scenario: a
scaffoldortemplatetype emerges and AletheIA migrates; that does not affect this ADR but may co-evolve in a future revision. - Soft launch (Épico 8) reveals adopter demand for distributing
domain-packs/crisis-management/via APM. Open a successor ADR for D1 (separate package). --skill <name>partial install ceases to work as documented. Re-investigate APM behavior; layout choice may need to change.- An external consumer of the old nested path layout surfaces and reports breakage. Decide whether to publish a one-time migration shim or document the path change as a v0.1.0 expectation.
If review confirms the decision unchanged, record the confirmation date here and continue.