Agent skill

Find Slop

by letehaha in letehaha/moneymatter

Hunt "AI slop" in this codebase — duplication, reinvented wheels, over-engineering, defensive cruft, dead code, comment slop, performance antipatterns.

AGPL-3.0Auto-check passedDevelopment

Install Find Slop

skills CLI
$ npx skills add letehaha/moneymatter --skill find-slop -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install letehaha/moneymatter find-slop --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/letehaha/moneymatter.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/find-slop .claude/skills/find-slop && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
find-slop
GitHub stars
163
Token cost
~3k tokens
SKILL.md length
1,545 words
Files
1
Skills in repo
10
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Hunt "AI slop" in this codebase — duplication, reinvented wheels, over-engineering, defensive cruft, dead code, comment slop, performance antipatterns.

  • Works in 5 steps: Read project conventions → Discover candidate areas → Parallel investigation → …
  • Find refactor opportunities
  • SKILL.md covers Invocation, Honesty rule (override…, Workflow and What the investigators look…, plus 3 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Find Slop is an agent skill from letehaha/moneymatter. Hunt "AI slop" in this codebase — duplication, reinvented wheels, over-engineering, defensive cruft, dead code, comment slop, performance antipatterns. Auto-discovers candidate areas, asks the user which to investigate, runs parallel deep-dive subagents, and produces a terse actionable report. Does NOT apply fixes. Trigger on "/find-slop", "find slop", "find AI slop", "find refactor opportunities", "find duplicated code", "find dead code in <area".

Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development, covering Technical documentation and Code simplification. The repository describes itself as: Open-source, self-hosted budget tracker and personal finance app. Bank sync, multi-currency, investments, and a built-in MCP server for Claude and ChatGPT. The licence is AGPL-3.0.

When your agent uses it

  • Find refactor opportunities
  • Find duplicated code
  • Find dead code in <area

Example prompts

  • “AI slop”
  • “/find-slop”
  • “find slop”
  • “/find-slop”

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Read project conventions
  2. Discover candidate areas
  3. Parallel investigation
  4. Aggregate and present
  5. Final output

What it can do on your machine

Read from SKILL.md and the folder at commit 3bcd627. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Find Slop loads about 3k tokens when it runs. Until then it costs about 116 tokens; SKILL.md has 1,545 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~116
When it runs · the whole SKILL.md, loaded when a task matches
~3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from letehaha/moneymatter at commit 3bcd627, republished under its AGPL-3.0 licence (© letehaha). 1,545 words, ~2,970 tokens.

Download SKILL.mdSave it as .claude/skills/find-slop/SKILL.md (or your agent's skills folder).
name
find-slop
description
Hunt "AI slop" in this codebase — duplication, reinvented wheels, over-engineering, defensive cruft, dead code, comment slop, performance antipatterns. Auto-discovers candidate areas, asks the user which to investigate, runs parallel deep-dive subagents, and produces a terse actionable report. Does NOT apply fixes. Trigger on "/find-slop", "find slop", "find AI slop", "find refactor opportunities", "find duplicated code", "find dead code in <area>".

find-slop

Find places in the codebase that read like they were written without context — duplication, premature abstractions, defensive cruft, reinvented wheels, dead code, performance antipatterns. The smell test is: would a senior engineer who knows this codebase have written it this way? If the answer is "no," that's slop worth surfacing.

This skill DISCOVERS and REPORTS. It does NOT apply fixes. The output is a terse curated report. A separate skill (or a follow-up Claude session) is expected to act on it.

Invocation

  • /find-slop — default: auto-discover ~5 candidate areas across the whole repo.
  • /find-slop <hint> — focus discovery on a path, package, or feature name. Examples: /find-slop investments, /find-slop packages/frontend, /find-slop src/auth.
  • /find-slop --candidates N — adjust the candidate count (default 5). Combinable with a hint: /find-slop investments --candidates 3.

Parse args yourself from the user's invocation. If unclear, ask the user once and proceed.

Honesty rule (override everything else)

Do NOT pad to hit a count. At any stage:

  • If discovery finds 2 areas worth investigating, propose 2. Not 5.
  • If discovery finds nothing meaningful, say so and end the skill. Don't fabricate areas.
  • If an investigator returns "no significant findings," report that as-is.
  • If all investigators return clean, the final report can simply be "no significant findings in <areas>" — that is a successful run.

A clean report from a clean codebase is a win. Filling reports with weak findings trains the user to ignore them.

Workflow

Phase 1 — Read project conventions

Before discovery, read whichever of these exist (use Glob to confirm, then Read):

  • CLAUDE.md at the repo root, and any nested ones obviously relevant
  • package.json (or pyproject.toml / go.mod / Cargo.toml) — what deps are available
  • README.md (high-level domain)
  • AGENTS.md / CONTRIBUTING.md if present

You're capturing the project's idioms so you can pass them to investigators and prevent false positives. Do not deep-read everything — top-level only.

Phase 2 — Discover candidate areas

Spawn one Explore subagent (model: sonnet) with a prompt like:

Map the repo to identify ~N candidate areas likely to contain "AI slop" — duplication, over-engineering, defensive cruft, dead code, perf antipatterns. Signals to weight:

  • Parallel folders / near-identical filenames (duplication risk)
  • High file count or large files (over-engineering risk)
  • Many try/catch blocks, broad catch clauses, repeated ?? '' patterns (defensive risk)
  • Util/helper folders with many small one-off functions (reinvented-wheels risk)
  • Areas with sparse imports from elsewhere (potential dead code)
  • Recently churned areas per git log (potential rush job)

If the user passed a hint, scope to that. Skip node_modules/, dist/, build/, .next/, generated, vendor.

Return at most N candidate areas with for each: a name, path(s), a one-line hypothesis of likely slop type, and a one-line why-it-stands-out. Return fewer than N if signals don't justify N. Compact output only.

Once Explore returns, synthesize the candidate list. Apply the hint filter if not already applied. Drop candidates whose hypothesis you don't buy.

If you end up with zero candidates, tell the user honestly and end the skill.

Checkpoint 1 — User picks areas

Use AskUserQuestion with multiSelect: true to present candidates.

  • Each option's label = candidate name. description = the one-line hypothesis + path.
  • If candidate count is ≥4, you can only show 4 in a single AskUserQuestion (max 4 options). When there are more candidates than 4, list them all in a brief markdown summary first, then ask via AskUserQuestion for the top 4 plus an "Other" / "Specify subset" implicit option (the user can answer with a custom list).

If user selects nothing, end the skill politely.

Phase 3 — Parallel investigation

For each selected area, spawn the slop-investigator subagent.

Spawn all investigators in a single message with multiple Agent tool calls so they run in parallel.

Each Agent call:

  • subagent_type: "slop-investigator"
  • model: omit (let the agent definition's opus apply)
  • description: short, e.g. "Investigate slop in <area>"
  • prompt: a self-contained brief with:
    • Area name and exact path(s) / glob(s)
    • Hypothesis from discovery
    • Paths to conventions files you found in Phase 1
    • Slop categories in scope (default: all)
    • A reminder to output strictly in the format defined in the investigator's own instructions

Wait for all investigators to return.

Phase 4 — Aggregate and present

Combine the investigator reports into a single Markdown document, grouped by area. Preserve the investigators' format verbatim — do not paraphrase or expand findings.

Renumber findings globally across the whole report so every finding has a unique reference. Walk the aggregated document top-to-bottom and rewrite each **Finding #N** label so the sequence runs #1, #2, #3, … across areas (not restarting per area). Individual investigators numbered locally; you renumber globally. Example: if Area A returned #1, #2 and Area B returned #1, #2, #3, the final report shows Area A #1, #2 and Area B #3, #4, #5.

Show the consolidated, globally-numbered report to the user in chat.

Checkpoint 2 — User curates findings

After showing the consolidated report, ask the user which findings they want to keep in the final report. This is the "would actually act on" filter — not the "is this true" filter.

Tell the user they can reference findings by number, e.g.:

  • keep #1 #4 #5 — final report contains only those.
  • drop #2 #6 — final report contains everything except those.
  • all — keep all findings.
  • none — drop everything, end with an empty report.

Parse the user's reply and filter accordingly. After filtering, renumber again so the surviving findings are #1, #2, #3, … with no gaps.

If there are no findings to curate (everything came back clean), skip this step.

If the user wants all findings kept, skip filtering (numbers already sequential).

Show full SKILL.md (643 more words)Show less
Phase 5 — Final output

Emit the final Markdown report containing only the curated findings. Use this top-level structure:

# Slop Report

_Generated by /find-slop on <date>_

<one-line summary of scope: e.g. "Scanned 5 areas: ...; 3 with findings, 2 clean.">

## Findings

### <Area name 1>

- **Finding #1**: ...
  - **Refactor**: ...
  - **Gain**: ...
  - **Cons**: ...
  - **Where**: ...
  - **Type**: ...

- **Finding #2**: ...
  ...

### <Area name 2>

- No significant findings.

### <Area name 3>

- **Finding #3**: ...
  ...

...

Numbers run sequentially across the whole report. A reader pointing at #3 lands on exactly one finding regardless of area.

The report is the deliverable. Do not append commentary, next-steps, or "let me know if you'd like me to fix these" — the skill ends with the report. A future skill or session will consume it.

What the investigators look for (cheat sheet)

The investigator agent has the full list, but a senior-SWE-level summary:

  • Duplication & reinvented wheels — near-duplicate controllers/services/utils; hand-rolled helpers that match deps already in package.json.
  • Over-engineering & defensive slop — abstractions used in one place; try/catch around non-throwing code; null checks on guaranteed-non-null values; backwards-compat shims with no users; silent error swallowing.
  • Dead code & comment slop — unreferenced exports/params; always-one-value flags; comments restating code; paraphrase-the-signature docstrings; stale TODOs.
  • Performance antipatterns — N+1 queries; sequential awaits that should be Promise.all; regex compiled in hot loop; large spreads/clones in render paths.

Writing style (mandatory for all chat output)

When you report back to the user — candidate lists, phase updates, the consolidated report, summaries — write terse. Cognitive load is the point: the user is scanning, not reading.

Rules:

  • Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/of course/happy to/let me know if), hedging ("might possibly", "could potentially").
  • Fragments OK. Short synonyms. Abbreviations OK for common terms (DB, auth, config, fn, impl, deps, perf).
  • Causality arrow instead of "causes" / "leads to": X -> Y.
  • Pattern: [thing] [action/state] [reason]. [next].

Technical identifiers, file paths, code, error messages: stay exact.

Do NOT apply this style to:

  • The Markdown structure of the final report (### Area, bold labels, bullet hierarchy stay verbatim — investigators produce that).
  • Code blocks, file:line references, quoted error strings.
  • Security warnings or irreversible-action confirmations (use full sentences there).

Example chat update — bad (verbose):

I've finished discovering candidate areas. The Explore subagent returned 5 candidates, and they all look credible to me based on the signals it surfaced. Would you like to proceed with selecting which ones to investigate?

Example chat update — good (terse):

Discovery done. 5 candidates, all concrete. Pick which to investigate.

This style applies regardless of whether the user has the caveman skill installed — find-slop is self-contained.

Anti-patterns (do NOT do)

  • Do not skip Checkpoint 1. The user always picks which areas to investigate.
  • Do not skip Phase 1 conventions reading. Without that, investigators produce false positives.
  • Do not propose fixes inline. Report only. A separate skill applies fixes.
  • Do not include code snippets of the slop in the report. file:line refs are enough.
  • Do not flag style/formatting (linter's job), missing tests (different concern), or architectural opinions not backed by concrete slop.
  • Do not analyze node_modules/, dist/, build/, .next/, generated, vendor paths.
  • Do not pad the candidate list or the findings list to look productive.
  • Do not modify any files. This skill is read-only.
  • Do not commit, push, or do any git write operations. (Per project CLAUDE.md, always; per skill design, this one is read-only.)

Portability note

This skill is designed to work in any codebase, not just this one. It does not hardcode project-specific paths or patterns. The investigator reads conventions per repo (CLAUDE.md, package.json / pyproject.toml / go.mod / Cargo.toml, README.md) and adapts.

To use in another project:

  1. Copy .claude/skills/find-slop/ and .claude/agents/slop-investigator.md into that project's .claude/ directory.
  2. Restart your Claude Code session before the first run. Subagents are loaded from .claude/agents/ at session start — if the session was already open when the files were added, the slop-investigator subagent type will not be in the registry and Phase 3 will fail with Agent type 'slop-investigator' not found.
  3. Run /find-slop.

If you ever see Agent type 'slop-investigator' not found mid-flow, that's the same root cause: restart the session and re-run. Do not fall back to general-purpose for investigation in production runs — the dedicated subagent's system prompt enforces the strict output format and honesty rule.

© letehaha, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/find-slop of letehaha/moneymatter.

Open the folder on GitHubat commit 3bcd627

Compare with similar skills

Find Slop next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Find Slop compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Find Slop this skillletehaha/moneymatter163—~3kAutomated safety check: PassAGPL-3.0
Chisle AuditJayPokale/Chisle640—~687Automated safety check: PassMIT
Adk Sample Creatorgoogle/adk-python22k—~1.3kAutomated safety check: PassApache-2.0
Doc-Code Sync Checkfancyboi999/open-tag203—~1.7kAutomated safety check: PassApache-2.0
Typescript Styletjx666/vscode-mcp105—~961Automated safety check: PassCustom licence
Docs UpdateJayFarei/opentraces100—~4.6kAutomated safety check: PassCustom licence

Similar skills

  • Chisle Audit

    JayPokale/Chisle

    One-shot efficiency audit of a file, diff, or whole repo across BOTH axes at once: over-engineered code (reinvented stdlib, needless abstractions, speculative config) AND bloated prose (verbose…

    640 GitHub stars~687 tokensUpdated 4 days ago
    DevelopmentAuto-check passed
  • Adk Sample Creator

    google/adk-python

    Official

    Creates a new sample agent in the ADK Python repository — the sample directory, its agent.py, and its README.md — following the conventions the existing samples already use.

    22k GitHub stars~1.3k tokensUpdated today
    DevelopmentAuto-check passed
  • Doc-Code Sync Check

    fancyboi999/open-tag

    Reconciles documentation with code at the end of a change or as a periodic audit, following a repo rule that code changes and doc changes land in one commit.

    203 GitHub stars~1.7k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • Typescript Style

    tjx666/vscode-mcp

    TypeScript code style and repo conventions for VSCode MCP — inference vs explicit types, ESM import suffixes, zod schema contracts, async VSCode/Node APIs, JSON-safe IPC results, JSDoc for public…

    105 GitHub stars~961 tokensUpdated 2 mo ago
    DevelopmentAuto-check passed
  • Docs Update

    JayFarei/opentraces

    Synchronize all documentation surfaces after code changes. An agent skill from JayFarei/opentraces.

    100 GitHub stars~4.6k tokensUpdated 4 days ago
    DevelopmentAuto-check passed
  • Review Documentation

    mrinalwadhwa/fluent

    Reviews the accuracy and writing quality of documentation. An agent skill from mrinalwadhwa/fluent.

    111 GitHub stars~666 tokensUpdated today
    DevelopmentAuto-check passed

More from letehaha/moneymatter

All 10 skills in this repo
  • Spec Planner

    letehaha/moneymatter

    Deep-dive specification planner. An agent skill from letehaha/moneymatter.

    163 GitHub stars~1.8k tokensUpdated today
    Auto-check: notes
  • Add MCP Tool

    letehaha/moneymatter

    Add a new tool to the MoneyMatter MCP server. An agent skill from letehaha/moneymatter.

    163 GitHub stars~1.9k tokensUpdated today
    Auto-check: notes
  • Frontend Rules

    letehaha/moneymatter

    Frontend conventions and component usage rules. An agent skill from letehaha/moneymatter.

    163 GitHub stars~3.8k tokensUpdated today
    Auto-check passed
  • I18n Before Release

    letehaha/moneymatter

    Occasional i18n catch-up: strip unused en keys, then fill any uk translations that slipped through via i18n-editor subagents.

    163 GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • E2E Test Creator

    letehaha/moneymatter

    Creates backend e2e tests for new or existing endpoints. An agent skill from letehaha/moneymatter.

    163 GitHub stars~2.4k tokensUpdated today
    Auto-check: warnings
  • Prd Creator

    letehaha/moneymatter

    Smart PRD generator. An agent skill from letehaha/moneymatter.

    163 GitHub stars~1.1k tokensUpdated today
    Auto-check: notes

Questions about Find Slop

What does Find Slop do?

Hunt "AI slop" in this codebase — duplication, reinvented wheels, over-engineering, defensive cruft, dead code, comment slop, performance antipatterns. Find Slop is an agent skill from letehaha/moneymatter. Hunt "AI slop" in this codebase — duplication, reinvented wheels, over-engineering, defensive cruft, dead code, comment slop, performance antipatterns.

When should I use Find Slop?

Find Slop fits situations like: find refactor opportunities; find duplicated code; find dead code in <area.

How do I install Find Slop in Claude Code?

Run `npx skills add letehaha/moneymatter --skill find-slop -a claude-code`. Or copy the skill folder (.claude/skills/find-slop in letehaha/moneymatter) into .claude/skills/find-slop in your project. Claude Code loads it when a task matches its description.

How do I install Find Slop in Codex?

Run `npx skills add letehaha/moneymatter --skill find-slop -a codex`. Or copy the skill folder (.claude/skills/find-slop in letehaha/moneymatter) into .agents/skills/find-slop in your project. Codex loads it when a task matches its description.

Can I use Find Slop in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add letehaha/moneymatter --skill find-slop -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/find-slop, .gemini/skills/find-slop, .github/skills/find-slop and .opencode/skills/find-slop in your project.

What does Find Slop need to run?

SKILL.md names no scripts, command-line tools or credentials: Find Slop is instructions for the agent only.

Does Find Slop access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Find Slop safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Find Slop use?

Find Slop is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Find Slop use?

About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Find Slop?

Skills that share tags, products or a category with Find Slop: Chisle Audit (JayPokale/Chisle, 640 stars), Adk Sample Creator (google/adk-python, 22k stars), Doc-Code Sync Check (fancyboi999/open-tag, 203 stars) and Typescript Style (tjx666/vscode-mcp, 105 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Find Slop?

letehaha (a GitHub user) maintains it in letehaha/moneymatter, which has 163 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 10, 2026.

Source: letehaha/moneymatter on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.