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.

English pack en-v1.1 (23 rules) · Chinese pack zh-v1.1 beta (16 rules) · engine 3.0.0

From draft to recheck

  1. Paste. Blog posts, emails, marketing copy, essays. Language is detected automatically.
  2. Check. The rules run locally in four layers. Where two hits overlap, the earlier layer wins.
  3. 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.
  4. 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.

Strong

Vague source

en.hollow.vague_source

Why: The attribution cannot be checked as written.

Instead: Name the source, date, or remove the attribution.

BeforeExperts believe this approach works.
AfterA 2024 NIST brief found this approach works.
Strong

Generic conclusion

en.hollow.generic_conclusion

Why: The ending makes a broad claim without evidence or action.

Instead: End with a specific result, limit, or next step.

BeforeThe future looks bright.
AfterShip the pilot to three teams next quarter.
Strong

Fake certainty

en.hollow.fake_certainty

Why: Certainty language stands in for missing proof.

Instead: State the claim and the evidence; drop the certainty filler.

BeforeIt is clear that adoption will rise.
AfterAdoption rose 12% after the pilot.
Suggestion

Unsourced everyone-claim

en.hollow.unsourced_everyone

Why: Appeals to an unnamed consensus instead of a fact.

Instead: Drop the chorus claim; open with the concrete point.

BeforeAs we all know, speed matters.
AfterSpeed matters when checkout takes over three seconds.
Strong

Specificity cover-up risk

en.hollow.specificity_cover

Why: 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.

BeforeRevenue hit $4.2M. Experts believe growth is strong.
AfterRevenue hit $4.2M, up 18% year over year.

Structure · 9 rules

Template shapes: not-just-but frames, signposts, stock conclusions, dense dashes.

Strong

Not-just / but frame

en.structure.not_just_but

Why: The 'not just X, it is Y' frame often sounds rehearsed.

Instead: State the main claim directly without the fake contrast.

BeforeThis technology is not just a tool, it's a pivotal shift.
AfterThe change cuts review time in half.
Suggestion

Colon throat-clearing

Safe fixen.structure.colon_throat

Why: The phrase announces content instead of delivering it.

Instead: Delete the empty lead-in; keep the content after the colon.

BeforeHere's what you need to know: ship weekly.
AfterShip weekly.
Suggestion

Empty list intro

Safe fixen.structure.list_intro_empty

Why: A throat-clearing sentence adds no information before a list.

Instead: Remove the empty intro; keep the list items intact.

BeforeThere are several benefits:
After(keep the list; drop the intro)
Suggestion

Formulaic signpost

Safe fixen.structure.signpost

Why: The opening announces content instead of delivering it.

Instead: Begin with the concrete point.

BeforeIn today's digital landscape, teams ship faster.
AfterTeams ship faster when reviews finish same-day.
Suggestion

Adjacent parallel sentences

en.structure.adjacent_parallel

Why: Neighboring sentences share the same template.

Instead: Vary openings and sentence shape; keep the facts.

BeforeIt improves speed. It improves quality. It improves trust.
AfterIt improves speed. Quality follows when reviews shrink. Trust rises when numbers stay visible.
Suggestion

Empty rule-of-three slogan

en.structure.rule_of_three_slogans

Why: Three vague adjectives read like marketing filler.

Instead: Replace the slogan triad with one measurable claim.

BeforeBetter, faster, and stronger results await.
AfterMedian review time dropped from 4 days to 1.
Suggestion

Stock conclusion opener

Safe fixen.structure.in_conclusion

Why: The phrase signals a template ending.

Instead: Delete the stock opener; keep the closing point.

BeforeIn conclusion, ship the smaller release first.
AfterShip the smaller release first.
Suggestion

Dense em dashes

en.structure.dash_dense

Why: 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.

BeforeThe plan — including the dates — is ready — and approved.
AfterThe plan, including the dates, is ready and approved.
Suggestion

Whether-or parallelism

en.structure.positive_negative_parallel

Why: Mirrored whether/or frames often pad a thin claim.

Instead: Pick the relevant case; drop the mirrored fork.

BeforeWhether you're a beginner or an expert, this is essential.
AfterNew editors should learn the shortcut first.

Assistant leftovers · 3 rules

Chat-window phrases that don't belong in a document.

Strong

Assistant chatter

Safe fixen.artifact.chat

Why: Leftover assistant phrasing distracts from the document.

Instead: Delete the aside and address the reader directly.

BeforeGreat question! Ship weekly.
AfterShip weekly.
Strong

Model disclaimer

Safe fixen.artifact.disclaimer

Why: This reads like a model limitation rather than document content.

Instead: Verify the claim or remove the disclaimer.

BeforeAs of my last update, the API supports streaming.
AfterThe API supports streaming as of March 2026.
Suggestion

Assistant scaffolding

Safe fixen.artifact.let_me

Why: Assistant staging language is not part of the document voice.

Instead: Drop the scaffolding; start with the content.

BeforeLet me explain: we ship on Fridays.
AfterWe ship on Fridays.

Word choice · 6 rules

Word-level habits: AI diction, filler phrases, stacked hedges.

Suggestion

Wordy filler phrase

Safe fixen.lexicon.filler_phrase

Why: The phrase adds length without useful meaning.

Instead: Use the shorter alternative.

BeforeIn order to finish, cut scope.
AfterTo finish, cut scope.
Strong

Generic AI diction

en.lexicon.cliche

Why: This wording is common in polished but nonspecific drafts.

Instead: Replace it with a plain, precise word.

BeforeWe leverage a robust solution.
AfterWe use Postgres with read replicas.
Suggestion

Stock transition opener

Safe fixen.lexicon.transition_stack

Why: Sentence-initial stock transitions often mark assistant cadence.

Instead: Delete or replace with a plain connective that fits the logic.

BeforeFurthermore, costs fell.
AfterCosts fell.
Suggestion

Stacked hedging

Safe fixen.lexicon.hedge_stack

Why: Multiple qualifiers make the claim vague.

Instead: Keep one qualifier and state the evidence.

BeforeTeams could potentially rethink their work.
AfterTeams may rethink their work after the pilot.
Suggestion

Play a role filler

en.lexicon.play_role

Why: The idiom asserts importance without describing the action.

Instead: Say what the subject actually does.

BeforeCaching plays a vital role in latency.
AfterCaching cuts p95 latency by 40%.
Suggestion

Journey / unlock cliche

en.lexicon.journey_unlock

Why: Motivational cliches hide the actual mechanism.

Instead: Name the concrete change.

BeforeThis unlocks the full potential of the team.
AfterThis frees two engineers from weekly triage.

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.