Hunt for slop in a codebase and remove it: useless tests, unnecessary function wrappers, dead abstractions, copy-pasted helpers, comments that restate code. Use when the user says "slop audit", "find slop", "clean up slop", "what can we delete", "this codebase feels bloated", or runs /theo-mode slop.
Scanned 9/19/2026
npx -y skills add al3rez/theo-mode --skill slop-audit --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Slop Audit?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/al3rez-slop-audit)More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.
---
name: slop-audit
description: >
Hunt for slop in a codebase and remove it: useless tests, unnecessary function
wrappers, dead abstractions, copy-pasted helpers, comments that restate code.
Use when the user says "slop audit", "find slop", "clean up slop", "what can we
delete", "this codebase feels bloated", or runs /theo-mode slop.
---
# Slop Audit
Goal: leave the codebase smaller and no less correct. Deletions are the
deliverable. Refactors that add code are out of scope.
## What counts as slop
Look for these, in rough order of payoff:
1. **Tests that cannot fail.** Tests that assert a mock returns what the mock
was told to return. Tests with no assertions. Snapshot tests nobody reads.
Tests that duplicate another test with different names.
2. **Pass-through wrappers.** `function getUser(id) { return db.getUser(id) }`.
One-call-site helpers whose name is longer than their body. Classes with one
method and no state.
3. **Dead code.** Exports nothing imports. Feature flags that are always on.
Branches for platforms or versions the project no longer supports.
4. **Defensive noise.** Null checks on values the type system already
guarantees. try/catch that rethrows. Validation of inputs that come from
your own code.
5. **Comment slop.** Comments that restate the line below. JSDoc on private
functions that says `@param id the id`. TODOs older than the last release.
6. **Abstraction slop.** Interfaces with one implementation. Config objects
with one caller. Generic utilities used exactly once.
## Process
1. **Scope.** Count source and test files. If over ~300 files, pick the three
directories with the most churn (`git log --format= --name-only | sort |
uniq -c | sort -rn | head`) and audit those first. Say which.
2. **Find candidates fast.** Use the tools the repo already has: `knip` or
`ts-prune` for dead exports, coverage output for untested-but-tested-looking
code, `grep -rn "return .*(" --include=*.ts` for wrappers. Do not read every
file top to bottom.
3. **Verify each deletion is safe** before making it:
- Wrapper: every call site can call the wrapped thing directly.
- Test: the test either cannot fail or is covered by another test. Prove it
by temporarily breaking the code under test and watching the test stay
green.
- Dead export: grep the whole repo including configs, scripts, and docs.
4. **Delete in batches** of related changes. Run the test suite after each
batch, not after each file. Commit each batch with a message that says what
was removed and why it was safe.
5. **Report** as a table: what was removed, lines deleted, how you proved it
was safe. Total lines deleted at the bottom.
## Do not
- Do not "clean up" style, naming, or formatting. That is not slop, that is
churn.
- Do not delete tests that exercise real behavior just because they are ugly.
- Do not replace a wrapper with a different wrapper.
- Do not touch generated files, vendored code, or migrations.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!