Tool Tuesday: The 247-Line Script That Rejects My AI's Copy
My AI editor wrote a headline for Monday's post. My other robot threw it out.
It was 71 characters. The limit is 70. No appeal.
That robot is a free script called voice-lint. It's 247 lines, it uses nothing but what ships with Node, and every word my AI team wants to publish has to get past it first. Blog posts, newsletters, build logs. It answers with one number. 0 means ship. 1 means rewrite.
Why I needed a bouncer
I once described Polsia as "AI Slop" backwards. Pretty funny. Less funny when the slop has your name on it.
My blog is written with my AI team, under my byline. Language models have tells. You've read them. The same fancy words, the "it's not X, it's Y" sentences, the dashes stacked like poker chips. One of those in a post and a reader smells the robot and leaves.
Last year, writing five days a week was melting my brain. That's why this daily blog is written with the team. But 30 posts a month is a mountain of proofreading, so the rules had to live in code.
What it bans
I can't even type the worst offenders in this post. The linter would bounce it. So here they are in a code block, the one place it doesn't look:
delve · tapestry · game-changer · seamless · robust
crucial · pivotal · empower · let's dive in · in conclusion
That's 10 of the 46 slop phrases on the list. Then it checks a few more things:
- 12 claims we never make. Promises of easy money and sure things. This is a poker community. Nobody here gets promised a win rate.
- Em dashes. Two per 300 words, max. Models sprinkle them everywhere. I use periods and parentheses.
- Lazy openers. A post can't start with "Did you know" or "Imagine if." Start on the action.
- Headlines over 70 characters. Long headlines are summaries in a trench coat.
- Private stuff. Email addresses, API keys, phone numbers. A post with a key in it never leaves the building.
The first version went in on October 20, the day this site relaunched. My SlotMaps and Table 1 teams already had their own copy rules, so we bolted theirs on that same day.
The hard exit code is the whole trick
A style guide is a suggestion. A seat can read it, nod, and ignore it.
An exit code can't be argued with. The rule in my company's charter: fix the writing, never the linter. Only the CEO seat can loosen a rule, and it has to log why, with the drafts that got dropped as evidence.
Two weeks in, nobody has loosened a single rule. The only change since launch made it stricter: a ban on calling this community "the table," which I called cringe on day one.
It's also fast. My editor seat clocked it on all 14 posts this blog has published: five hundredths of a second. Hard to find a cheaper employee.
It even bounced the first draft of this post. My editor seat listed three of the banned money promises in a bullet point, in quotes, to make fun of them. The script doesn't do irony. Exit 1. The seat moved them out, and you're reading the rewrite.
And it's not perfect. On Monday's headline it reported 73 characters, not 71. It counted the quote marks. Even the cop has a bug. 😅
The catch
A linter can't tell if a sentence is true.
Every post here has passed it. My CEO seat has still had to fix lint-clean posts at least five times since October 24. A quote nobody could trace. A seat count that was off by one. A line about refunds that was only true if a setting was switched on. The script waved every one of them through.
It can't tell if a sentence is funny, either. Last Saturday I read our X posts and called them "really cringe. Like obv AI slop." The problem was too many cute words crammed into 280 characters. The fix was a new rule in the voice guide: one colorful word per post on X, max.
So the linter is the floor, not the ceiling. On top of it sits a voice guide built from my real newsletters, and a 12-point checklist every post answers before it ships.
Steal this
You don't need my script. You need your own list.
- Read the last five things an AI wrote for you. Circle every word you'd never say out loud.
- Put 20 of them in a file. Add your own banned promises.
- Write a tiny script that exits 1 if it finds one. Any AI coding tool can write it for you.
- Make it a gate, not a warning. Nothing publishes on a 1.
Your list will look nothing like mine. That's the point. It's your voice, not mine.
Want mine anyway?
voice-lint goes into the Agent-Org Kit: the charter, the org generator, the runner and the owner inbox my companies actually run on, with a setup guide. It'll be $149, one time. It's not for sale yet. The waitlist is free, and you only hear from us when it opens.
R2F is a community for poker players building startups, robots optional. What's one word you'd ban from your own writing tomorrow? Tell me in the discussion thread.
— Art
Written with the R2F AI team. How that works.
Post it and get feedback from players who’ve been there.
Join before Nov 20 and your profile carries the ♠ Founding member badge.
Comments