/absolute-debt
Lint and typecheck debt paydown: clear pre-existing repo-wide lint/type violations and suppressions (@ts-ignore, # type: ignore) one rule per wave, fixing causes not symptoms. Runs on green main. For diff-scoped quality use absolute-simplify. Triggers on "absolute debt", "fix
$ npx -y skills add absolutelyskilled/absolutelyskilled --skill absolute-debt --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition β
- You can call itInvoke it directly when you want it.
- Slash command
/absolute-debt
Context preview
The summary Claude sees to decide when to auto-load this skill.
Lint and typecheck debt paydown: clear pre-existing repo-wide lint/type violations and suppressions (@ts-ignore, # type: ignore) one rule per wave, fixing causes not symptoms. Runs on green main. For diff-scoped quality use absolute-simplify. Triggers on "absolute debt", "fix
SKILL.md
absolute-debt.SKILL.mdname: absolute-debt
version: 0.5.0
description: >
Lint and typecheck debt paydown: clear pre-existing repo-wide lint/type violations and suppressions (@ts-ignore, # type: ignore) one rule per wave, fixing causes not symptoms. Runs on green main. For diff-scoped quality use absolute-simplify.
Triggers on "absolute debt", "fix our lint warnings", "clear the type errors", "get to strict mode", "burn down suppressions".
category: workflow
tags:
- workflow
- maintenance
- linting
- typescript
- debt
platforms:
- claude-code
- gemini-cli
- openai-codex
- mcp
user-invocable: true
argument-hint: "[target]"
license: MIT
maintainers:
- github: maddhruv
> Start your first response with the π§Ύ emoji.
Absolute Debt
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.
---
When to use
- "Fix our lint warnings", "clean up the type errors", "get the codebase to strict mode".
- Tightening config (enable a rule, raise `tsconfig` strictness) and clearing the fallout.
- Burning down accumulated `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.
---
What it scans
| 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.
---
Risk ranking (TRIAGE)
| 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.
---
Fix & verify
- Run the autofixers first (wave 1), commit-ready, then re-scan to see what's truly manual.
- Manual fixes: address the *cause*, not the symptom. A type error means the types are
wrong somewhere β fix the type, don't cast to `any`/add `# type: ignore`.
- **Never** clear a violation by suppressing it. Removing suppressions is the *goal*, not a tool.
- After each wave: full test + lint + typecheck + build. The violation count must drop and
nothing regress.
---
Gotchas
1. **Fixing by suppressing.** `@ts-ignore` to clear a type error *adds* debt. Forbidden here. 2. **`any` / `cast` to win.** Silences the checker, keeps the bug. Fix the real type. 3. **One-file-all-rules waves.** Mixes concerns, unreviewable. Go one-rule-all-files. 4. **Autofix without review.** `--fix` can change behavior (e.g. `prefer-const` on a reassigned var via a bug). Run tests after autofix too. 5. **Disabling the rule instead of fixing.** Loosening config to hit zero is debt laundering, not paydown.
---
Companion commands
- **`/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.
Read more
name: absolute-debt version: 0.5.0 description: > Lint and typecheck debt paydown: clear pre-existing repo-wide lint/type violations and suppressions (@ts-ignore, # type: ignore) one rule per wave, fixing causes not symptoms. Runs on green main. For diff-scoped quality use absolute-simplify. Triggers on "absolute debt", "fix our lint warnings", "clear the type errors", "get to strict mode", "burn down suppressions". category: workflow tags: - workflow - maintenance - linting - typescript - debt platforms: - claude-code - gemini-cli - openai-codex - mcp user-invocable: true argument-hint: "[target]" license: MIT maintainers: - github: maddhruv
> Start your first response with the π§Ύ emoji.
Absolute Debt
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.
---
When to use
- "Fix our lint warnings", "clean up the type errors", "get the codebase to strict mode".
- Tightening config (enable a rule, raise `tsconfig` strictness) and clearing the fallout.
- Burning down accumulated `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.
---
What it scans
| 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.
---
Risk ranking (TRIAGE)
| 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.
---
Fix & verify
- Run the autofixers first (wave 1), commit-ready, then re-scan to see what's truly manual.
- Manual fixes: address the *cause*, not the symptom. A type error means the types are
wrong somewhere β fix the type, don't cast to `any`/add `# type: ignore`.
- **Never** clear a violation by suppressing it. Removing suppressions is the *goal*, not a tool.
- After each wave: full test + lint + typecheck + build. The violation count must drop and
nothing regress.
---
Gotchas
1. **Fixing by suppressing.** `@ts-ignore` to clear a type error *adds* debt. Forbidden here. 2. **`any` / `cast` to win.** Silences the checker, keeps the bug. Fix the real type. 3. **One-file-all-rules waves.** Mixes concerns, unreviewable. Go one-rule-all-files. 4. **Autofix without review.** `--fix` can change behavior (e.g. `prefer-const` on a reassigned var via a bug). Run tests after autofix too. 5. **Disabling the rule instead of fixing.** Loosening config to hit zero is debt laundering, not paydown.
---
Companion commands
- **`/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.
A development workflow engine for AI coding agents. Eleven separate skills β a one-time absolute-init (interview + stack detection β config), a build loop you run every day (think β spec β plan β build β polish β document), plus an engineering-health family
Repo: absolutelyskilled/absolutelyskilled
Other skills on absolute.
- /absolute-audit
Vulnerability and security scan (defensive, your own repo): dependency CVEs plus risky code patterns (secrets, injection, weak authz), severity x reachability triaged and remediated without suppressing. Complements the built-in /security-review. Triggers on "absolute audit",
Open skill - /absolute-deflake
Flaky test fixes: detect nondeterministic tests empirically (repeat/shuffle/parallel runs), diagnose the root cause, fix it β never retry/skip/sleep β and verify across many randomized runs. Triggers on "absolute deflake", "fix flaky tests", "CI is flaky", "this test fails
Open skill - /absolute-docs
DiΓ‘taxis-driven documentation for AI coding agents: write, improve, or audit tutorials, how-tos, reference, explanation, and developer docs (README, CONTRIBUTING, ADRs). Detects the docs stack; gates on the outline before writing prose; verifies every claim against the code
Open skill - /absolute-init
One-time setup for absolute: interview how you want it to behave (output style, autonomy, TDD strictness, spec dir, families) + detect the stack once, then write `.absolute.config.json` (project, committed) and `~/.absolute/config.json` (user defaults + per-project overrides).
Open skill - /absolute-prune
Dead code and dependency cleanup, repo-wide: unused deps, unreferenced exports, unreachable code, orphaned files β removed only with tool evidence, in reversible waves. Runs on green main. For diff-scoped cleanup use absolute-simplify. Triggers on "absolute prune", "remove dead
Open skill - /absolute-simplify
Use when the user wants to simplify, clean up, refactor, tidy, or refine code β their staged/unstaged git changes or a target file/path. Reduces complexity, flattens nesting, removes redundancy and dead code, scores each change by value (holding low-value churn), then runs tests
Open skill

