Methodology — open, inspectable, imperfect
ScanForAI runs the open-source aiscan engine; everything
below is its actual scoring logic.
Every formula below ships in the source. If you can't inspect a
detector's method, you can't contest its output; here you can do both.
Tier 1 — stylometric heuristics
Each signal maps a measurement to 0..1 (1 = machine-leaning) and carries a weight
(its reliability). The overall score is the weighted average, ×100. Signals abstain
(weight 0) when the text is too short to judge.
- burstiness (weight 3.0) — coefficient of variation of sentence
lengths. Humans mix short and long sentences (CV ≈ 0.5–0.9); models write
uniformly (CV ≈ 0.2–0.4). The strongest pure-text signal.
- banned_phrases (2.5) — density of curated AI-ese phrases
("it's worth noting", "delve", "testament to"…), per 1,000 words.
- contractions (2.0) — contraction rate vs. contractible
material; unedited model prose under-contracts.
- antithesis (2.0) — the "not just X, it's Y" cliché structure.
- conjunction_starts (1.5) — humans open sentences with
But/And/So; models rarely do.
- typography (1.5) — em-dash flood, curly quotes, ellipsis glyphs.
- ai_words, vocab_diversity,
opening_repetition, uniformity (1.0 each) —
lexicon hits, rolling type-token ratio, repeated sentence openers, near-equal
adjacent sentence lengths.
- clause_train (2.0) — longest run of consecutive 25-word-plus,
multi-comma sentences. Complementary to burstiness: a heavy long tail
raises the CV (reads "human" there) while the prose still marches in
same-shaped comma-trains.
- simile_tail (1.5) — density of the ", the way X ..."
comparison frame; model narrative repeats one pet construction.
- long_tail (1.5) — share of sentences over 40 words plus any
over 55; edited prose keeps the tail under ~5–8%.
- echo_grams (1.5) — distinct content five-word phrases
repeated 3+ times in one text; models re-use their own scaffolding.
- aphorism_density (1.5, genre-gated) — share of short
definitional/reversal epigrams ("An empty line is X. An initialed blank is Y.")
plus a bonus for 3+ consecutive stacks. Corpus calibration (July 2026) found
this separates expository AI (opinion/persuasive prose, ~17% definitional
lines) from humans, but not fiction: current AI fiction scores ~0% while
aphoristic human literary prose scores 8–12%. So the signal abstains on
narrative text (detected by pronoun/past-tense/dialogue density) rather
than punish strong literary voice — the classic false positive. It scores only
expository prose, where the epigram-stack is a genuine tell.
The four shape signals were derived in July 2026 from a 349k-word
fiction corpus that passed every signal above and still tripped
perplexity-class detectors — the surviving tells were all sentence-shape
tells, not word choice.
Tier 2 — local model perplexity (weight 6.0)
A small open model runs on our own hardware and measures per-token
surprisal. Machine text is unusually predictable — a low, flat surprisal
stream — which is the GLTR/GPTZero family of evidence. Predictability carries the
signal (a light uniformity term rides along). Input is capped at
1,024 tokens. No third-party AI APIs are called, ever.
Genre gating
Most tells are genre-dependent. Corpus calibration (July 2026) showed several
signals mean opposite things in different registers: aphorism density
flags persuasive AI but is normal literary voice; simile density is
higher in human fiction than in current AI fiction; contraction rate is tuned
for fiction and mis-reads formal exposition. The scanner therefore classifies each
input (fiction / expository / promotional / mixed, from pronoun, tense, dialogue,
second-person and imperative density) and lets genre-sensitive signals abstain or
re-baseline where they are not diagnostic — rather than punish a strong human voice.
The detected genre is returned in every result. Lexicon and typography signals are
genre-robust and are never gated.
Design rule: a genre gate may only make a signal quieter where the
corpus shows a false positive; it never raises an accusation. Per-genre calibration
tables are a work in progress as the harvest corpus grows.
Honest limitations
- Calibration constants (the human/AI breakpoints above) are first-pass guesses,
not yet tuned on a labeled corpus. Treat absolute numbers accordingly.
- The phrase lexicon decays: "delve"-era tells fade as models change.
- A 2019 model approximates newer models' predictability imperfectly.
- Editing defeats surface tells — by design this tool tells you how.
- Tells are genre-dependent: aphorism density flags persuasive AI but is
normal in literary fiction; the scanner genre-gates where the corpus demands it,
and absolute numbers stay first-pass until tuned on a larger labeled set.
Independent evaluations are welcome — the scoring engine is a small, readable
Python package with zero dependencies in its heuristic tier.