How Naturable works
Naturable runs a versioned set of open rules in your browser. Each rule names a writing pattern, explains why it reads as AI, and suggests what to do instead. You decide every edit.
From draft to recheck
- Paste. Blog posts, emails, marketing copy, essays. Language is detected automatically.
- Check. The rules run locally in four layers. Where two hits overlap, the earlier layer wins.
- Edit and compare. Each highlight shows the rule and the reason. Apply, ignore, or turn a rule off. Safe fixes only remove filler and never change numbers or names.
- Recheck. The editor compares your draft with the first version and updates the score.
One score, five dimensions
The score (0–100) combines clarity, specificity, structure, artifact-free and rhythm. Strong findings cap it. It's a writing-quality guide for editing: it is not a probability that AI wrote the text, and it says nothing about how any detector will respond.
Local by design
The rule engine is plain JavaScript that runs in the page. Your text is never sent to a server. The editor saves drafts in your browser's local storage, and you can clear them at any time.
The rules
Every English rule is listed below with its id. The checker, the editor and the Chrome extension link here when they flag something. Rule data is licensed CC BY 4.0 and the code MIT; the source is on GitHub. Every rule's before example must trigger it and its after example must not; that is tested on every change.
Hollow claims · 5 rules
Claims without substance: vague sources, generic conclusions, fake certainty. Checked first, because they matter most.
Vague source
en.hollow.vague_sourceWhy: The attribution cannot be checked as written.
Instead: Name the source, date, or remove the attribution.
Generic conclusion
en.hollow.generic_conclusionWhy: The ending makes a broad claim without evidence or action.
Instead: End with a specific result, limit, or next step.
Fake certainty
en.hollow.fake_certaintyWhy: Certainty language stands in for missing proof.
Instead: State the claim and the evidence; drop the certainty filler.
Unsourced everyone-claim
en.hollow.unsourced_everyoneWhy: Appeals to an unnamed consensus instead of a fact.
Instead: Drop the chorus claim; open with the concrete point.
Specificity cover-up risk
en.hollow.specificity_coverWhy: A hollow summary sits next to concrete figures that should stay visible.
Instead: Keep the numbers and names already in the draft; do not replace them with empty summary.
Structure · 9 rules
Template shapes: not-just-but frames, signposts, stock conclusions, dense dashes.
Not-just / but frame
en.structure.not_just_butWhy: The 'not just X, it is Y' frame often sounds rehearsed.
Instead: State the main claim directly without the fake contrast.
Colon throat-clearing
Safe fixen.structure.colon_throatWhy: The phrase announces content instead of delivering it.
Instead: Delete the empty lead-in; keep the content after the colon.
Empty list intro
Safe fixen.structure.list_intro_emptyWhy: A throat-clearing sentence adds no information before a list.
Instead: Remove the empty intro; keep the list items intact.
Formulaic signpost
Safe fixen.structure.signpostWhy: The opening announces content instead of delivering it.
Instead: Begin with the concrete point.
Adjacent parallel sentences
en.structure.adjacent_parallelWhy: Neighboring sentences share the same template.
Instead: Vary openings and sentence shape; keep the facts.
Empty rule-of-three slogan
en.structure.rule_of_three_slogansWhy: Three vague adjectives read like marketing filler.
Instead: Replace the slogan triad with one measurable claim.
Stock conclusion opener
Safe fixen.structure.in_conclusionWhy: The phrase signals a template ending.
Instead: Delete the stock opener; keep the closing point.
Dense em dashes
en.structure.dash_denseWhy: Frequent em dashes are a common chatbot habit. A few are fine; a steady stream reads as a template.
Instead: Swap some dashes for a comma, period, colon or parentheses. Keep the ones doing real work.
Whether-or parallelism
en.structure.positive_negative_parallelWhy: Mirrored whether/or frames often pad a thin claim.
Instead: Pick the relevant case; drop the mirrored fork.
Assistant leftovers · 3 rules
Chat-window phrases that don't belong in a document.
Assistant chatter
Safe fixen.artifact.chatWhy: Leftover assistant phrasing distracts from the document.
Instead: Delete the aside and address the reader directly.
Model disclaimer
Safe fixen.artifact.disclaimerWhy: This reads like a model limitation rather than document content.
Instead: Verify the claim or remove the disclaimer.
Assistant scaffolding
Safe fixen.artifact.let_meWhy: Assistant staging language is not part of the document voice.
Instead: Drop the scaffolding; start with the content.
Word choice · 6 rules
Word-level habits: AI diction, filler phrases, stacked hedges.
Wordy filler phrase
Safe fixen.lexicon.filler_phraseWhy: The phrase adds length without useful meaning.
Instead: Use the shorter alternative.
Generic AI diction
en.lexicon.clicheWhy: This wording is common in polished but nonspecific drafts.
Instead: Replace it with a plain, precise word.
Stock transition opener
Safe fixen.lexicon.transition_stackWhy: Sentence-initial stock transitions often mark assistant cadence.
Instead: Delete or replace with a plain connective that fits the logic.
Stacked hedging
Safe fixen.lexicon.hedge_stackWhy: Multiple qualifiers make the claim vague.
Instead: Keep one qualifier and state the evidence.
Play a role filler
en.lexicon.play_roleWhy: The idiom asserts importance without describing the action.
Instead: Say what the subject actually does.
Journey / unlock cliche
en.lexicon.journey_unlockWhy: Motivational cliches hide the actual mechanism.
Instead: Name the concrete change.
Chinese pack (zh-v1.1, beta)
The Chinese rules are a separate set, not a translation: 段首零回指评论、拟人化理想人格喻体、冒号滥用·空转句引列表、冒号滥用·提示语、翻案腔(不是……而是……)、起首语填充、序数词当小标题、破折号过密、相邻句结构同款、顿号罗列过密、翻译腔·被动堆叠、翻译腔·的字链、翻译腔·们字滥用、翻译腔·进行时垫话、翻译腔·之一堆叠、助手寒暄.
Use the rules elsewhere: Agent Skill and CLI
The same rules ship as an Agent Skill for Claude, Codex and other agents. The Skill lists hits with their location and reason first, and rewrites only the parts you approve. It never offers to get text past a detector.
From a terminal:
# readable report npx naturable-rules draft.md # JSON, for tools and agents npx naturable-rules draft.md --json # print the text with safe fixes applied npx naturable-rules draft.md --fix
Pipe text in with --purpose email or --lang zh to change the weighting or language.
For Claude Code, copy the skill/ folder from the rules repository into ~/.claude/skills/naturable-writing-check/. Get it on GitHub.
What it isn't
Naturable isn't an AI detector and doesn't help text evade one. A flag is a style signal, not evidence of who wrote something. See what these signs can't tell you.