Add Checkpoints to a Skill
Analyze a skill and generate appropriate checkpoints.yaml for the automated-assessment framework.
Command
/add-checkpoints # Analyze current skill directory
/add-checkpoints typo3-docs # Analyze a specific installed skill
/add-checkpoints --dry-run # Show what would be generated, don't write
Workflow
- Locate the skill — find SKILL.md, references/, scripts/, assets/
- Analyze suitability — determine if checkpoints make sense (see criteria below)
- Extract requirements — parse SKILL.md for verifiable rules and patterns
- Generate checkpoints — create
checkpoints.yamlwith mechanical checks and LLM reviews - Add preconditions — determine which project types this skill applies to
- Validate —
${CLAUDE_PLUGIN_ROOT}/skills/automated-assessment/scripts/validate-checkpoints.sh, then${CLAUDE_PLUGIN_ROOT}/skills/automated-assessment/scripts/run-checkpoints.shon a sample project. Treat its warnings as findings: they name the defect classes below. Ablockedresult means the runner refused the command — the checkpoint never ran, so it is a defect in your YAML, not in the sample project. - Report — explain what was generated and why, or why checkpoints don't fit
Suitability Criteria
A skill is suitable for checkpoints if it defines:
- File structure requirements (directories, config files, manifests)
- Content patterns (must contain X, must not contain Y)
- Naming conventions (prefixes, suffixes, case rules)
- Tool configurations (PHPStan level, linter rules, CI steps)
- Metadata standards (license, author, version format)
A skill is NOT suitable if it only provides:
- Conceptual guidance without verifiable outputs
- Interactive workflows with no persistent artifacts
- Runtime behavior patterns (performance, caching strategies)
Report suitability with reasoning.
Checkpoint Generation Rules
Mechanical Checks
Extract from SKILL.md patterns like:
- "must exist" / "required" →
file_exists - "must not" / "never" / "avoid" →
file_not_existsornot_contains - "must contain" / "should have" →
containsorregex - Version/format constraints →
json_pathorcommand
Preconditions
Derive from the skill's scope:
- TYPO3 extensions →
file_exists: ext_emconf.php - Docker projects →
file_exists: Dockerfile - Go projects →
file_exists: go.mod - Skill repos →
file_exists: .claude-plugin/plugin.json - Universal (any project) → no preconditions
ID Convention
Use the skill's established prefix from ../automated-assessment/references/migration-guide.md, or derive a 2-letter prefix from the skill name.
Severity Assignment
error: "must", "required", "never" → blocks releasewarning: "should", "recommended" → suggestioninfo: "consider", "nice to have" → optional
The three defect classes — check every generated checkpoint against them
A checkpoint that reports something untrue is worse than no checkpoint. Three
shapes do that, all found in the shipped estate, none of them visibly wrong in
the YAML. Full evidence and correct spellings:
../automated-assessment/references/checkpoints-schema.md
→ "Three defect classes that make a checkpoint misreport".
- Vendor leakage — a
find,file_existsglob or precondition with no exclusion forvendor/,node_modules/,.Build/. The runner's auto-exclude covers ONLY glob targets of content checks; everywhere else the exclusion is yours to write. One leaking precondition ran all 14 typo3-ckeditor5 checks against an extension with no RTE code. - Skill-relative script path —
bash scripts/check-foo.sh. A checkpoint runs from the repository under test, where the skill'sscripts/does not exist, and the allowlist rejects path-prefixed commands anyway. Inline the logic (php -r '...'for anything non-trivial); keep the shipped script as the human entry point. - Pipe-into-head exit trap —
... | head -1 && echo ... && exit 1 || exit 0reports a failure on every project, becauseheadexits 0 on empty input. Let the exit status come from the match (grep -q, orregex_notwith no command at all).
Calibration Anchor
Each checkpoint records its predicted defect class and retirement condition as YAML comments. Caps at info if missing. See automated-assessment/references/calibration.md.
LLM Reviews
Only for what no command can decide. A prompt opening a line with a command
belongs in mechanical; keep both halves only with # mechanical-counterpart: <ID>.
- Code quality judgments →
domain: code-quality - Documentation completeness →
domain: documentation - Architecture decisions →
domain: architecture
Output
Generates checkpoints.yaml in the skill's directory (schema: ../automated-assessment/references/checkpoints-schema.md), plus a copy in the assets directory.
References
- Schema:
../automated-assessment/references/checkpoints-schema.md - Migration guide:
../automated-assessment/references/migration-guide.md - Existing checkpoints:
assets/*-checkpoints.yaml(as examples)