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
- lalulali/vespyrtheir own version, first seen Nov 8, 2026
- ferologics/pi-skillstheir own version, first seen Nov 8, 2026
- novuhq/novutheir own version, first seen Nov 8, 2026
- openclaw/openclaw-enterprisetheir own version, first seen Nov 8, 2026
- ADWilkinson/astacktheir own version, first seen Nov 8, 2026
- MammadovEshgin/clean-code-skilltheir own version, first seen Nov 8, 2026
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.
JwuthriSkillsimple-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
ElyzeSolutionsSkillcontrol-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
JwuthriSkillopenseo-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
learnerLjSkillverify-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
ElyzeSolutionsSkillcontrol-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
ten9876Skillpapercuts
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
Other versions118 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 118
- molt-bot/clawdbot★ 391ksame name
- novuhq/novu★ 40ksame name
- every-app/open-seo★ 27ksame name
- millionco/react-doctor★ 15ksame name
- jaredpalmer/kev★ 9.8ksame name
- joe-bell/cva★ 6.9ksame name
- sanity-io/sanity★ 6.4ksame name
- millionco/expect★ 3.6ksame name
- rohitg00/pro-workflow★ 2.9ksame name
- compozy/compozy★ 2.9ksame name
108 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository6 other files it gives its agents.
- app-growthSkill
- app-reviewSkill
- ghostwriteSkill
- heavy-workSkill
- ship-featureSkill
- swiftuiSkill
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
- Distinctive: line 19
Build piece by piece: Start with the smallest change that does one thing.
- Distinctive: line 27
Every addition needs a reason you could state out loud in review.
- Distinctive: line 34
Match the neighborhood before writing: Read the adjacent files first.
- Distinctive: line 38
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 …
- Distinctive: line 56
Keep (these are load-bearing):
- Very specific: line 81
Check what the package already depends on (read package.json, not memory).
- Distinctive: line 82
Prefer an existing dep or the runtime stdlib over adding anything.
- Distinctive: line 83
If a new dep is warranted, pick the boring battle-tested one.
- Distinctive: line 84
Before swapping an existing hand-rolled implementation, prove equivalence empirically — run both against the same inputs and compare …
- Distinctive: line 88
If keeping the hand-rolled version is genuinely right (avoids a dep for 10 lines), expect the reviewer question and decide whether the …
- Distinctive: line 106
No consumer → delete now, not "for later".
- Distinctive: line 123
Every platform-specific skip carries a one-line reason.
- Distinctive: line 124
Test names describe the scenario, not the implementation.
- Distinctive: line 125
When you change output shape, add a negative assertion for the removed form.
- Very specific: line 129
Use the repo's pinned formatter/linter version (read package.json — running a different major version locally lets CI-only failures …
- Distinctive: line 131
Run the tests the diff touches at every layer of a stacked change, not just the tip.
- Distinctive: line 136
Commit messages: explain why, in prose, like a person.
- Distinctive: line 141
When asked "is this de-slopped": audit the live diff and answer with evidence (density numbers, what was deleted, what was deliberately …
- Distinctive: line 147
When a reviewer calls something slop: concede the pattern before defending any instance.
“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.
Files
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:
- Check what the package already depends on (read package.json, not memory). Prefer an existing dep or the runtime stdlib over adding anything.
- If a new dep is warranted, pick the boring battle-tested one.
- 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.
- 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.
- 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, notcheck1) - 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 diffand 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.
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
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.

