v0.14.0 — skill folder-format migration
Breaking (pre-1.0)
Skills migrated to folder format. Each skill now lives at catalog/skills/<tier>/<name>/SKILL.md (was <tier>/<name>.md). Install destination mirrors the layout: .claude/skills/<name>/SKILL.md. Sibling files inside a skill folder (e.g. spec-kit/references/) now install alongside SKILL.md and participate in aikit sync conflict detection per file.
Fixed
aikit initshipped zero skills. Six consumers insrc/(sync, add, list, diff, doctor, conflict-routing) still ranreaddirSync(...).filter(.md)against folders after the prior migration, returning[]and silently no-op'ing.aikit diffeven reported "No drift" on the empty kit. All seven consumers now read folder names from a single helper insrc/catalog/index.ts.aikit add --htmlaborted with "bundled skill missing in catalog" — used the old flat path. Now installs.claude/skills/<name>/SKILL.mdfor each of the four HTML skills.- Conflict resolution's tier3 routing computed
name = "SKILL"for every folder-format skill. Now extracts the folder name viatier3KeyFromConflictPath, which also matches sibling files inside a skill folder. - Orchestrator agent delegated to
backend/frontend/mobilewithout checking they were installed (they're tier2 / opt-in). Prompt now documents the availability check and fallback togeneral-purpose.
Hardened
catalog-check.jsrejects unrecognized entries at tier roots (typos likefoo.mdx, stray files,SKILL.mddropped at tier root). Tolerates.DS_Store.allowed-tools:required to be non-empty. A bareallowed-tools:orallowed-tools: []previously passed validation; empty allow-lists defeat least-privilege.
Migration
- Re-run
aikit syncafter upgrading. Existing.claude/skills/<name>.mdfiles installed by 0.12.0 / 0.13.0 are orphaned by the new folder layout —aikit diffwill report them as drift. Delete them manually (or leave them; they're inert). - No
.aikitrc.jsonschema change. Your existing config is forward-compatible. - Tooling that reads
.claude/skills/<name>.mddirectly (rare — most tools discover via frontmatter) needs to read.claude/skills/<name>/SKILL.mdinstead.
Tests
- New
test/catalog-check.test.ts— 9 fixture-based validator cases. test/sync-claude.test.ts— asserts representativeSKILL.mdinstalls +spec-kit/references/rides along (5-line guard against the entire regression class).- 169/169 tests pass.
Full diff: v0.13.0...v0.14.0