Repository navigation
What The Checker Flags
tells.py matches a fixed table of patterns. Everything it knows is in two lists at the top of the script, STOCK_WORDS and RULES, plus a few checks of structure. python skills/everwrite/scripts/tells.py --list prints the table. This page describes the script on master at commit 0673975 (2026-10-03).
A strong hit is a pattern that almost never appears in text a person wrote with care. One strong hit makes the checker exit 1. A weak hit is listed for judgment and never changes the exit code: plenty of good human writing has a long sentence or a rather than.
The checker works on prose only. Before matching it blanks out:
- YAML frontmatter at the top of the file
- fenced code blocks and inline code
- HTML comments
- URLs and the targets of markdown links and link references
- anything between lines holding only
<!-- tells: off -->and<!-- tells: on -->
Patterns match within a paragraph, ignoring case. A heading or a table row is a paragraph of its own, and each list item starts a new one. A code fence that never closes stops the check at that line, and the checker adds a weak input hit saying so.
Two checks are the exception and read every line, code included: hidden-char and odd-space. An invisible character inside a code block is as much a problem as one in prose.
| Category | Severity | What it catches |
|---|---|---|
dash |
strong | An em or en dash, or -- between spaces. Off with --allow-dashes. |
residue |
strong | The chat wrapper: praise, offers, sign-offs, announcements of what follows, knowledge-cutoff lines, phrases that excuse missing sources. |
markup |
strong | Citation markers and tracking parameters that chat apps leave in copied text. |
placeholder |
strong | Unfilled template slots such as [insert name] or a date written 2026-xx-xx. |
contrast |
strong or weak | The not-X-but-Y family. The forms with not just, more than just, doesn't mean ... It means and negative listings are strong. A negative sentence followed by one starting It ... is weak, and so is rather than. |
setup |
strong | Staged openers, reveals with a colon, staged candor and arguing with a position nobody took. |
inflation |
strong | Inflated significance and sales language. |
rider |
strong | A comma followed by an -ing word such as highlighting or ensuring added for weight. |
vocabulary |
strong or weak | Words from the stock list. Two or more different listed words in one paragraph are strong; one alone is weak. |
authority |
weak | Unnamed experts, studies and observers. |
copula |
weak |
serves as, stands as, boasts in place of is or has. |
association |
weak |
associated with, connected with where a relationship could be named. |
qualifier |
weak | Stacked hedges such as could potentially. |
adverb |
weak | Intensifiers such as really, truly, fundamentally. |
transition |
weak | A sentence opening with Additionally,, Moreover,, Furthermore, or Notably,. |
emoji |
strong | An emoji in prose. |
bold-label |
strong | A list item that opens with a bold label followed by a colon or a dash. |
repeated-heading |
strong | A heading straight under a heading with the same words, or with --wiki a first heading repeating the page title. |
repeated-text |
strong | The same paragraph or list item twice in a row. |
hidden-char |
strong | Zero-width characters, the soft hyphen, bidirectional controls, tag characters and variation selectors. |
odd-space |
weak | No-break, narrow no-break and figure spaces. |
title-case |
weak | A heading with three or more significant words, all capitalised. |
divider |
weak | Two or more horizontal rules in a file. |
curly-quote |
weak | Curly quotation marks. |
decoration |
weak | Arrows in a heading or list item. |
long-sentence |
weak | A sentence over --max-words words, 30 by default. |
repeated-opening |
weak | Three sentences in a row starting with the same word. |
input |
weak | A problem with the file itself, such as an unclosed code fence. |
Two of the strong contrast patterns skip a sentence that opens a condition. If the value is not set, it is zero is plain technical prose, so words such as if, when, unless and because before the match turn it off. The exemption came from the review before the first public release (the skill's CHANGELOG.md, C-20260925-6).
The list holds 47 words and phrases, such as delve, tapestry, leverage, robust and seamless, with their common inflections. --list prints it in full. The skill tells the agent never to swap one listed word for another, since the swap is still on the list.
The checker sees patterns a regular expression can find. It does not judge structure, rhythm, a list of three chosen for sound, or whether a fact was invented; the skill's last step is a reread for those. It gives no score and no guess at who wrote the text.
This wiki describes everwrite 1.0.0 (master at 0673975) and was last updated on 2026-10-03. The skill is MIT licensed. Report problems in the issues. Listed in the Claude directory as Everwrite.
Using it
The releases
Contributing
Elsewhere