agentleFS
31Carlton731Carlton7/skills/deslop/SKILL.md

deslop

Skill2 starsChanged 3 months agoMITView on GitHub

De-slop a diff or codebase before review — strip AI-authored tells (narration comments, hand-rolled stdlib, incohesive structure), audit what is actually necessary, and verify every claim against the real code. Use before opening a PR, when a reviewer calls code AI-generated or sloppy, when asked to audit or clean up a diff, or as a final pass after any multi-file change.

118 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use simple-issue-description, control-cli and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • JwuthriSkill

    simple-issue-description

    Turn a rough bug report, feature request, support note, or pull request into a short, plain-language issue focused on the problem and desired behavior. Use when a contributor asks to simplify an issue, explain what a PR is for, create the corresponding issue for a PR, remove implementation detail from a report, or invokes /simple-issue-description.

    Also in 4 projects that use this

  • ElyzeSolutionsSkill

    control-cli

    Build or adapt a local harness to drive, inspect, and profile an interactive CLI or TUI without external services. Use for CLI UX checks, startup regressions, memory leaks, hangs, prompt flows, or terminal demos.

    Also in 6 projects that use this

  • JwuthriSkill

    openseo-review-web-content

    Write and review content for the OpenSEO website (web/) — blog posts, guides, feature pages, FAQs. Distills the philosophy for on-brand, useful, accurate content. Use whenever adding or editing user-facing prose in web/content or web/src.

    Also in 4 projects that use this

  • learnerLjSkill

    verify-this

    Verify a claim with fresh local evidence: restate it falsifiably, capture baseline and treatment, compare artifacts, and return VERIFIED, NOT VERIFIED, or INCONCLUSIVE.

    Also in 6 projects that use this

  • ElyzeSolutionsSkill

    control-ui

    Build or adapt a local browser/CDP harness to drive and inspect a web, IDE, or Electron UI. Use for local UI verification, screenshots, accessibility snapshots, perf profiles, visual diffs, or reproducing UI bugs.

    Also in 7 projects that use this

  • ten9876Skill

    papercuts

    Read-only AetherSDR issue triage that surfaces the UX papercuts, bugs, and regressions you can fix AND prove today with the agent automation bridge. Use when the user says $papercuts or /papercuts, or asks to "find papercuts", "what can I fix and prove today", "triage bridge-provable issues", "what UX bugs can the bridge close", "sort issues by priority I can knock out", or otherwise wants a curated, lifecycle-aware (design→code→prove) shortlist of issues — NOT the label-and-respond /triage workflow. This is the discovery step that feeds /fb. Strictly read-only: it never labels, comments, closes, or edits issues.

    Also in 4 projects that use this

  • +5 more from Jwuthri

The file

Show its rules and text

We split this skill into the rules it gives an agent

19 rules. 0 are common, 17 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 116 edited versions we read keep these.

  • 17

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Build piece by piece: Start with the smallest change that does one thing.

    line 19
  2. Distinctive:

    Every addition needs a reason you could state out loud in review.

    line 27
  3. Distinctive:

    Match the neighborhood before writing: Read the adjacent files first.

    line 34
  4. Distinctive:

    If the task cannot be built piece by piece (a large port, a vendored contract), say so and compensate with a stricter Pass 1–5 audit before …

    line 38
  5. Distinctive:

    Keep (these are load-bearing):

    line 56
  6. Very specific:

    Check what the package already depends on (read package.json, not memory).

    line 81
  7. Distinctive:

    Prefer an existing dep or the runtime stdlib over adding anything.

    line 82
  8. Distinctive:

    If a new dep is warranted, pick the boring battle-tested one.

    line 83
  9. Distinctive:

    Before swapping an existing hand-rolled implementation, prove equivalence empirically — run both against the same inputs and compare …

    line 84
  10. Distinctive:

    If keeping the hand-rolled version is genuinely right (avoids a dep for 10 lines), expect the reviewer question and decide whether the …

    line 88
  11. Distinctive:

    No consumer → delete now, not "for later".

    line 106
  12. Distinctive:

    Every platform-specific skip carries a one-line reason.

    line 123
  13. Distinctive:

    Test names describe the scenario, not the implementation.

    line 124
  14. Distinctive:

    When you change output shape, add a negative assertion for the removed form.

    line 125
  15. Very specific:

    Use the repo's pinned formatter/linter version (read package.json — running a different major version locally lets CI-only failures …

    line 129
  16. Distinctive:

    Run the tests the diff touches at every layer of a stacked change, not just the tip.

    line 131
  17. Distinctive:

    Commit messages: explain why, in prose, like a person.

    line 136
  18. Distinctive:

    When asked "is this de-slopped": audit the live diff and answer with evidence (density numbers, what was deleted, what was deliberately …

    line 141
  19. Distinctive:

    When a reviewer calls something slop: concede the pattern before defending any instance.

    line 147

“Common” is measured: kept by at least 6 in 10 of the 116 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

De-slop: make generated code indistinguishable from a careful human's

Slop is not a style problem, it is a trust problem. Reviewers who spot one tell stop reading the code and start hunting for more. The fix is never cosmetic-only: every pass below verifies necessity, not just appearance.

Work from the actual diff, never from memory of what you wrote. If the work spans branches, audit each branch's diff against its merge base.

Pass 0 — author small, justify every line (prevention beats cleanup)

Slop is cheapest to remove before it exists. When building:

  • Build piece by piece. Start with the smallest change that does one thing; get it correct and idiomatic before adding the next piece. A large diff written in one shot always accretes slop; N small increments, each reviewed against this skill, do not. This also produces small PRs, which reviewers consistently trust and approve faster than one big one.
  • Interrogate every line at creation time: why does this line exist? Why is this a new function instead of a call to an existing one? Why a new file? If the answer is "the generation flowed that way", delete or fold it. Every addition needs a reason you could state out loud in review.
  • Do not overcomplicate. The obvious 5-line version beats the abstracted 25-line version until a second caller exists. No speculative parameters, no "for future flexibility", no wrapper types around one value.
  • Do not recreate the wheel — at authoring time, not just in cleanup: before writing any utility, grep the repo for an existing helper and check the dependency tree for a package that owns the problem (see Pass 2).
  • Match the neighborhood before writing. Read the adjacent files first; adopt their naming, error handling, and test harness so the new code reads like it was always there.

If the task cannot be built piece by piece (a large port, a vendored contract), say so and compensate with a stricter Pass 1–5 audit before anyone else sees it.

Pass 1 — comments

The single biggest tell. Apply one rule: a comment must state a constraint the code cannot show. Everything else gets deleted.

Delete on sight:

  • Narration: // loop over the entries, // call the helper, // return the result
  • Restating the code or its own doc header a second time in the body
  • Reviewer-talk: // this is safe because we checked above, // note that... — that is you defending the diff, not informing the next reader
  • References to the PR, the review, the conversation, or "recently changed"
  • Comments explaining why the change is correct (belongs in the PR body)
  • Section banners (// ---- helpers ----) in files under ~300 lines

Keep (these are load-bearing):

  • Wire-format or protocol constraints, especially reverse-engineered ones with no public spec: field X must be present even when null; client Y rejects the whole payload if Z is missing; cite the upstream source file
  • Why-not comments: why the obvious approach was rejected, what breaks
  • Platform facts a reader will trip on: this env var is a unix convention; this API silently no-ops on Windows
  • Security/data-safety invariants: never cache the raw record, it embeds secrets
  • Deliberate policy pins that contradict upstream defaults, with the lift condition

Density heuristic, not a rule: for glue/CRUD code, more than ~1 comment line per 15 added lines deserves a second look. For undocumented-protocol code, high density can be correct — the comments ARE the spec. Judge each comment by the keep/delete lists, never by count alone.

Doc headers: 4–8 lines of pure constraints. If a header is a paragraph narrating what the module does step by step, cut it to what the filename and exports cannot already say.

Pass 2 — hand-rolled code that a dependency or stdlib already provides

The second-biggest tell: reimplementing uuid, hashing, semver parsing, glob matching, date math, deep merge.

Procedure:

  1. Check what the package already depends on (read package.json, not memory). Prefer an existing dep or the runtime stdlib over adding anything.
  2. If a new dep is warranted, pick the boring battle-tested one.
  3. Before swapping an existing hand-rolled implementation, prove equivalence empirically — run both against the same inputs and compare outputs. Deterministic-ID and hashing code especially: a swap that changes outputs silently breaks idempotency for existing users.
  4. If keeping the hand-rolled version is genuinely right (avoids a dep for 10 lines), expect the reviewer question and decide whether the argument is worth more than the dependency. Usually it is not: boring wins review.
  5. Exception: code that is already stdlib composition (createHash + pipeline) is not hand-rolled. Say so if asked; do not wrap it further.

Pass 3 — cohesion and necessity

Slop accretes: each edit adds without consolidating. Hunt for:

  • Repeated condition expressions → extract once, name by meaning (noConfigChanges, not check1)
  • The same literal in N files → one shared constant in the module that owns the concept; adopters import it
  • Local re-implementations of repo helpers → grep for an existing helper before keeping a private copy (pathExists, output/format utilities, error helpers). Delete the local copy, import the shared one.
  • Dead code: for every helper/type/export in the diff, find a consumer. No consumer → delete now, not "for later".
  • Call sites hand-rolling what a helper owns (spacing, quoting, id generation) → move the behavior into the helper, thin the call sites
  • Same fact stated twice (doc header + inline comment) → keep one
  • Functions that return tuples of loosely-related values → often a sign two responsibilities got fused; split or document the contract

Then check repo-fit: read neighboring files and match their idiom, naming, error style, and test patterns. Code that ignores house style reads generated even when correct.

Pass 4 — tests

  • Tests must pin behavior, not the bug. If an assertion encodes the wrong value "because that is what the code does", fix both.
  • Mirror the suite's existing harness and helpers; do not invent a parallel mock style in the same file.
  • Every platform-specific skip carries a one-line reason.
  • Test names describe the scenario, not the implementation.
  • When you change output shape, add a negative assertion for the removed form.

Pass 5 — tooling parity, then verify

  • Use the repo's pinned formatter/linter version (read package.json — running a different major version locally lets CI-only failures through).
  • Run the tests the diff touches at every layer of a stacked change, not just the tip.
  • Re-audit the final diff once more after all edits: git diff and read every remaining comment line aloud against Pass 1. Density check: git diff | grep -cE '^\+\s*(//|\*)' vs total added lines.
  • Commit messages: explain why, in prose, like a person. No bullet-list changelogs for a 3-line commit, no "enhanced/improved/robust".

Reporting

When asked "is this de-slopped": audit the live diff and answer with evidence (density numbers, what was deleted, what was deliberately kept and why), never "yes" from memory. If something was kept that a reviewer might flag — say a high-density protocol file — name it proactively and give the defense in one sentence.

When a reviewer calls something slop: concede the pattern before defending any instance. Fix the category everywhere, including files they did not flag (and the ones they praised). Applying the standard as a discipline, not as damage control on flagged lines, is what rebuilds trust.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.