Problem
AGENTS.md is now the single, very large contract for changing this codebase — the issue/board workflow, the priority rubric, the branch and label rules, the TypeScript/Mantine conventions, the test tiers and coverage gate, the pre-push gate, and the release procedure. It works, but it is loaded in full, on every turn, for every task, whether the task is a one-line CSS fix or a release cut.
That has three costs:
- Context. The whole contract is resident even when almost none of it applies.
- Discoverability. A procedure like "cut a release" or "triage new issues" is a multi-step recipe buried in prose among a dozen unrelated recipes; it is found by reading, not by asking for it.
- Drift. The recipes carry live IDs (board field/option IDs, project node IDs) and exact command sequences. When they go stale there is nothing that runs them, so staleness is discovered by a failed command mid-task.
Agent skills are the mechanism designed for exactly this shape: a named, on-demand bundle of instructions loaded only when the task matches, invokable by name (/<skill>).
Proposal
Add a .claude/skills/ set that factors the procedural parts of AGENTS.md into invokable skills, leaving AGENTS.md as the always-on rules (conventions a reviewer cites against a diff) and moving the procedures (multi-step recipes with commands) into skills.
Candidate skills, roughly one per procedure that today lives as prose:
| Skill |
Covers |
local-dev |
The non-workspace install cascade, per-client npm install, clients/web && npm run dev vs the built launcher, which script to run for which client, the @inspector/core alias, dependency placement rules (root-only SDK packages, bundler external lists, overrides) |
issue-create |
The full create flow: version label + type label + milestone + board card + Status + Priority — all five steps, with the current board IDs |
issue-triage |
Pass 1 sweep (the unboarded diff against both boards), the priority rubric with the score comment, and the board audit query |
board-ops |
The gh project recipes for #28 and #11: move a card, re-score, delete a card, plus the option-deletion hazard, the snapshot rule, and the recovery recipe |
pre-push-gate |
npm run format → npm run ci, what each tier covers, the DCO signoff rule and its repair, and what to do when a specific gate fails |
testing |
Test placement (side-by-side vs src/test/ vs __tests__/), the tiers, the ≥90 per-file gate, the v8 ignore policy, renderWithMantine |
pr-flow |
Branch naming, Closes #N, screenshots into the gitignored pr-screenshots/, requesting Copilot review, responding to review rounds, and closing out (manual close + Done) |
release |
Cutting a release: bump on v2/main first, milestone merge, tag origin/main bare x.y.z, pack:verify, the Docker image |
test-servers |
Picking and running a showcase config, ensure-test-servers, the stale-build hazard |
Not exhaustive — the list should be settled while doing the work, and some of the above may merge.
Constraints
AGENTS.md stays the source of truth for rules. A skill must not become a second, divergent statement of a convention. Where a skill needs a rule, it should state the procedure and point at AGENTS.md for the rule — the same relationship .github/copilot-instructions.md has, and with the same failure mode (silent drift) to guard against.
- Anything moved out of
AGENTS.md must be removed from it, not duplicated. Two copies of the board IDs is strictly worse than one.
- Non-Claude agents read
AGENTS.md. Skills are a Claude Code mechanism; other agents (and humans) get only the file. So the split has to leave AGENTS.md still complete enough to work from — which argues for moving recipes (which a human can find via a pointer) rather than rules (which a reviewer must have resident).
- Mirror any review-relevant change into
.github/copilot-instructions.md, per the existing rule.
Open questions
- Is the right split rules-vs-procedures, or task-vs-task? The table above mixes both.
- Should
AGENTS.md keep a short index of the skills so a human/non-Claude agent knows what exists and where to look?
- Do any of these warrant being project skills committed to the repo (so every contributor gets them) vs personal? Committed, presumably — but that makes them a reviewed surface with its own maintenance cost.
- Is there a way to make a skill's recipe executable (a script in the skill dir) rather than prose, so the board IDs live in one place that fails loudly when stale?
Problem
AGENTS.mdis now the single, very large contract for changing this codebase — the issue/board workflow, the priority rubric, the branch and label rules, the TypeScript/Mantine conventions, the test tiers and coverage gate, the pre-push gate, and the release procedure. It works, but it is loaded in full, on every turn, for every task, whether the task is a one-line CSS fix or a release cut.That has three costs:
Agent skills are the mechanism designed for exactly this shape: a named, on-demand bundle of instructions loaded only when the task matches, invokable by name (
/<skill>).Proposal
Add a
.claude/skills/set that factors the procedural parts ofAGENTS.mdinto invokable skills, leavingAGENTS.mdas the always-on rules (conventions a reviewer cites against a diff) and moving the procedures (multi-step recipes with commands) into skills.Candidate skills, roughly one per procedure that today lives as prose:
local-devnpm install,clients/web && npm run devvs the built launcher, which script to run for which client, the@inspector/corealias, dependency placement rules (root-only SDK packages, bundlerexternallists,overrides)issue-createissue-triageboard-opsgh projectrecipes for #28 and #11: move a card, re-score, delete a card, plus the option-deletion hazard, the snapshot rule, and the recovery recipepre-push-gatenpm run format→npm run ci, what each tier covers, the DCO signoff rule and its repair, and what to do when a specific gate failstestingsrc/test/vs__tests__/), the tiers, the ≥90 per-file gate, thev8 ignorepolicy,renderWithMantinepr-flowCloses #N, screenshots into the gitignoredpr-screenshots/, requesting Copilot review, responding to review rounds, and closing out (manual close + Done)releasev2/mainfirst, milestone merge, tagorigin/mainbarex.y.z,pack:verify, the Docker imagetest-serversensure-test-servers, the stale-build hazardNot exhaustive — the list should be settled while doing the work, and some of the above may merge.
Constraints
AGENTS.mdstays the source of truth for rules. A skill must not become a second, divergent statement of a convention. Where a skill needs a rule, it should state the procedure and point atAGENTS.mdfor the rule — the same relationship.github/copilot-instructions.mdhas, and with the same failure mode (silent drift) to guard against.AGENTS.mdmust be removed from it, not duplicated. Two copies of the board IDs is strictly worse than one.AGENTS.md. Skills are a Claude Code mechanism; other agents (and humans) get only the file. So the split has to leaveAGENTS.mdstill complete enough to work from — which argues for moving recipes (which a human can find via a pointer) rather than rules (which a reviewer must have resident)..github/copilot-instructions.md, per the existing rule.Open questions
AGENTS.mdkeep a short index of the skills so a human/non-Claude agent knows what exists and where to look?