Put AI on the verification side (critique), not the generation side (ghostwrite).
You use AI to write PR descriptions, docs, posts, and weekly reports every day—yet the output often carries that unmistakable "fake" AI smell: over-hedging, formulaic parallelism, boilerplate openings and closings. The problem isn't the model's capability, it's the engineering method: most people cram "writing" into a single prompt ("write me an article about X, professional and concise"), and get back the mean of the distribution—the "safe mediocrity" that RLHF tuned in. This issue engineers writing: compile your voice into a reusable spec, detect and strip the LLM's fingerprints, drive long-form text with an outline-first hierarchical prompt, and pin AI to the role of editor/critic rather than author. The core counter-intuition: the ceiling on AI's writing quality is set not by how well it writes, but by whether you place it on the verification side or the generation side. Judging whether a sentence is weak is easy (critique); writing a great sentence from scratch is hard (generation)—the former is its strength, the latter is where it goes off the rails.
When people describe the style they want, they write "professional, concise, punchy"—adjectives that carry almost zero information for the model, because everyone's notion of "concise" sits near the model's prior mean, so it can only regress to its learned "generic professional tone." The Examples > Rules lesson from Day 9 hits its most extreme case with voice: abstract adjectives never beat concrete samples. Anthropic's multishot docs recommend 3-5 examples to anchor output form; voice is the same—feed 3-5 representative passages you wrote, have the model reverse-extract operable features (sentence-length distribution, active/passive ratio, paragraph rhythm, punctuation and connective habits, use of lists/emoji), and crystallize them into a voice.md spec that you inject on every write. The point is to turn "style" from a vague feeling into a declarable, reusable, diffable artifact.
# Run once: reverse-extract a voice spec from samples (save as voice.md)
Below are 5 representative passages I wrote (same genre), wrapped
in <sample>:
<sample>...paste your real paragraphs...</sample>
Reverse-analyze my writing style and output an operable style spec.
Write only executable rules, no adjectives like "professional/vivid". Cover:
- Sentence length: average words, long/short rhythm (give numbers)
- Syntax: active vs passive, use of rhetorical questions/dashes/semicolons
- Structure: paragraph length, conclusion-first or not
- Diction: preferred connectives, avoided words, jargon density
- Forbidden zones: expressions I never use (list what you observe)
Hand-check the output (delete what the model invented, add what it missed) and save it as voice.md. This spec is more precise than any adjective, and you can version-control it—keep a separate one per genre (blog / report / technical doc).
Kobak et al. (2024) analyzed 14 million PubMed abstracts and found that after ChatGPT appeared, a batch of "flowery words" spiked off a cliff—"delve" rose ~28×, with "intricate" and "meticulous" surging in step. These are objective evidence of the AI smell: byproducts of RLHF pushing the model toward "safe mediocrity"—over-hedging ("it's worth noting," "to some extent"), excessive transitions, three-beat parallelism, boilerplate openings ("in today's fast-paced…") and closings ("in conclusion…"). Simon Willison named this mass-produced, low-quality, unwanted AI output slop (a 2025 word of the year for several dictionaries). The key realization: this is a distribution-level bias, not something a single prompt fully clears—you can lower the frequency, but to cure it you must use §1's real samples to drag the whole output distribution away.
# A slop filter to append at the end of any writing prompt
Hard constraints:
1. Banned words/phrases: delve, it's worth noting, in today's/in this era,
in conclusion, not only...but also, unlock (potential), empower, embrace (change)
2. No preamble ("Sure, here's...") and no postamble (summary closing)
3. Every paragraph has at least one concrete anchor: a number,
an example, or a proper noun
4. Cut every transition sentence that adds no information; prefer short over long
5. Don't stack parallelism for momentum—one concrete example beats three abstract adjectives
Rule 3 is the most effective—forcing concreteness, because slop is fundamentally emptiness: with no information to fill, the model pads with ornate diction and parallelism. Force it to drop numbers and examples and slop has no ground to stand on.
Asking the model to write 3,000 words in one shot almost inevitably hits three traps: lost-in-the-middle (diluted mid-section points), structure collapsing midway, and terminology/style drift. The right approach splits it into three layers, each an independent prompt with independent verification (echoing Day 5: use a workflow when you can, not an agent—it's controllable, debuggable, evaluable). Anthropic's chain-prompts docs are explicit: splitting complex tasks into chained subtasks is far steadier than one mega-prompt. The three layers each have a job:
def write_long(topic, voice_md, banned):
outline = llm(f"Outline for '{topic}': section titles + one-sentence thesis each, "
"no body text.")
review(outline) # human-review the skeleton—cheapest verification
sections, prev = [], ""
for sec in outline.sections:
draft = llm(f"Global outline: {outline}\nPrev section end: {prev[-200:]}\n"
f"Write only this section: {sec}. Continue from above, no repeats.")
sections.append(draft); prev = draft
full = "\n\n".join(sections)
return llm(f"Polish per this voice spec, run each sentence through the slop list:\n"
f"{voice_md}\nBanned: {banned}\n\nText: {full}")
This applies the evaluator-optimizer pattern (Anthropic Building Effective Agents) to writing. Key insight: critique is a verification problem, generation is an open-ended one. Judging "which sentence here is weakest, and why" is easy and reliable for the model; generating a great full piece from scratch easily goes off the rails—with sycophancy as a bonus: ask it to evaluate its own draft and it tends to say "looks good." So using it as a critic (point out weaknesses, propose fixes) is far more reliable than as an author (write for you). The crucial side effect: a human-written skeleton naturally preserves voice—voice loss is rooted precisely in letting AI generate from scratch. You supply the ideas and structure, it amplifies and polishes; only then is the division of labor right.
# self-critique: AI as editor, not ghostwriter; touch only what needs touching
You are a strict editor, not a ghostwriter. For the passage below:
1. Point out the 3 weakest sentences, with why each is weak
(empty / redundant / logical leap)
2. Give diff-style edits: <del>original</del> → <ins>revised</ins>
3. Change only those 3 sentences, keep the rest verbatim—don't rewrite
4. Don't praise my writing—give criticism directly
<draft>...your paragraph...</draft>
Rules 3 and 4 are the linchpin: without "change only the weak sentences," the model will rewrite everything (erasing your voice along the way); without banning praise, it dilutes criticism with sycophancy. You want a surgical edit, not a ghostwrite.
Chain the four points into a pipeline you can reuse for weekly reports and blog posts, aiming for output that passes a "Turing test"—others can't guess which piece was AI-assisted:
voice.md; one per genre.voice.md + global outline + slop banned-list.The essence of this flow isn't "let AI write for you"—it's always keeping AI on the verification side: you generate the idea skeleton, it does the amplify/critique/polish work where "judging right from wrong is easier than creating from scratch." That way the output has both your voice and AI's throughput.