Install any skill in seconds. Free to start, no credit card required.
Get Started Free →MANDATORY: Run appropriate validation tools after EVERY code change. Do not finish a task until the code is error-free.
.claude/skills/lint-and-validate/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -43% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 11% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 29% | 0% |
Use after behavior or configuration changes when a repository has relevant lint or type checks. Read the repository's instructions and package scripts first. Run focused checks during development and the required checks before completion.
lint can modify files or run arbitrary project code.npm run lint and npm run typecheck. Do not use npx to silently fetch an absent checker.ruff check . or mypy .. Do not assume every pyproject.toml configures both. Never add --fix without inspecting the proposed changes and the task's authorization.After correcting a TypeScript behavior, inspect package.json, run the configured focused regression test, then npm run lint and npm run typecheck if those scripts exist. If TypeScript is declared but not installed, report the missing local checker; do not substitute a downloaded package or call the result a pass.
python scripts/lint_runner.py /absolute/project: runs a conservative set of candidate checks. Node fallback checkers must exist in local node_modules/.bin; Python candidates must be installed. Inspect the project scripts first. A missing command or failing check exits 1; no configured checks or invalid project metadata exits 2. Exit 0 means the invoked checks passed, not that every needed check was discovered. Python detection is heuristic and may suggest unconfigured Ruff/MyPy commands.python scripts/type_coverage.py /absolute/project: read-only annotation inventory, despite its retained compatibility filename. Samples at most 30 files per language, skips links and build/dependency directories, and bounds file reads. Python uses AST nodes to avoid double-counting functions. TypeScript reports lexical : any occurrences, including possible comments and strings. No quality percentage or pass/fail threshold is inferred. Exit 2 means no applicable files; parse/read errors exit 1.The runner executes trusted project commands, which may mutate files or access the network. It does not install dependencies, detect every monorepo configuration, or replace the project's CI contract. The inventory is a bounded source sample, not semantic type coverage; inferred types, generics, decorator behavior and correctness require the actual type checker. Do not label unrun checks as successful.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 14,159 | 13,051 | -8% | 1 | 1 | 0% | 1,385 | 1,773 | +28% | 0 | 0 | — |
case-02 | fail→fail | 4,591 | 4,376 | -5% | 1 | 1 | 0% | 336 | 707 | +110% | 0 | 0 | — |
case-03 | pass→pass | 3,785 | 2,143 | -43% | 1 | 1 | 0% | 688 | 887 | +29% | 0 | 0 | — |
case-04 | pass→pass | 3,501 | 2,295 | -34% | 1 | 1 | 0% | 538 | 902 | +68% | 0 | 0 | — |
case-13 | pass→pass | 20,955 | 3,469 | -83% | 1 | 1 | 0% | 1,307 | 1,016 | -22% | 0 | 0 | — |
case-05 | pass→pass | 5,201 | 4,686 | -10% | 1 | 1 | 0% | 906 | 1,043 | +15% | 0 | 0 | — |
case-06 | pass→pass | 3,626 | 2,349 | -35% | 1 | 1 | 0% | 628 | 962 | +53% | 0 | 0 | — |
case-07 | pass→pass | 4,384 | 5,089 | +16% | 1 | 1 | 0% | 858 | 1,459 | +70% | 0 | 0 | — |
case-08 | pass→pass | 17,345 | 2,393 | -86% | 1 | 1 | 0% | 533 | 886 | +66% | 0 | 0 | — |
case-09 | fail→pass | 7,036 | 2,047 | -71% | 1 | 1 | 0% | 1,495 | 850 | -43% | 0 | 0 | — |
case-10 | fail→pass | 5,389 | 3,074 | -43% | 1 | 1 | 0% | 976 | 1,040 | +7% | 0 | 0 | — |
case-11 | pass→pass | 10,421 | 4,373 | -58% | 1 | 1 | 0% | 2,234 | 1,233 | -45% | 0 | 0 | — |
case-12 | pass→pass | 9,481 | 2,546 | -73% | 1 | 1 | 0% | 1,705 | 932 | -45% | 0 | 0 | — |
case-14 | pass→pass | 2,902 | 3,548 | +22% | 1 | 1 | 0% | 490 | 1,120 | +129% | 0 | 0 | — |
case-15 | pass→pass | 4,036 | 2,530 | -37% | 1 | 1 | 0% | 657 | 950 | +45% | 0 | 0 | — |
case-16 | pass→pass | 4,300 | 2,315 | -46% | 1 | 1 | 0% | 718 | 910 | +27% | 0 | 0 | — |
case-17 | pass→pass | 7,896 | 5,094 | -35% | 1 | 1 | 0% | 1,472 | 1,406 | -4% | 0 | 0 | — |
case-18 | pass→pass | 3,460 | 3,853 | +11% | 1 | 1 | 0% | 594 | 1,154 | +94% | 0 | 0 | — |
case-19 | fail→pass | 7,625 | 6,000 | -21% | 1 | 1 | 0% | 1,401 | 1,561 | +11% | 0 | 0 | — |
case-20 | pass→pass | 4,609 | 4,035 | -12% | 1 | 1 | 0% | 807 | 1,231 | +53% | 0 | 0 | — |
case-21 | pass→pass | 10,461 | 6,180 | -41% | 1 | 1 | 0% | 1,951 | 1,625 | -17% | 0 | 0 | — |
case-22 | pass→pass | 3,737 | 3,851 | +3% | 1 | 1 | 0% | 680 | 1,116 | +64% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +18 percentage points is the difference between those two pass rates over the 21 comparable cases.
The publisher has shipped newer versions since this run, so these numbers describe v2, not the version currently listed.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 7/28/2026 | +17% |
Other measured skills in the registry, with their headline benchmark lift.