The rules

Weight says how much one finding means alone. Weak: common in careful human writing, so only the density means anything. Moderate: a recognisable habit, where a handful in a short document is a pattern. Strong: not a style at all but debris from a chat interface, where one hit deserves to be read. Even a strong finding shows that text passed through a chat interface, not who wrote the sentences around it.

vocabularyOverrepresented vocabularymoderate, vocabulary

Counts words that studies and Wikipedia editors found overused in model output, sorted by the model generation that overused them, and marks clusters of 3 or more distinct list words inside 150 running words. The source guide says clustering is the signal and single hits are not.

False positive: every listed word is ordinary English. A landscape architect writes "landscape", a statistician writes "robust", a lawyer writes "testament", and academic prose used "crucial" long before 2022.

copula-avoidanceCopula avoidanceweak, vocabulary

Counts verbs used in place of "is" or "are": serves as, stands as, functions as, operates as, represents a, marks a, boasts, features a, offers a, refers to.

False positive: all of these are ordinary verbs. A person "served as" treasurer, a glossary says a term "refers to" something, a shop "offers a" discount. The rule cannot tell whether plain "is" would have worked.

Baseline: none published, so the report makes no comparison.

negative-parallelismNegative parallelismmoderate, structure

Counts contrast frames that deny one thing to assert another: not only X but also Y; not just X, it is Y; is not just; does not just; it is not X, it is Y; no X, no Y, just Z; not X but rather Y; and sentences opening "Rather than X,". The sub-type is recorded in each finding.

False positive: "not only ... but also" is a correlative conjunction from every grammar book and is common in legal drafting and sermons. One in a document is grammar. Matches inside a quotation are skipped, but the rule cannot tell a considered contrast from a reflex.

Baseline: none published, so the report makes no comparison.

rule-of-threeRule of threeweak, structureoff by default: --include rule-of-three

Counts lists of exactly three items (A, B, and C; A, B and C; A, B, or C) and three adjectives stacked before a noun, and reports the share of sentences that carry one. All three members must be recognisable list items or nothing is reported, so the span shown covers the whole list. Lists of four or more, items with digits, capitalised names and bullet fragments are skipped as inventories. Off by default: run it with --include rule-of-three. It was demoted after a September 2026 review because on this project's own corpus the top human rate reaches the machine rate, so the rule separates nothing in-sample, and because in a set of eight human passages written for that review it produced nine of the twelve findings and was the only rule to fire in a recipe, a eulogy, a match report and a limitation-of-liability clause.

False positive: a list of three is often just a list of three things, and the rhetorical triad is one of the oldest human devices in English. "Indirect, incidental, or consequential" is boilerplate in every commercial contract in the language, and it is counted.

Baseline: none published, so the report makes no comparison.

em-dashEm-dash densityweak, punctuation

Counts em dashes, double hyphens used as dashes and spaced en dashes per 1,000 words, and notes the ones sitting mid-clause where a comma would do. Compared against a measured human nonprofessional baseline of 3.23, with literary human prose (4.8 to 6.5) and GPT-4.1 (10.62) printed beside it.

False positive: literary writers, magazine journalism and anyone whose word processor converts a double hyphen. Human literary prose overlaps the model range, and some models produce no em dashes at all, so neither a high nor a low rate identifies an author.

Baseline: 3.23 per 1k, human nonprofessional prose (Freeburg 2026, preprint); 4.8, literary human prose, low end (SlopDetector, not peer reviewed); 6.5, literary human prose, high end (SlopDetector, not peer reviewed); 10.62, GPT-4.1 on matched prompts (Freeburg 2026, preprint).

ing-analysisTrailing -ing analysismoderate, structure

Counts sentences that end in a comma followed by a present-participle clause from a fixed list (highlighting, underscoring, emphasizing, reflecting, symbolizing, showcasing, ensuring, contributing to, fostering, cultivating, encompassing, enhancing, demonstrating, signaling, marking, solidifying, cementing), where the clause comments on the sentence instead of adding to it.

False positive: a participial clause that reports an action is good writing, as in "She spent the winter in Ghent, ensuring the archive was catalogued before the move." The rule matches the shape and cannot tell an action from a gloss.

Baseline: none published, so the report makes no comparison.

significance-inflationInflated significancemoderate, vocabulary

Counts stock phrases that assert importance or legacy: testament to, pivotal, crucial or vital or key role, underscores the importance, indelible mark or impression, deeply rooted, evolving landscape, focal point, setting the stage, key turning point, reflects broader, enduring or lasting legacy, stands as a, is a reminder.

False positive: obituaries, award citations and grant applications are written this way by people, and "played a key role" is plain reporting when the next sentence says what the role was. The rule does not check whether evidence follows.

Baseline: none published, so the report makes no comparison.

pufferyPromotional pufferyweak, vocabulary

Counts brochure language: boasts, vibrant, rich history or tapestry or heritage, profound, renowned, groundbreaking, nestled, in the heart of, diverse array, commitment to, state-of-the-art, world-class, cutting-edge, seamless, unparalleled, must-visit, breathtaking.

False positive: human press releases, tourism copy and property listings were puffy long before language models, and the source guide says promotional tone alone does not indicate machine writing.

Baseline: none published, so the report makes no comparison.

vague-attributionVague attributionmoderate, attribution

Counts appeals to unnamed authority: experts say, studies show, research suggests, industry reports, observers, critics argue, analysts have observed, commentators contend, many in the industry maintain, it is widely believed, many believe, some say, according to some. A finding is dropped when the same sentence or the next one contains a URL, a bracketed citation, a year in parentheses or a number with a unit.

False positive: journalism that named its sources several paragraphs earlier, and casual writing where "some say" needs no footnote. The rule checks that something citation-shaped is nearby, not that the citation is real.

Baseline: none published, so the report makes no comparison.

vague-associationVague associationweak, attribution

Counts connectives (in connection with, associated with, in association with, connected to, linked to) that are not followed within 6 words by a named object: a capitalised name, a number or a quoted title.

False positive: epidemiology and statistics use "associated with" as a term of art for a measured correlation, with a common noun as the object. That is precise writing and this rule will still count it.

Baseline: none published, so the report makes no comparison.

transition-openersTransition openersweak, structure

Counts sentences that open with a stock connective: Additionally, Moreover, Furthermore, In addition, Overall, Ultimately, In conclusion, Notably, Importantly, Interestingly, Crucially, In summary, That said, In today's. Reports the share of sentences that open this way.

False positive: these are the connectives taught in school essays and in most English-as-a-second-language courses, the same writers detectors were found to misclassify. A writer taught to signpost every paragraph will be counted here.

challenges-formulaChallenges-and-outlook formulamoderate, structure

Counts the stock ending: "Despite its ... challenges" (also Notwithstanding and In spite of), a heading such as Challenges and Future Outlook, Challenges and the Road Ahead, Future Directions or Looking Ahead, a sentence opening "Looking ahead," "Looking forwards," "Going forward," or "Moving forward,", and a final paragraph that opens with In conclusion, Overall, Ultimately, In summary, To summarise, To sum up or In closing.

False positive: "Future Directions" is a conventional heading in scientific papers and grant reports, and a school essay is supposed to end with "In conclusion". A real challenges section names the challenges; the rule cannot check that.

Baseline: none published, so the report makes no comparison.

inline-header-listsInline-header listsmoderate, formatting

Counts runs of 3 or more consecutive list items that each open with a label and a colon, bolded ("- **Speed:** text") or bare ("- Speed: text"). Every item in a qualifying run is reported.

False positive: glossaries, changelogs, API parameter lists and meeting minutes are inline-header lists written by people, and it is the right format for that content.

Baseline: none published, so the report makes no comparison.

bold-overuseBold overuseweak, formatting

Counts bold spans per 1,000 words and marks any paragraph or list holding 3 or more.

False positive: documentation bolds UI labels and warnings, and study notes and legal summaries bold defined terms, all correctly. One bold span means nothing; the density and the per-paragraph pile-ups are the measurement.

Baseline: none published, so the report makes no comparison.

heading-styleHeading and section styleweak, formatting

Counts five formatting habits: Title Case headings (3 or more capitalised words after the first, with every non-trivial word capitalised), a heading with no body before a deeper heading, skipped heading levels, a thematic break placed directly before a heading, and an emoji opening a heading, list item or line.

False positive: Title Case is house style at many publications, headings made of proper nouns are capitalised because the words are names, and people put emoji in README headings on purpose. These are signs of unedited chat formatting, not of authorship.

Baseline: none published, so the report makes no comparison.

chat-residueChat residuestrong, artifact

Finds sentences addressed to a chat user that were pasted in with the answer: As an AI, as of my knowledge cutoff, I hope this helps, let me know if, would you like me to, I would be happy to help, just say the word, great question, I cannot help with, feel free to, I do not have access to real-time, "Certainly!" or "Sure!" at the start of a line, and "Here is a" or "Below is a" as the first words of the document. Quotations and blockquotes are skipped.

False positive: emails and support replies written by people say "let me know if" and "feel free to" constantly, and a chat transcript is supposed to contain all of this. Strong means a single hit deserves reading, not that it settles anything.

Baseline: none published, so the report makes no comparison.

model-artifactsModel artifactsstrong, artifact

Finds serialisation debris that chat products leak into copied text: oaicite, contentReference, oai_citation, turn0search, attributableIndex, [cite: N], [span_N](start_span), grok_card, grok_render_citation_card_json, lenticular citation brackets around digits, ppl-ai-file-upload, attached_file, :::writing, and utm_source= in links (that last one is weighted weak, because newsletters add it to links people paste every day). Code fences and inline code are skipped.

False positive: an article about these markers that names them in running prose, attached_file as an ordinary identifier, and lenticular brackets in Chinese or Japanese typography. A hit shows text passed through a chat interface; it does not show who wrote the sentences around it.

Baseline: none published, so the report makes no comparison.

didactic-disclaimersDidactic disclaimersweak, structureoff by default: --include didactic-disclaimers

Counts lecturing asides: it is important to note, it is worth noting, keep in mind, bear in mind, it should be noted, Note that, Remember that. Historical: a habit of 2023 chat models that has faded, so the rule is off unless --historical or --include didactic-disclaimers is passed.

False positive: technical documentation says "Note that" constantly and correctly, and legal and medical writing hedges for good reason. "Note that" and "Remember that" are counted only where they are capitalised, so a note that says goodbye is left alone.

Baseline: none published, so the report makes no comparison.

Audit a report

node bin/tells.mjs draft.md --format json --out report.json
node bin/tells.mjs audit report.json --against draft.md

Constructed scenario: the report for the sample on the home page, with the vocabulary finding at 25:302 deleted and the count lowered to match. tells audit recomputes everything from the document and says:

  FAIL  D2  vocabulary: per1k says 5.6, recomputed 3.73 (2 in 536 words)
  FAIL  D5  totals do not match the findings (report {"findings":25,"distinctSpans":19,"byWeight":{"weak":16,"moderate":9,"strong":0},"rulesTriggered":7}, recomputed {"findings":24,"distinctSpans":18,"byWeight":{"weak":16,"moderate":8,"strong":0},"rulesTriggered":7})
  FAIL  E3  vocabulary: a finding at 25:302 ("crucial") is missing from the report

  FAIL  3 critical, 0 warning(s). This report does not describe this document.