Catch the signs a draft was written by AI

Em dashes, stock words, lines that fit any email. A script counts the signs it can, AI judges each check one rule, and the draft is rewritten until it passes.

You ask Claude for a follow-up email after a client meeting, and you end the prompt with "no em dashes, and don't sound like AI". Then you read every line yourself to see whether it listened.

The prompt can't do that rereading for you. Anthropic's prompting guide says to tell Claude what to do instead of what not to do. And asking the same model to check its own draft is marking your own homework. A model grading text scores its own writing higher than others' writing that people rate as equal, and models struggle to correct themselves without outside feedback.

Being told the rules isn't the same as being checked against them. So split the check. A script counts what can be counted, one small judge per rule reads for what needs reading, and a rewrite loop with a lap limit runs until the draft passes both.

Some signs you count, some you read#

Some signs that AI wrote a draft, often called tells, can be counted: em dashes, stock words like delve, stock phrases like in today's fast-paced world, and overlong sentences. A script handles these: plain code that follows the same steps on every run, so the same draft gets the same count, and running it costs nothing.

Other rules need reading, such as whether a sentence could sit in a note about anything. Each of those gets a judge, an AI step that answers one yes/no question and ignores everything else. Anthropic's guide to building agents says models generally do better when each consideration gets its own call, and a study of AI judges found they agree more when a vague score becomes yes/no questions.

What real drafts showed#

An earlier, private version of this workflow checked 54 real drafts between late July and late August 2026, with seven judges on a larger model. Every draft came from a writer that had already been given the rules and told no em dashes.

In 74 counts, its script found no em dash, no banned word and no banned phrase. The instruction worked for the countable signs, and the count is how anyone knows. The script's 9 send-backs were for length rules and over-claiming.

The judged rules were a different story. 36 of the 54 drafts passed with no rewrite, 16 needed one and 2 needed two, and none came near the lap limit. The judges sent drafts back 11 times. The busiest, for example, was the judge looking for stock sentence shapes in new words, which a word list misses: it said no 7 times in 65 passes. Those drafts came from a writer that already had the rules, so this is no pass rate for yours.

Five steps and a lap limit#

A loop sends the draft round the same steps again. A limit on laps makes sure it stops.

Workflowdemo-11-voice-check
  1. scriptAny AI tells left?
  2. mapDoes it pass each rule?
  3. scriptDid every judge say yes?
  4. ai agentRewrite the draft
  5. scriptLap by lap
  6. endYour draft passed
  7. endStill flagged after 4 laps
  8. endThe judges didn't answer
WorkflowA script counts the signs it can see, one judge per rule reads the rest, and any failure sends the draft back to the rewrite and round again.
  1. CountScript

    Checks the draft against the counted half of your rulebook. Any sign it finds sends it straight to the rewrite, so no judge is paid to read a draft the count already failed.

  2. JudgesAI

    At a count of zero, one judge per rule reads the draft at the same time, on Haiku. Each sees only the draft and its one rule, and answers PASS, or FAIL with the offending sentence and a replacement.

  3. TallyScript

    Counts the rules that failed. A judge that didn't answer counts as a fail.

  4. RewriteAI

    Gets the findings and the whole rulebook, and fixes the cause, not the word: dropping seamless and keeping the empty claim it decorated doesn't count. Then the check restarts from the count, so a fix can't quietly break a rule that passed earlier.

  5. ReportScript

    Prints a lap-by-lap table and the final draft. The scripts stop after 4 laps, so the run ends on that table either way.

The follow-up email, lap by lap#

Recorded runcount-the-tells-run-v1
Recorded runThe sample scenario run, where the count falls from 13 to 0 and the judges pass the draft on lap 2.
Run time
131 s
Cost
$0.17
Spending cap
$1
Model
Haiku
The scenario run. Cost is a subscription-equivalent estimate at list price, not a bill.

The sample is a scenario: a follow-up email a chatbot wrote for an account manager after a client meeting. It books a workshop for 23 new support hires on Thursday, October 8, and leaves two things open: Priya will confirm the budget by Friday, and the second workshop date isn't set. On lap 1 the script counted 13 signs of AI in it: 4 em dashes, 5 stock phrases, 3 banned words and 1 long sentence.

After one rewrite, lap 2 counted 0, and all 4 judges passed the draft. The report opened with "Passed on lap 2: 13 tells counted on lap 1, 0 on the last". Both open questions stayed open. This run never had a judge send the draft back, so the next section shows one that did.

“Being told the rules isn't the same as being checked against them.”

A judge needs a question it can point to#

The judges from an earlier build of this demo never passed the same sample email. Their "could be anywhere" rule was broad: could a sentence move into a note about a different group without changing a word?

One sentence, three lapsEarlier build, same sample email
LapThe judge failedIt offered instead
2"Two items still need confirmation.""Two workshop details still need confirmation:"
3"Two workshop details still need confirmation:""The budget and the date for the second workshop session both need approval."
4"The budget and the date for the second workshop session both need approval."A line asking for "your confirmation on October 19", a date the draft says isn't booked
The "could be anywhere" judge, failing its own wording lap after lap. The run stopped after 4 laps, still flagged.

The build you download narrows that rule, so a sentence with a concrete detail never counts. Each judge must copy out the sentence it objects to, or the tally counts its "no" as a pass. A broad question gives a judge room to keep finding something.

The rulebook is yours#

The rulebook is an input you edit. Add the words you overuse to its counted half. Its second half holds the judged rules, one yes/no question per line: the sample rulebook has 4, and you can have up to 12. The signs change as models change, too: Wikipedia's guide to AI writing now notes that em dashes seem less common in current AI output.

What passing doesn't mean#

Passing means none of your rules caught anything. It doesn't make the draft yours, or human. The same Wikipedia guide warns: "Please do not merely treat these signs as the problems to be fixed; that could just make detection harder." Nor do detectors settle it: OpenAI withdrew its own for low accuracy.

The judges run on the same kind of model as the writer, so they aren't free of its tastes; each just sees a single rule. A count can be wrong too: this blog's own counter for lists of three is wrong about one time in ten, so a reviewer reads each hit. And the sample was written to carry the signs, so it demonstrates the check, not how often real drafts carry them.

Try it on your own draft#

Open the download in Claude Code or Cowork and run the scenario as it comes. You get the count on each lap, the judges' verdicts, the lap-by-lap table and the final draft, all under a $1 spending cap. Then paste your own draft and edit the rulebook. Swap the input and this is your check for a cover letter, an email or a post.

Download this workflowEvery file it needs, ready to run.
  • demo-11-voice-check.workflow.yaml23.7 KB
  • README.md1.2 KB
Download .zip2 files · 24.9 KB

Predictable workflows from unpredictable AI