Pattern library
Concise has 47 AI-writing categories. Each page lists the flagged text and the fix that the hook prints. Choose a preset to see the categories that it turns on. To choose categories yourself, set features.aiWriting.categories in the configuration.
47 categories
Phrase categories
- AI frequency words
Words that appear far more often in model output than in human writing.
default, ryan, technical
- British spelling
British spellings in text that otherwise uses American English.
ryan
- Chatbot phrases
Assistant boilerplate that belongs to a chat window.
default, ryan, technical, minimal
- Claude tells
Phrasing that Claude 5.x models write far more often than people do.
default, ryan, technical
- Closers
Endings that restate the text instead of stopping.
default, ryan, technical
- Contrast frames
Frames that define the subject by what it is not.
default, ryan, technical
- Filler
Openers and asides that carry no fact.
default, ryan, technical
- Formatting
Emoji and bold runs used as structure.
default, ryan
- Hedging
Qualifiers that leave the claim unowned.
ryan, ste
- Interpreting verbs
Verbs that interpret the subject instead of naming what it does.
ryan, ste
- Openers and frames
Openers and frames that delay the point.
default, ryan, technical
- Significance inflation
Wording that makes a change sound larger than it is.
default, ryan, technical
- Simplified technical english
Word choices from Simplified Technical English.
ste
- Sycophancy
Praise aimed at the reader instead of the work.
default, ryan, technical, minimal
- Transitions
Connectors and scene setters that add length without adding a fact.
default, ryan, technical
- Wordiness
Long forms of short words.
ryan, ste
Rhetorical categories
- Elegant variation
Rotating synonyms for one referent instead of repeating the name.
ryan
- False ranges
A "from X to Y" span whose endpoints share no real scale.
default, ryan, technical
- Negative parallelism
A chain of two or more negated clauses resolved by one affirmation.
default, ryan, technical
- Outline-restating conclusions
A closing paragraph that re-lists the section headings instead of adding a new fact.
ryan
- Overgeneralization
A universal claim about people or the industry with no source.
default, ryan, technical
- Parallel bullets
A bulleted list where every item shares one rigid shape.
ryan
- Promotional language
Marketing language for a technical change.
default, ryan, technical
- Rule of three
Triads of adjectives, nouns, or clauses used past the point of restraint.
ryan
- Superficial analysis
A significance claim with no evidence behind it.
ryan
- Undue emphasis
Intensifiers, stacked qualifiers, or markup used to manufacture stress.
ryan
- Vague attribution
A claim attributed to an unnamed authority.
default, ryan, technical
Commit and review categories
- AI attribution trailer
A commit or PR trailer credits an AI tool as co-author, generator, or signer.
default, ryan, technical, minimal, git
- AI author identity
The commit author or committer field names an AI tool instead of a person.
default, ryan, technical, minimal, git
- AI tool mention
Names of AI coding tools, or the agent narrating its own process instead of the change.
default, ryan, technical, git
- Benefit tail
A sentence ends in a justification clause tacked on after a comma.
ryan, technical, git
- Canned review
Stock PR-review phrasing used regardless of what the diff actually does.
default, ryan, technical, git
- File narration
Text narrates a trivial file operation instead of stating the change.
ryan, technical, git
- Praise sandwich
Review or reply text opens and closes with praise around a middle critique.
ryan, git
Punctuation categories
- Hidden characters
Invisible or look-alike characters that model output and chat UIs leave in text.
default, ryan, technical, git
- Smart punctuation
Curly quotes and the ellipsis character typical of text pasted from a chat UI.
default, ryan, technical
- Unicode glyphs
Arrows, box drawing, dingbats, and geometric symbols used in place of plain ASCII or words.
default, ryan, technical
Text statistics categories
- Lexical diversity
Flags text that reuses the same words instead of varying vocabulary.
statistical
- Paragraph coherence
Flags formulaic paragraphs: near-identical lengths, repeated opening words, or repeated topic sentences.
ryan, statistical
- Passive voice
Flags text where passive voice runs past a third of the sentences.
ryan, statistical
- Punctuation patterns
Flags punctuation habits that agree: colon and semicolon rate, no exclamations, a uniform Oxford comma, no sentence-initial conjunctions.
statistical
- Rare word usage
Flags text with an unusually high share of long, low-frequency words.
statistical
- Readability grade
Flags text with a Flesch-Kincaid grade level above what technical writing needs.
ryan, statistical
- Sentence variation
Flags text where every sentence runs about the same length.
ryan, statistical
- Terminal punctuation uniformity
Flags list items that all carry a trailing period even though they read as short fragments.
statistical
- Transition density
Flags text where too many sentences open on a transition or connector word.
ryan, statistical
- Word frequency
Flags text that leans on one favorite word far more than natural word spread predicts.
statistical
Scope names: files (prose files and plans), comments (comment runs in code files), code (whole code files, string literals included), gh (gh pr, gh issue, and gh release titles and bodies, gh api bodies, and MCP tool posts), commit (git commit, git tag, git merge, jj, and hg messages), command (the full command line), reply (the agent’s final reply, task text, and questions to the user).
The emDash feature has its own category, em-dash, in hooks/lib/patterns/prose/em-dash.json. No preset controls it. features.emDash.enabled does.