Skip to content

v0.14.0 — skill folder-format migration

Choose a tag to compare

@Mersall Mersall released this 16 May 17:58
· 8 commits to main since this release

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 init shipped zero skills. Six consumers in src/ (sync, add, list, diff, doctor, conflict-routing) still ran readdirSync(...).filter(.md) against folders after the prior migration, returning [] and silently no-op'ing. aikit diff even reported "No drift" on the empty kit. All seven consumers now read folder names from a single helper in src/catalog/index.ts.
  • aikit add --html aborted with "bundled skill missing in catalog" — used the old flat path. Now installs .claude/skills/<name>/SKILL.md for each of the four HTML skills.
  • Conflict resolution's tier3 routing computed name = "SKILL" for every folder-format skill. Now extracts the folder name via tier3KeyFromConflictPath, which also matches sibling files inside a skill folder.
  • Orchestrator agent delegated to backend/frontend/mobile without checking they were installed (they're tier2 / opt-in). Prompt now documents the availability check and fallback to general-purpose.

Hardened

  • catalog-check.js rejects unrecognized entries at tier roots (typos like foo.mdx, stray files, SKILL.md dropped at tier root). Tolerates .DS_Store.
  • allowed-tools: required to be non-empty. A bare allowed-tools: or allowed-tools: [] previously passed validation; empty allow-lists defeat least-privilege.

Migration

  1. Re-run aikit sync after upgrading. Existing .claude/skills/<name>.md files installed by 0.12.0 / 0.13.0 are orphaned by the new folder layout — aikit diff will report them as drift. Delete them manually (or leave them; they're inert).
  2. No .aikitrc.json schema change. Your existing config is forward-compatible.
  3. Tooling that reads .claude/skills/<name>.md directly (rare — most tools discover via frontmatter) needs to read .claude/skills/<name>/SKILL.md instead.

Tests

  • New test/catalog-check.test.ts — 9 fixture-based validator cases.
  • test/sync-claude.test.ts — asserts representative SKILL.md installs + 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