Skip documentation navigation

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.