# Slop Edit

> Line-edit any draft so it stops reading as AI-written. A mechanical lint catches the surface patterns, a sentence-by-sentence pass fixes agentless and vague constructions, and every reviewer correction becomes a rule.

Slop Edit is an AI skill for sales & marketing and creative & design teams that you can use in Claude Code, Codex, or type.com.

- Skill page: https://type.com/library/skills/slop-edit
- Raw SKILL.md: https://type.com/library/skills/slop-edit/SKILL.md
- Created by Barbara Jovanovic from Startup Cookie
- Updated: October 30, 2026
- Package: 4 files

## What it does

- Catches 40+ AI-prose patterns automatically: em dashes, "it's not X, it's Y", signposting, engagement-bait closers, emoji and hashtag overload, uniform sentence lengths.
- A construction checklist that goes beyond word lists: who does the verb, what the sentence literally says, whether the opener stands alone.
- A call-outs file turns each reviewer correction into a permanent rule, so nobody has to give the same note twice.
- Add your own house bans with a simple rules file, and get JSON output for pipelines.

## Before you start

- Python 3 (standard library only) for scripts/slop_lint.py

## How to use Slop Edit

1. **type.com:** Choose Use Skill to add Slop Edit to your type.com workspace.
2. **Claude Code:** Download the skill and extract it into ~/.claude/skills/slop-edit/ (or .claude/skills/slop-edit/ in a project). Then ask Claude to use Slop Edit.
3. **Codex:** Download the skill and extract it into ~/.agents/skills/slop-edit/ (or .agents/skills/slop-edit/ in a repository). Then ask Codex to use Slop Edit.

## Frequently asked questions

### What is Slop Edit?

Slop Edit is an AI skill for sales & marketing and creative & design teams that you can use in Claude Code, Codex, or type.com.

### What does Slop Edit do?

Line-edit any draft so it stops reading as AI-written. A mechanical lint catches the surface patterns, a sentence-by-sentence pass fixes agentless and vague constructions, and every reviewer correction becomes a rule.

### What do I need to use Slop Edit?

Python 3 (standard library only) for scripts/slop_lint.py.

### Can I use Slop Edit in Claude Code or Codex?

Yes. Slop Edit is a standard Agent Skills folder with a SKILL.md file. Download it and extract it into ~/.claude/skills/ for Claude Code or ~/.agents/skills/ for Codex.

### Who created Slop Edit?

Barbara Jovanovic from Startup Cookie created Slop Edit. The type.com team reviews every skill before it is published in the Skills Library.

## Example output

Example output from a sample run. Unless the example says otherwise, company names and figures are sample data.

````markdown
**Input draft**
```
Here's the thing — security isn't a checkbox, it's a mindset.

The part I keep coming back to is how burnout shows up in session. Someone gets woken up at 3am and nobody checked. It really matters. Let's dive in.

What do you think? 🚀 #security #startups #ai #devops
```

**Lint** (`python3 scripts/slop_lint.py draft.md`)
```
WARN      doc  4 hashtags. Use 0-3 relevant tags.  [#security #startups #ai #devops]
ERROR     1:1  Filler set-up line.  [Here's the thing]
ERROR    1:18  Em dash. Use a comma, a full stop, or rewrite the sentence.  [—]
ERROR    1:29  'Isn't X, it's Y' mirror construction.  [isn't a checkbox, it's]
ERROR     3:1  Faux-thoughtful lead-in.  [The part I keep]
ERROR    3:12  Faux-thoughtful lead-in ('keep coming back to').  [keep coming back to]
ERROR    3:47  'Shows up' (vague). Say what happens, to whom.  [shows up]
WARN     3:76  Get-passive. Name the actor.  [gets woken]
WARN    3:101  'Nobody X' construction.  [nobody checked]
WARN    3:120  Intensifier adverb. Cut or replace with a fact.  [really]
ERROR   3:127  'Matters' (empty emphasis).  [matters]
ERROR   3:136  Signposting. Start with the content.  [Let's dive in]
WARN      5:1  Engagement-bait closer.  [What do you think]
WARN     5:20  Emoji. Remove unless the account's real posts use them.  [🚀]

8 error(s), 6 warning(s)
```

**Construction-pass changes**
- "Someone gets woken up at 3am and nobody checked" → "The on-call engineer woke up at 3am to an alert that had fired twice the week before." (named actor, literal event)
- "security isn't a checkbox, it's a mindset" → cut: no fact behind it.
- Closing question and hashtags → cut; post ends on the fact.

**Edited draft (0 errors, 0 warnings)**
```
The on-call engineer woke up at 3am to an alert that had fired twice the week before.

Both earlier alerts were closed as noise. The third one was a real login attack, and it ran for forty minutes before anyone looked.
```

**New call-out logged**
| # | Reviewer's words | Pattern | Rule |
|---|---|---|---|
| 7 | "'nobody checked' is generic" | 'Nobody X' | Name who did or didn't, and what. |
````

## Related skills

- [AI List Inclusion Outreach](https://type.com/library/skills/ai-list-inclusion-outreach.md): Get named on the "best X" lists that ChatGPT, Claude, Perplexity and Google AI answers already cite for your buyers' questions. Ranks the lists, drafts a three-line request for each, and tracks follow-ups.
- [Transparent Lower Third](https://type.com/library/skills/transparent-lower-third.md): On-brand animated name tags for testimonial videos, delivered as transparent ProRes 4444 files that drop straight onto a CapCut or Premiere timeline, with brand pulled from your site and a frame-by-frame check.
- [Event Post Fact-Check](https://type.com/library/skills/event-post-fact-check.md): Draft post-conference posts with every speaker, affiliation, session, sponsorship, photo and hashtag checked against the official program, keeping what the program proves separate from what someone remembers.
- [Social Batch Review Calendar](https://type.com/library/skills/social-batch-review-calendar.md): Replace PDFs and chat recaps with a Type app your client can actually review: a weekly calendar with each post's first paragraph and full image, copyable captions, downloadable visuals, and the approver on every card.
- [Reference Style Model](https://type.com/library/skills/reference-style-model.md): "We want our LinkedIn to sound like them." Turns a reference company's public posts into a style spec: numbered moves, each proved by a real line, and a pre-publish checklist. It transfers form, never their facts.
- [Signal-Routed Allbound Campaigns](https://type.com/library/skills/signal-routed-allbound-campaigns.md): Build signal-based multi-channel outbound campaigns that route prospects across email, LinkedIn, and paid ads based on intent signals.

## Package files

- SKILL.md
- references/callouts-template.md
- references/construction-rules.md
- scripts/slop_lint.py

## SKILL.md

````markdown
---
name: slop-edit
description: Line-edit a draft so it stops reading as AI-written. Use before delivering any post, caption, blog article, email or page copy, or when someone says a draft "sounds like AI", "is slop", "is vague" or "is corporate". Runs a mechanical lint, then a construction-level hand pass, and appends every new reviewer correction to a call-outs file so it never recurs.
---

# Slop Edit

A ban list alone does not make prose sound human. Blacklists never converge: block one phrase and the model reaches for its nearest sibling. This skill works in three layers:

1. **Mechanical lint** (`scripts/slop_lint.py`). Catches the words and shapes a regex can see.
2. **Construction pass** (by hand, sentence by sentence). Catches what a regex can't: agentless sentences, vague referents, openers that need context.
3. **Call-outs loop.** Every correction a reviewer makes is logged in their words and becomes a rule the same session.

Passing the lint does not mean the draft is clean. Never call a draft "slop-free" because a word search came back empty.

## Inputs

- The draft (any format; paste or file).
- Optional: the project's `callouts.md` (reviewer corrections, see `references/callouts-template.md`). If one exists, read it **before** editing.
- Optional: a voice reference (approved posts by the same author). If present, the edit must move toward it, not toward a generic "clean" register.

## Step 1. Read call-outs first

If `callouts.md` exists, read every row. Each row is a past correction in the reviewer's own words with its replacement. Treat them as hard bans for this draft.

## Step 2. Run the lint

Save the draft to a file and run:

```bash
python3 scripts/slop_lint.py draft.md
# add project-specific bans:
python3 scripts/slop_lint.py draft.md --extra-bans callouts-bans.txt
# JSON output for automation:
python3 scripts/slop_lint.py draft.md --json
```

Use Type's managed execution tool to run the script in the sandbox. The script exits non-zero when it finds errors. Fix every **error**. Read every **warning** and either fix it or note why it stays.

## Step 3. Construction pass (by hand)

Go sentence by sentence. For each sentence ask the questions in `references/construction-rules.md`. The six that catch the most:

1. **Who does the verb?** A person or a named team does the action. Software, "the platform", "the system", a report, a letter or a test never does the action. Rewrite "someone gets woken up" as "the on-call engineer wakes up at 3am".
2. **What does it literally say?** If the answer needs a second sentence, rewrite the first.
3. **Could a reader draw it?** Vague nouns ("the thing", "whatever wins", "what gets in the way") and loose verbs ("roll", "let through", "calling the thing") get replaced with the named object and the literal step.
4. **Does the opener stand alone?** Someone scrolling past has none of your context. Every term the first line leans on is defined in plain words first, or doesn't appear.
5. **Does every pronoun have a named antecedent?** "They", "it", "this", "that's what" with nothing before them get replaced with the noun.
6. **Is anything invented?** No made-up scenes, feelings, quotes, numbers or client details put in a real person's mouth. A sourced scene is allowed. A scene made up to sound real is not.

## Step 4. Change only what was flagged

When a reviewer flags specific lines, edit those lines and leave the rest alone. Rewriting the whole draft in response to one comment destroys approved text and introduces new problems.

## Step 5. Log new call-outs the same session

When a reviewer flags something new, append a row to `callouts.md` before you send the revision:

| # | Their words (verbatim) | Pattern | Replacement / rule | Date |
|---|---|---|---|---|

If the same pattern is flagged twice, promote it to a lint rule (add it to the `--extra-bans` file) and mark the row **recurring**. If a project has several writing skills (founder posts, company page, blog), copy the new row into every one in the same session.

## Step 6. Report

Return:
- the edited draft,
- lint result after edits (`0 errors, N warnings` plus each remaining warning with a one-line reason),
- the list of construction-pass changes (before → after, one line each),
- any new call-out rows added.

## What not to do

- Don't swap one AI pattern for another (removing "it's not X, it's Y" and writing "rarely X. They Y." instead).
- Don't add emoji, hashtags, rhetorical questions or a punchline close to "add personality".
- Don't shorten a post to nothing to escape the lint. Length follows the platform and the author's real posts.
- Don't fabricate first-hand detail to sound human.

## Files

- `scripts/slop_lint.py`: mechanical lint (Python 3, standard library only).
- `references/construction-rules.md`: the full hand-pass checklist with before/after pairs.
- `references/callouts-template.md`: the call-outs file format, seeded with generic examples.
````
