The profile was never parsed — it was prose the skill bodies told the model to read, so most slots were dead, constant across every project, or fiction (the whole pipeline block, including the "tdd is opt-in" claim, was enforced by nothing). Split it in two: constants become fixed conventions named directly by the skills (new docs/conventions.md), and the few genuinely per-project facts move to each project's CLAUDE.md under '## Skills plugin: project facts'. tdd/fieldtest/docwriter are now always available; the only behavioural toggle left is spec auto-sign. Delete docs/profile-schema.md and templates/project-profile.yml; add docs/conventions.md and a project-facts section to templates/CLAUDE.md.fragment; rewrite all SKILL/agent prose and the pipeline/design/migration/README/INSTALL docs accordingly.
3.0 KiB
Migration
This document records the migration of AILang's in-tree
~/dev/ailang/skills/ into this plugin — now complete — and the
layout convention and authoring checklists that came out of it.
Each skill is one top-level directory at the repo root,
containing a SKILL.md plus the agent files it dispatches
under agents/. Agents live with their dispatching skill —
this is what makes the "no orphan agents" rule structurally
true rather than only documented.
Repo layout
Every top-level directory at the repo root that contains a
SKILL.md is a skill; if it dispatches agents, they live in an
agents/ subdirectory beside that SKILL.md. The repo root is
the authoritative list of skills — this document deliberately
does not enumerate them, so it cannot drift out of sync as
skills are added or renamed.
boss is the exception with no agents/: it is itself the
dispatcher of the other skills, not a dispatcher-of-subagents.
install.sh walks the repo root, treats every top-level
directory that contains a SKILL.md as a skill, and symlinks
it into ~/.claude/skills/<name>; if the skill has an
agents/ subdirectory, that is symlinked into
~/.claude/agents/<name>. Claude Code's flat user-level
discovery still finds everything while the source tree keeps
the structural binding.
Migration checklist per skill
- Strip project-specific paths (
docs/specs,docs/plans,docs/design/INDEX.md,crates/,bench/). - Strip project-specific commands (
cargo build,bench/check.py). - Replace literals with fixed conventions named directly (see
conventions.md) or, where they vary per project, a reference to the project'sCLAUDE.mdproject facts. - Strip project vocabulary (
AILang,Form A,.ail.json,Boss); use the fixed vocabulary (cycle / iteration / milestone / contract). - Strip project-specific contracts (honesty-rule,
feature-acceptance). These belong in the project's own
CLAUDE.md, not the plugin. - Verify the body still reads coherently for a generic project — would it make sense in a Python web service? A TypeScript library?
Migration checklist per agent
- Drop the
ailang-prefix from thename:frontmatter field. The skill path is the disambiguator. - Replace hardcoded standing-reading paths
(
docs/design/INDEX.md, etc.) with the fixed standing reading (CLAUDE.md+git log -10) plus, for role-specific files, a reference to the per-role standing reading in the project'sCLAUDE.mdproject facts. - Replace project-specific Iron Law clauses with the universal
discipline constants; project-specific clauses go to the
project's own
CLAUDE.md. - Verify the body still reads coherently for a generic project (see the per-skill checklist above).
- Confirm the
tools:frontmatter list matches the agent template's role-based conventions (read-only review vs implementation vs orchestrator). - Confirm the agent does not have
Agentin its tools list (no nested subagent dispatch).