ADLC
Toolkit

skill-rot

Verifies the checkable claims inside SKILL.md files still hold against the current repo and stamps fresh ones.

skill-rot

ADLC phase: calibration (cross-phase) · Gate: every skill's verifiable claims (commands, paths, scripts) still resolve against the current repo.

What it defends against

Skills are caches, and a stale cache delivers misinformation with the authority of an expert. That is worse than no skill at all. skill-rot walks each SKILL.md, extracts the claims it can actually check (command names, file paths, and npm/npx/pnpm/yarn script references), and verifies them against the repo. Verifiable-but-failing claims are stale and fail the gate; claims it cannot adjudicate (URLs, missing package.json) are unverifiable and never counted against you. Skills with zero checkable claims are reported as [NO-CLAIMS] and are never stamped under --write. A skill whose claims are all unverifiable is reported as [UNVERIFIED], is not counted clean, and is never stamped. Run it weekly in CI to keep the skill corpus honest.

Usage

adlc skill-rot [path ...] [--write] [--json]

Positional paths override the default search roots (.claude/skills, .agents/skills, skills), which are searched only when they exist.

Symlinked skill directories and symlinked SKILL.md files are followed, with cycle detection preventing infinite recursion on recursive symlink graphs. Directories named node_modules or .git below a search root are skipped. A symlink resolving into one is skipped during default discovery and is an operational error (exit 1) when you pass explicit paths; name the target path to check it.

FlagDescription
--writeWhen every claim in a skill is ok, upsert last-verified: <YYYY-MM-DD> into its frontmatter. Skills with stale claims or zero claims are never stamped.
--jsonMachine-readable output with skills[] and a summary.

Exit codes

0: gate passes. No skill has stale claims.1: operational error (no SKILL.md files found, bad input, or an explicit path that cannot be fully inspected).2: gate fails. At least one skill has stale claims.

Example

$ adlc skill-rot .claude/skills
SKILL                          OK  STALE  UNVERIFIABLE
-----------------------------  --  -----  ------------
.claude/skills/build/SKILL.md   7      1             2
✗ 1 skill has stale claims (command `pnpm turbo` no longer resolves)
exit 2

Go deeper

packages/skill-rot. See the toolkit overview for how skill freshness feeds the calibration loop.

On this page