maddhruv/absolute-debt
> Triggers on "absolute debt", "fix our lint warnings", "clear the type errors", "get to strict mode", "burn down suppressions".
npx skills add https://github.com/maddhruv/absolute --skill absolute-debt
> Start your first response with the 🧾 emoji.
Pay down accumulated lint and type-checker debt across the repo — existing warnings,
errors, and suppressions that built up over time — in safe waves, by rule, with tests green
after each. The goal is a genuinely clean lint + typecheck, not a quieter one.
Runs the shared engine in references/health-engine.md — read it for the
DETECT → SCAN → TRIAGE → FIX → VERIFY → REPORT loop and the safety contract. This file
covers only what's specific to lint/type debt.
tsconfig strictness) and clearing the fallout.eslint-disable / @ts-ignore / # type: ignore suppressions.debt vs simplify: simplify improves *your working diff's* quality. debt clears
pre-existing repo-wide lint/type violations on green main. Use debt for standing
cleanup, not for changes you're actively making.
| Ecosystem | Lint debt | Type debt |
|---|---|---|
| JS/TS | eslint . (full report, by rule) | tsc --noEmit |
| Python | ruff check / flake8 | mypy / pyright |
| Go | golangci-lint run | go vet ./..., staticcheck |
Also inventory suppressions as debt in their own right: eslint-disable*,
@ts-ignore/@ts-expect-error, # type: ignore, # noqa, //nolint. Each is a hidden
violation. Count violations grouped by rule (not by file) — that's how you wave them.
| Wave | Class | Default |
|---|---|---|
| 1 | autofixable lint (eslint --fix, ruff --fix, gofmt) | fix now — mechanical, safe |
| 2 | manual lint by rule, low behavioral risk (unused, style, imports) | fix this pass, one rule at a time |
| 3 | type errors, and lint rules that can change behavior if "fixed" wrong | gated — review each, may need real logic |
| 4 | removing suppressions (@ts-ignore etc.) | gated — each may surface a real bug |
Fix one rule across the repo per wave, not one file across all rules — keeps diffs
reviewable and regressions bisectable. Config tightening (enable rule / raise strictness) is
itself a finding: propose it, then clear what it surfaces.
wrong somewhere — fix the type, don't cast to any/add # type: ignore.
nothing regress.
@ts-ignore to clear a type error *adds* debt. Forbidden here.any / cast to win. Silences the checker, keeps the bug. Fix the real type.--fix can change behavior (e.g. prefer-const on areassigned var via a bug). Run tests after autofix too.
not paydown.
/absolute simplify — quality of code you're *currently changing*./absolute prune — many unused-var/import warnings vanish once dead code is pruned./absolute work — if clearing the debt needs real refactoring, hand off.Take maddhruv/absolute-debt from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.