The Cleanup Prompt: Make AI Writing Sound Less Like AI
One prompt, run on a loop against my blog repo, strips out the tells that make writing sound machine-generated. Copy it below. It works on human writing too.
One prompt, run on a loop against my blog repo, strips out the tells that make writing sound machine-generated. Copy it below. It works on human writing too.
AI writing has tells, and tired human writing has most of the same ones. I run a single prompt on a loop against my blog repo to strip them out, and the full prompt is below for you to copy.
You can spot it in four seconds. Em dashes clustered three to a paragraph. "It's not just X, it's Y." Every section the same length. A conclusion that recaps the introduction nobody needed recapped. The word "delve" doing honest work nowhere.
Some of my drafts start in a model. Others get typed at 11pm after the kids are asleep. The tells showed up in both, which was humbling, because most of the tells are just lazy structure, and lazy structure was never exclusive to machines. So I stopped editing by feel and wrote a prompt that does it on a loop.
I used it most recently while merging three AI research reports into a post for this blog. The consolidating agent got this prompt as part of its instructions, and the draft came back needing far less de-roboting than usual.
I run it inside Claude Code against my blog repo. Each run cleans exactly one post, which keeps the diff small enough to actually review. The prompt makes the agent do four things in order.
It greps the repo for known tells and ranks candidates by density, so the worst offender gets picked instead of the model's favorite. It reads two or three of my strongest posts before touching anything, because a real voice example beats a page of voice adjectives. It audits the chosen post and lists the problems before rewriting, which keeps the edit targeted instead of becoming a full regeneration. And it finishes by showing before-and-after examples, so I can reject changes line by line.
Each cleaned post gets cleanupDone: true in its frontmatter, and the prompt skips anything already marked. Run it enough times and the repo converges. Stop running it and nothing breaks.
Swap the file paths and the voice-reference posts for your own. Everything else transfers.
You are editing blog posts on nathanfennel.com to remove AI writing artifacts while preserving my voice, facts, and MDX structure.
## Task
1. **Pick one blog post** from `src/content/blog/*.mdx` that likely has the most AI residue. Use this selection process:
- Grep for common AI tells (see list below)
- Prefer posts that score high on multiple signals, not just one word
- Skip posts that already read personal/narrative (e.g. `stop-tolerating-start-liking.mdx`, `california-wedding-season.mdx`, `three-step-apology.mdx`) unless grep shows heavy artifact density
- Good candidates to check first: tutorial/how-to posts, AI tooling posts, and anything with generic enthusiasm or essay-shaped structure
- Tell me which post you picked and why before editing
2. **Read 1–2 of my stronger posts** for voice reference before editing:
- `src/content/blog/stop-tolerating-start-liking.mdx`
- `src/content/blog/california-wedding-season.mdx`
- `src/content/blog/three-step-apology.mdx`
Match this voice: direct, specific, opinionated when appropriate, conversational but not sloppy. I use first person. I tell stories and give concrete examples. I don't sound like a corporate blog or a helpful assistant.
3. **Audit the chosen post** and list the top issues (brief bullet list) before rewriting.
4. **Rewrite the prose** to sound less AI-generated. Apply these rules:
### Remove or replace (high priority)
- Formal connectors: Moreover, Furthermore, Additionally, Consequently, Nevertheless, That being said
- Filler: "It is worth noting", "It's worth noting", "In today's digital age", "When it comes to", "In the realm of", "Let's dive in", "Here's the thing"
- Hollow vocabulary: delve, leverage, utilize, navigate (when not literal UI), foster, enhance, underscore, robust, pivotal, multifaceted, comprehensive, tapestry, landscape (when metaphorical)
- Announced conclusions: "In conclusion", "To summarize", "Overall," as section openers
- Meta-commentary that explains what the article will do instead of doing it
- AI style punctuation: Emdashes, semicolons, colons
- Overly contrasting language: "It's not X, it's Y.", "This is why it matters.", "Here's the important part.", "Here's the kicker."
### Structural fixes
- Vary sentence length — mix short punchy lines with longer ones
- Cut the first paragraph if it only previews the article; start with the second paragraph instead
- Replace recap conclusions with one sharp closing thought or concrete next step
- Reduce "rule of three" triads and negative parallelisms ("It's not X — it's Y", "Not X. Not Y. Just Z.") unless they're genuinely my argument
- Cut 10–20% of word count where the prose over-explains
- Don't make every section equal length — spend more words on the interesting parts
### Voice fixes
- Add specificity: names, paths, dates, exact tools, real mistakes, personal preferences
- Take a stance — don't hedge everything into neutral corporate tone
- Replace vague attributions ("many experts", "studies show") with either a citation or "In my experience…"
- Read-aloud test: if a sentence sounds like a monotone assistant, rewrite it
### Do NOT change
- Frontmatter fields (`title`, `description`, `date`, `tags`, `featured`, `isPrivate`, etc.) unless clearly broken
- MDX components and their props: `<TwoSents>`, `<YouTubeEmbed>`, `<CloudflareImage>`, etc.
- Links to other posts on my site
- Factual claims, code snippets, step order in tutorials (unless fixing clarity)
- Tutorial numbered lists where steps are the point — but humanize the surrounding prose
### False positives (don't over-correct)
- One em dash is fine; only reduce when they're clustered and formulaic
- Technical terms in engineering posts are fine
- Literal uses of words like "landscape" in travel posts are fine
5. **After editing**, show me:
- Which post you chose and why
- A before/after summary of the main changes (5–8 bullets)
- 2–3 example rewrites (original → revised) for the worst offenders
## Reference: AI tells checklist
Search the file for these patterns and fix clusters, not isolated instances:
- Low burstiness (all sentences similar length)
- Essay outline shape (intro preview → equal sections → long recap conclusion)
- People-pleasing tone ("incredibly powerful", "game-changing" without evidence)
- Copula dodges: "serves as", "stands as", "marks" instead of "is"
- Significance inflation: "testament", "broader implications", "plays a crucial role"
- Generic prose that could appear on any tech blog with my name swapped out
- Unnecessary contrast: "<X> isn't the problem, <Y> is." "<X> is bad, <Y> is good." "<X> fails. <Y> succeeds."
Start by grepping `src/content/blog/` for AI tells, ranking candidates, favor recency if multiple candidates have similar ranks. Don't include any posts where `cleanupDone` is `true`.
When you're done, mark `cleanupDone: true`.
If you adapt this, keep four pieces.
The voice references. Pointing at real posts I'm proud of does more than any list of adjectives ever could. "Direct, conversational, opinionated" describes half the internet. Three specific files describe me.
The audit step. Forcing the agent to list issues before touching anything turns a rewrite into a code review. Without it, models regenerate the whole post in their default register, and you've traded one flavor of robot for another.
The do-not-change list. Frontmatter, components, code, facts, step order. Without a hard fence, the model will helpfully improve your benchmark numbers into fiction.
The false-positives section. Over-correction is its own tell. One em dash is a choice. Five in a paragraph is a fingerprint. An agent told to kill every single one produces prose with a different uncanny smell, so the prompt targets clusters, not instances.
The tells aren't proof a machine wrote something. They're proof nobody edited it. Models just happen to be the most prolific unedited writers ever built, so we learned to recognize the pattern from them.
Copy the prompt, swap the paths, and point it at the post you wrote entirely by hand last month. That one stings.