$npx -y skills add yetone/kill-ai-slop --skill skillFind and remove AI slop — the generic, machine-default visual and copy tics of vibe-coded products — from a web project. Use when the user asks to "kill AI slop", "de-slop", "remove the AI look", "make this not look AI-generated", or clean up a landing page / UI / docs that feels
| 1 | # Kill AI Slop |
| 2 | |
| 3 | AI slop is **ugly** in a specific way: it piles on every possible style and |
| 4 | detail without settling on a focus. A gradient, a glow, a mascot, emoji, a wall |
| 5 | of glowing cards, every default switched on at once, until every product looks |
| 6 | like the same garish template. It reads as "designed" in a thumbnail and falls |
| 7 | apart the moment anyone looks. Your job is to strip it back to something a |
| 8 | person would actually choose. |
| 9 | |
| 10 | The principles, held on every fix you make: |
| 11 | |
| 12 | 1. **Decide before you decorate.** Every visual choice must be explainable. |
| 13 | 2. **One accent, one voice.** |
| 14 | 3. **Hierarchy from scale and space.** Coloring words or swapping fonts is a shortcut. |
| 15 | 4. **Subtract first.** The first move toward not-ugly is removing things. |
| 16 | 5. **Specific beats punchy** in copy. |
| 17 | 6. **Decoration must mean something** — icons, badges, callouts are signals. |
| 18 | |
| 19 | ## Workflow |
| 20 | |
| 21 | Follow these steps in order. Do not mass-edit before the user has seen the report. |
| 22 | |
| 23 | ### 1. Scope |
| 24 | Confirm what to scan. Default to the app/site source (skip `node_modules`, |
| 25 | `dist`, `build`, `.git`, `vendor`, lockfiles, minified files). Ask if the |
| 26 | project mixes several apps. |
| 27 | |
| 28 | ### 2. Scan |
| 29 | Run the bundled scanner, which greps the codebase for the code-level signals of |
| 30 | each tell and prints grouped `file:line` hits: |
| 31 | |
| 32 | ``` |
| 33 | node scripts/scan.mjs <root> # human-readable report |
| 34 | node scripts/scan.mjs <root> --json # machine-readable, for triage |
| 35 | ``` |
| 36 | |
| 37 | It is pure Node (no dependencies) and never edits files. Use its output as a |
| 38 | starting map, not gospel — confirm each hit by reading the code. |
| 39 | |
| 40 | To narrow a scan: `--only=01,06` / `--skip=19` filter by tell id, and |
| 41 | `--exclude=legacy` drops paths (substring match on the project-relative path). |
| 42 | `--rules=extra.mjs` loads additional project- or language-specific tells |
| 43 | (`scripts/rules.ru.mjs` is a shipped Russian-copy example and the template for |
| 44 | your own). Hits the user has confirmed as intentional can be pinned in source |
| 45 | with `deslop-ignore`, `deslop-ignore-next-line 06`, or `deslop-ignore-file` |
| 46 | comments — prefer the id-scoped forms so new tells still surface. |
| 47 | |
| 48 | ### 3. Triage |
| 49 | For every hit, open the file and decide **slop vs. intentional**. This is the |
| 50 | step that separates this skill from a lint rule. A gradient, a serif, or an |
| 51 | emoji can be a real, defended choice. Keep anything the user clearly chose |
| 52 | (brand tokens, a logo, a deliberate illustration). Flag only defaults. |
| 53 | |
| 54 | Read `references/taxonomy.md` for what each tell is and why it reads as |
| 55 | machine-made, and `references/detection.md` for the exact patterns and their |
| 56 | common false positives. |
| 57 | |
| 58 | ### 4. Report |
| 59 | Before changing anything, give the user a grouped summary: each tell, the |
| 60 | `file:line` hits you confirmed, one sentence on why, and the proposed fix. |
| 61 | Mirror the format: |
| 62 | |
| 63 | ``` |
| 64 | slop src/Hero.tsx:12 indigo→violet gradient → one solid accent |
| 65 | slop src/Hero.tsx:31 gradient-clip headline → solid ink, scale up |
| 66 | slop src/Note.tsx:8 border-l-4 callout ×3 → 1 aside, rest is body |
| 67 | slop copy.md:1 "not just X — it's Y" → say the specific thing |
| 68 | → 4 groups, 11 hits. |
| 69 | ``` |
| 70 | |
| 71 | Then ask which groups to apply, or whether to proceed on all. |
| 72 | |
| 73 | ### 5. Fix |
| 74 | Apply the minimal change that removes the tell while preserving intent and |
| 75 | function. Use `references/fixes.md` for the before→after pattern per tell. |
| 76 | |
| 77 | - Prefer editing shared tokens/components over touching every call site. |
| 78 | - Never invent new brand colors; if a palette must change, propose neutrals + |
| 79 | the project's existing accent and let the user confirm. |
| 80 | - Keep copy meaning; make it specific, don't just delete it. |
| 81 | - Re-run the scanner after fixing to confirm the count dropped, and note any |
| 82 | hits you intentionally left (with the reason). |
| 83 | |
| 84 | ## Guardrails |
| 85 | |
| 86 | - **Respect authorship.** Treat unfamiliar files and deliberate flourishes as |
| 87 | someone's choice. When unsure whether something is slop, ask — don't strip it. |
| 88 | - * |