skills/slop-detector/SKILL.md
--- name: slop-detector description: Scans a substacker draft for 10 signatures of AI-generated explainer slop — meta-framing openers ("In this post"), list-heavy argument, nominalization clusters, generic examples lacking first-person texture, prompt-residue phrases ("Let's break this down"), buzzword stuffing, outline-shaped paragraphs, hedge clusters, flattened uncertainty. Use when a draft "feels generic" even after voice-check passes. Trigger keywords: slop, AI-written, generic, template, m
npx skillsauth add lyndonkl/claude skills/slop-detectorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Related skills: Called by the Editor voice pass. Consumes hedge-cluster count from hedge-detector (S8). Emits the "Slop signatures" subsection.
Fixed list. Each either clean or flagged with the offending span.
| # | Signature | Detection |
|---|---|---|
| S1 | Meta-framing opener | First paragraph contains In this post, This article, We will explore, Let's dive into, Today we'll look at |
| S2 | List-carrying-argument | Any bulleted list where the argument collapses if bullets are removed. Test: does the prose still stand without the list? |
| S3 | Zombie nouns (Sword) | >3 nominalizations per 100 words (suffixes: -ation, -ity, -ment, -ence on abstract nouns) |
| S4 | Generic examples | "a company" / "a model" / "a user" with no specific name, scale, dataset |
| S5 | No first-person | Zero I, my, we-as-me in a >800-word reflective essay |
| S6 | Prompt residue | Let's break this down, To summarize, In conclusion, Key takeaways, Let me explain |
| S7 | Outline-shaped paragraphs | >60% of paragraphs follow same syntactic shape: topic → 3 supporting sentences → transition |
| S8 | Hedge cluster | ≥2 epistemic-weakness hedges within 50 words (from hedge-detector) |
| S9 | Buzzword stuffing | ≥3 terms from {game-changer, paradigm shift, under the hood, delve, unpack, dive into} in a single draft |
| S10 | Flattened uncertainty | Any small-N caveat that appears in corpus/drafts/notes/ but was removed in the submitted draft (requires notes; else skip this signature) |
Slop scan draft D:
- [ ] Step 1: For each signature, run detection rule
- [ ] Step 2: Mark each signature as clean | flagged (with quote)
- [ ] Step 3: Tier-1 signatures: S1, S2, S6 (generic framing + prompt residue)
- [ ] Step 4: Tier-2 signatures: S3, S4, S5, S7, S9
- [ ] Step 5: Emit the slop signatures subsection with each labeled clean/flagged
Count suffix hits (-ation, -ity, -ment, -ence, -ness, -ance) on abstract nouns per 100 words. >3 = flag. Example: "provides analysis of" → nominalized; "analyzes" → active.
Flag an example if it uses only generic pronouns / nouns without a specific anchor:
Parse paragraphs; count those with the shape:
60% of paragraphs following this shape → the draft reads like an AI-generated outline expanded.
Draft fragment:
In this post, we'll explore why RAG beats fine-tuning.
First, let's define RAG. It's a technique where models retrieve documents before generating. A company might use RAG for their customer service chatbot.
Second, fine-tuning involves training. A team might fine-tune to adapt style.
Third, RAG has benefits. Fine-tuning has drawbacks. It could be argued that hybrid works.
To summarize, both approaches have merit.
Detections:
Output: 5 signatures flagged (S1, S2, S4, S6, S7). Tier-1: S1, S2, S6 = 3 tier-1 slop violations.
hedge-detector. Hedge clusters flow from hedge-detector into S8 as an input, not a separate scan here.hedge-detector cluster count as S8 input.development
--- name: zettel-note description: The note-writing discipline for this vault's evergreen knowledge graph, modeled on a Zettelkasten reading companion and governed by the vault conventions. Enforces declarative-claim titles, one claim per note (atomicity), own-words prose with no block quotes, the piped [[slug|Title]] link form, the labeled link-relationship vocabulary (Confirms/Contradicts/Extends/Context/Prerequisite/Builds-on/Applies/Example-of/Contrasts-with), 3-6 links per note, and search-
development
Plans between-round FIFA World Cup Fantasy transfers — budgets the round's free transfer(s), forces out players whose nation has been eliminated, chases fixture-swing drops, upgrades on value, and decides when a rebuild is large enough to fire the Wildcard instead of spending free transfers one at a time. Ranks candidate in/out pairs by EV gain over each player's remaining survival horizon (delta xEV weighted by progression_carry) MINUS transfer cost (a free transfer is cheap, a points hit is real, churning the squad for marginal swings is a critic flag), and tags forced/fixture/upgrade priority. Emits a `transfer-plan` signal. Use when called by wc-squad-architect (whose transfer work this skill is the engine for) and by the strategists in the populate stage when their candidate is transfer-adjacent rather than a full rebuild.
testing
Reads and updates the FIFA World Cup Fantasy tournament state machine (footballfantasy/context/tournament-state.md) — the temporal backbone tracking phase (pre-tournament → group MD1-3 → R32 → R16 → QF → SF → final), budget ($100m group / $105m knockouts), nation cap (3 group, loosening in knockouts), chips remaining, surviving nations, each owned player's elimination-risk horizon, and deadlines. Validates state on load (count/feasibility checks), applies phase transitions, and appends to the append-only state log (never silent overwrite). Use to load state at the start of a run and to commit state changes after the manager makes a move.
development
Validates and persists FIFA World Cup Fantasy signal files to signals/YYYY-MM-DD-<type>.md. Checks the required frontmatter (type, round, date, emitted_by, confidence, source_urls), range-checks declared numeric signals, confirms every factual claim carries a source URL or "manager-provided", rejects unknown signal types, and refuses to persist a signal that fails validation (logging the failure instead). Keeps the inter-agent signal layer auditable so downstream agents can trust what they read and never re-derive it. Use whenever an agent or skill writes a signal.