Vale CMS Need more than a rule playground? Explore
Package Explorer

ai-tells

Flags the fingerprints of AI-written prose, with rule messages that name the fix rather than only the phrase.

tbhb/vale-ai-tells 91 stars 53.7K downloads v1.34.0 · Sep 7, 2026 latest release style

Getting started

Add it to your .vale.ini, then run vale sync.

Packages = ai-tells

[*.md]
BasedOnStyles = Vale, ai-tells

The name installs the latest release each time vale sync runs. To stay on v1.34.0, the release this page describes, give its URL instead:

Packages = https://github.com/tbhb/vale-ai-tells/releases/download/v1.34.0/ai-tells.zip

Assets 1

Files the package ships under config/, installed alongside its rules by vale sync.

  • 1 template
    • ai-tells-agent.tmpl

Rules 134

134 error
  • ai-tells.AbsoluteAssertions error existence

    AI overreach: '%s'. Verify this claim or soften it.

  • ai-tells.AbstractionSubject error existence

    AI abstraction subject: '%s'. State what the demonstrative stands for, then say what it does.

  • ai-tells.AffirmativeFormulas error existence

    AI affirmation: '%s'. Cut the flourish and state the point plainly.

  • ai-tells.AIAdjectiveNounPairs error sequence

    AI adjective-noun pair: '%s %s'. Use concrete description instead.

  • ai-tells.AICompoundPhrases error existence

    AI fingerprint: '%s'. Rewrite with concrete specifics instead of this clichéd phrase.

  • ai-tells.AnnouncementHeadings error existence scope: heading

    AI announcement heading: '%s'. Cut the heading or rename it to the topic.

  • ai-tells.AnthropomorphicAdjectives error existence

    AI anthropomorphic adjective: '%s'. Say what the thing does or measures instead of grading its character. Disable this rule for medical or community prose.

  • ai-tells.AnthropomorphicCognition error existence

    AI anthropomorphism: '%s'. State what the tool checks or produces. Disable this rule for prose about people.

  • ai-tells.AnthropomorphicJustification error existence

    AI cliché: '%s'. Say what you mean directly.

  • ai-tells.BareHolds error existence

    AI possession verb: '%s'. Say what it contains or stores. Disable this rule for concurrency or physical-object prose.

  • ai-tells.BareNames error existence

    AI designation verb: '%s'. Say that it specifies or references the thing, or tell the reader to state it. Disable this rule for API reference prose.

  • ai-tells.BareReaches error existence

    AI arrival metaphor: '%s'. Say which step handles it, or where it is sent. Disable this rule for transit or physics prose.

  • ai-tells.CataphoricForecasting error existence

    AI numbered lead-in: '%s'. Present the items or the measured figures directly instead of leading with a count.

  • ai-tells.ClosingPleasantries error existence

    AI closing: '%s'. Delete it and end with your actual content.

  • ai-tells.ColloquialAssessments error existence

    AI colloquial assessment: '%s'. State the assessment directly.

  • ai-tells.ColonUsage error existence scope: ~heading

    AI punctuation: '%s'. Lowercase the word after the colon unless it is a proper noun.

  • ai-tells.ConclusionMarkers error existence

    AI conclusion: '%s'. Delete this and end on your final point.

  • ai-tells.ConsequenceClause error existence

    AI consequence clause: '%s'. End the sentence before the comma and state the effect as its own claim.

  • ai-tells.ConsequenceParticiple error existence

    AI consequence tail: '%s'. End the sentence there and state the effect as its own claim.

  • ai-tells.ContrastiveFormulas error existence

    AI contrast: '%s'. State the positive claim directly without the 'not X, but Y' formula.

  • ai-tells.ContrastiveNegation error existence

    AI contrast by negation: '%s'. State the positive directly without the trailing negation.

  • ai-tells.CoordinatedReveal error existence

    AI quantified reveal: '%s'. The totality word replaces a contrast the sentence never states. Say what it rules out, or drop the word.

  • ai-tells.DefensiveHedges error existence

    AI defensive hedge: '%s'. State your point directly without pre-defending it.

  • ai-tells.DepletionMetaphors error existence

    AI depletion metaphor: '%s'. Say what ran out, failed, or slowed, and give the limit. Disable this rule for prose about engines or nutrition.

  • ai-tells.DespiteChallenges error existence

    AI despite-formula: '%s'. Engage with the challenges substantively or remove the hedge.

  • ai-tells.DoubleHyphen error existence

    AI punctuation: '%s'. Backtick it if it is a CLI flag or literal, or use a real em dash for punctuation.

  • ai-tells.EmDashUsage error existence

    AI punctuation: em-dash detected. Use a comma, period, or parentheses instead.

  • ai-tells.EmphaticCopula error existence scope: raw

    AI emphasis: '%s'. Remove the italics. Emphasizing a common word rarely adds meaning.

  • ai-tells.EnforcementMetaphors error existence

    AI enforcement metaphor: '%s'. Say what the check refuses or allows. Disable this rule for security or law-enforcement prose.

  • ai-tells.EvasionMetaphors error existence

    AI evasion metaphor: '%s'. Say what the check missed and why.

  • ai-tells.ExplainerHeadings error existence scope: heading

    AI explainer heading: '%s'. State the topic instead.

  • ai-tells.ExplainerLeads error existence scope: ~heading

    AI explainer lead: '%s'. State the point directly instead of announcing it.

  • ai-tells.FalseBalance error existence

    AI evasion: '%s'. Take a clear position or remove the hedge.

  • ai-tells.FalseExclusivity error existence

    AI false exclusivity: '%s'. State the point directly without claiming insider knowledge.

  • ai-tells.FigurativeBreeds error existence

    AI overused verb: '%s'. Say the one causes the other. Disable this rule for husbandry or biology prose.

  • ai-tells.FigurativeCarries error existence

    AI overused verb: '%s'. Say what it contains or entails. Disable this rule for freight or logistics prose.

  • ai-tells.FigurativeCasts error existence

    AI overused verb: '%s'. State the doubt or the effect directly. Disable this rule for fishing, metalwork, or theater prose.

  • ai-tells.FigurativeClears error existence

    AI hurdle metaphor: '%s'. Say the check passed. Disable this rule for athletics prose.

  • ai-tells.FigurativeDemands error existence

    AI overused verb: '%s'. Say the work requires it. Disable this rule for labor or economics prose.

  • ai-tells.FigurativeDisguises error existence

    AI disguise metaphor: '%s'. State what the thing is, then say how it differs from what it resembles. Disable this rule for security, forensics, or costume prose.

  • ai-tells.FigurativeDraws error existence

    AI overused verb: '%s'. Give the source or the comparison directly. Disable this rule for art or card-game prose.

  • ai-tells.FigurativeEarns error existence

    AI wage metaphor: '%s'. Say what the thing gets or requires. Disable this rule for payroll or finance prose.

  • ai-tells.FigurativeFalls error existence

    AI overused verb: '%s'. State the shortfall or the membership directly. Disable this rule for gravity or weather prose.

  • ai-tells.FigurativeFires error existence

    AI overused verb: '%s'. Say the rule matches or reports. Disable this rule for firearms or ceramics prose.

  • ai-tells.FigurativeHolds error existence

    AI overused verb: '%s'. State the comparison or the claim directly. Disable this rule for legal or wrestling prose.

  • ai-tells.FigurativeIdioms error existence

    AI idiom: '%s'. State the literal outcome instead.

  • ai-tells.FigurativeKeeps error existence

    AI upkeep frame: '%s'. Say what the mechanism does to the thing, not what state it keeps it in.

  • ai-tells.FigurativeLands error existence

    AI overused verb: '%s'. Use the literal action: is merged or is routed to. Disable this rule for aviation or nature prose.

  • ai-tells.FigurativeLends error existence

    AI overused verb: '%s'. State what it adds or enables directly. Disable this rule for library or finance prose.

  • ai-tells.FigurativeLives error existence

    AI overused verb: '%s'. Say where the item is defined or stored. Disable this rule for biography or housing prose.

  • ai-tells.FigurativeLoud error existence

    AI overused word: '%s'. Describe the actual behavior instead of calling emphasis volume. Disable this rule for prose about sound.

  • ai-tells.FigurativeMints error existence

    AI coinage metaphor: '%s'. Use the literal action: creates an identifier, or requests a token. Disable this rule for currency prose.

  • ai-tells.FigurativeNouns error existence

    AI figurative noun: '%s'. Say what concrete thing it stands for.

  • ai-tells.FigurativeOwns error existence

    AI ownership metaphor: '%s'. Say which file defines it or which tool writes it. Disable this rule for concurrency or memory prose.

  • ai-tells.FigurativePays error existence

    AI money metaphor: '%s'. State the plain benefit or cost. Disable this rule for finance or commerce prose.

  • ai-tells.FigurativeQuantities error existence

    AI quantity metaphor: '%s'. Give the count, or write 'a few' or 'many'.

  • ai-tells.FigurativeQuiet error existence

    AI overused word: '%s'. Describe the actual behavior instead of calling inaction silence. Disable this rule for prose about sound.

  • ai-tells.FigurativeReaches error existence

    AI overused verb: '%s'. Say uses or resorts to instead. Disable this rule for sports or robotics prose.

  • ai-tells.FigurativeRides error existence

    AI overused verb: '%s'. State the dependency or the mechanism directly. Disable this rule for transit or equestrian prose.

  • ai-tells.FigurativeRuns error existence

    AI overused verb: '%s'. Describe the actual behavior. Disable this rule for athletics or plumbing prose.

  • ai-tells.FigurativeSees error existence

    AI overused verb: '%s'. Say who uses it or what changed. Disable this rule for prose about eyesight.

  • ai-tells.FigurativeSettles error existence

    AI settlement metaphor: '%s'. State the conclusion and the evidence, or say what the stable state is. Disable this rule for legal or geology prose.

  • ai-tells.FigurativeShape error existence

    AI figurative noun: '%s'. Say which structure, format, size, or pattern it stands for. Disable this rule for geometry, graphics, or array-dimension prose.

  • ai-tells.FigurativeSits error existence

    AI overused verb: '%s'. Use the literal relation: is at or rests with. Disable this rule for furniture or geography prose.

  • ai-tells.FigurativeStays error existence

    AI overused verb: '%s'. Say the item is unchanged, or state what it avoids. Disable this rule for lodging or travel prose.

  • ai-tells.FigurativeStrikes error existence

    AI overused verb: '%s'. State the effect or the tradeoff directly. Disable this rule for labor or percussion prose.

  • ai-tells.FigurativeSurfaces error existence

    AI discovery metaphor: '%s'. Say what reported the problem and when. Disable this rule for marine or graphics prose.

  • ai-tells.FigurativeSweeps error existence

    AI overused verb: '%s'. Use the literal action: is removed or is replaced. Disable this rule for housekeeping or weather prose.

  • ai-tells.FigurativeTravels error existence

    AI overused verb: '%s'. Use the literal movement: is sent or is copied. Disable this rule for transit or physics prose.

  • ai-tells.FigurativeTrips error existence

    AI overused verb: '%s'. Say the text matches the check. Disable this rule for electrical or hiking prose.

  • ai-tells.FigurativeWins error existence

    AI overused verb: '%s'. State the benefit or the outcome directly. Disable this rule for sports or gaming prose.

  • ai-tells.FigurativeWorth error existence

    AI value verdict: '%s'. Say what the thing does or what it costs instead of rating it. Disable this rule for finance prose.

  • ai-tells.FillerIntensifier error existence

    AI intensifier: '%s'. Delete the intensifier. The determiner already states the count.

  • ai-tells.FillerPhrases error existence

    AI filler: '%s'. Delete this phrase. The sentence reads the same without it.

  • ai-tells.FormalRegister error existence

    AI formalism: '%s'. Use a plainer everyday word (e.g., 'use', 'help', 'start').

  • ai-tells.FormalTransitions error existence

    AI transition: '%s'. Delete it, or use a simpler connector like 'and', 'but', or 'so'.

  • ai-tells.FusionMetaphors error existence

    AI fusion metaphor: '%s'. Say merged, added, or combined, and say what went where. Disable this rule for physics or chemistry prose.

  • ai-tells.GrowthMetaphors error existence

    AI growth metaphor: '%s'. Say what literally happens, or disable this rule for medical or nature writing.

  • ai-tells.HedgingPhrases error existence

    AI hedge: '%s'. Delete this throat-clearing and state your point directly.

  • ai-tells.HollowAcknowledgment error existence

    AI hollow acknowledgment: '%s'. Resolve the thing you just named or cut the clause.

  • ai-tells.HouseStyle error substitution

    AI house compound: use %s instead of '%s'.

  • ai-tells.IncompleteComparison error existence

    AI incomplete comparison: '%s'. Complete it with 'than' and the baseline.

  • ai-tells.JourneyMetaphors error existence

    AI journey metaphor: '%s'. Say what literally happened and what the next step is. Disable this rule for travel writing.

  • ai-tells.LabelAndExplain error existence scope: ~heading

    AI label-and-explain: '%s'. Fold the noun-phrase label into the sentence it introduces.

  • ai-tells.ListIntroductions error existence

    AI list intro: '%s'. Skip the announcement and present the content directly.

  • ai-tells.MarketingHeadings error existence scope: heading

    AI marketing heading: '%s'. Strip the puffery and state the topic plainly.

  • ai-tells.Metacommentary error existence scope: raw

    AI metacommentary: '%s'. Delete it or replace it with substantive content.

  • ai-tells.MicDrop error existence

    AI mic-drop: '%s'. Integrate the point into the surrounding text or cut it.

  • ai-tells.MicDropHeadings error existence scope: heading

    AI mic-drop: '%s'. Use a descriptive heading instead.

  • ai-tells.MortalityMetaphors error existence

    AI mortality metaphor: '%s'. Say what stopped, or what was kept. Disable this rule for biology or process-lifecycle prose.

  • ai-tells.MotionMetaphors error existence

    AI motion metaphor: '%s'. Use the literal operation: is passed to, or depends on.

  • ai-tells.NamedAdjective error existence

    AI designation adjective: '%s'. Write the identifier itself, or say which one. Disable this rule for API reference prose.

  • ai-tells.NarrativePivots error existence

    AI narrative pivot: '%s'. State your point directly.

  • ai-tells.NegatedObject error existence

    AI stilted negation: '%s'. Negate the verb with 'doesn't' instead of shifting 'no' onto the object.

  • ai-tells.NegatedPair error existence

    AI stacked absence: '%s'. Negate the verb once, then say what the thing does instead.

  • ai-tells.NegatedSubject error existence

    AI negated subject: '%s'. Name who does what: 'you don't need to configure anything' instead of announcing an absence.

  • ai-tells.NounString error sequence

    AI noun string: '%[2]s %[3]s %[4]s %[5]s'. Rewrite the stack as a phrase that shows how the nouns relate.

  • ai-tells.OpeningCliches error existence

    AI opening: '%s'. Start with your actual point instead of this generic lead-in.

  • ai-tells.OrganicConsequence error existence

    AI inevitability: '%s'. Say the choice was designed that way.

  • ai-tells.OverusedVocabulary error existence

    AI vocabulary: '%s'. Replace with a more specific or common word.

  • ai-tells.OverusedVocabularyVerbs error sequence

    AI vocabulary (verb form): '%s'. Replace with a direct verb.

  • ai-tells.ParallelStaccato error existence

    AI staccato: '%s'. Combine these clipped parallel sentences or vary the structure.

  • ai-tells.ParticipialPadding error existence

    AI participial padding: '%s'. Delete it or make the point concrete.

  • ai-tells.PointVerdict error existence

    AI point verdict: '%s'. Say what the thing does or what it is for instead of grading it as the point.

  • ai-tells.PromotionalPuffery error existence

    AI puffery: '%s'. Use neutral, specific language.

  • ai-tells.PseudoCleft error existence

    AI pseudo-cleft: '%s'. Put the claim first as its own sentence and delete the 'What ... is' frame.

  • ai-tells.RedundantPrecaution error existence

    AI cliché: '%s'. State the specific safeguard or cut the phrase.

  • ai-tells.ResonateOveruse error existence

    AI overused verb: '%s'. Say what connects and why, or disable this rule for physics or audio writing.

  • ai-tells.RestatementMarkers error existence

    AI restatement: '%s'. Delete it and trust your original phrasing. If a second case needs the point, put both cases in the sentence that makes it.

  • ai-tells.RhetoricalDevices error existence

    AI rhetoric: '%s'. Remove it or rephrase as a plain statement.

  • ai-tells.RhetoricalSelfAnswer error existence scope: raw

    AI rhetorical self-answer: '%s'. State the point directly instead of posing and answering your own question.

  • ai-tells.ScopePartition error existence

    AI scope partition: '%s'. Make the scope the subject of its own sentence instead of a fronted label.

  • ai-tells.SelfReference error existence

    AI cross-reference: '%s'. Rewrite the passage to work without the cross-reference.

  • ai-tells.SemicolonUsage error existence

    AI punctuation: '%s'. Replace the semicolon with a period or two sentences.

  • ai-tells.SequencingMarkers error existence

    AI sequencing: '%s'. Use natural transitions or write an actual list.

  • ai-tells.ServesAsDodge error existence

    AI copula dodge: '%s'. Use 'is' or 'are' instead of this inflated construction.

  • ai-tells.ShellNounCopula error existence

    AI shell noun: '%s'. Delete the noun and the copula. Start the sentence at the claim.

  • ai-tells.ShipOveruse error existence

    AI overused word: '%s'. State the specific action or object. Disable this rule for maritime or logistics writing.

  • ai-tells.StackedAnaphora error existence

    AI anaphora: '%s'. Vary the sentence openings or combine into one statement.

  • ai-tells.StackedHedges error existence

    AI stacked hedge: '%s'. Drop one hedge, or give a number instead.

  • ai-tells.StrategyBuzzwords error existence

    AI strategy buzzword: '%s'. Describe the actual mechanism or advantage plainly.

  • ai-tells.StrawmanContrast error existence

    AI strawman contrast: '%s'. State what it does and stop. Drop the alternative nobody proposed.

  • ai-tells.StructureAnnouncements error existence

    AI structure announcement: '%s'. Present the content instead of narrating that you're about to.

  • ai-tells.SummativeAppositive error existence

    AI summative appositive: '%s'. The label noun restates the clause before it. Put the claim in its own sentence, or stop at the comma.

  • ai-tells.SycophancyMarkers error existence

    AI sycophancy: '%s'. Delete this. It sounds robotic and insincere.

  • ai-tells.UnderRegime error existence

    AI regime opener: '%s'. Lead with the subject and put the tool after the verb, with 'with' or 'when using'.

  • ai-tells.UniversalObject error existence

    AI totality claim: '%s'. Say which cases were checked, or drop the quantifier.

  • ai-tells.UniversalSubject error existence

    AI blanket claim: '%s'. Say which cases were checked, or drop the quantifier.

  • ai-tells.UnpackExplore error existence

    AI explainer prompt: '%s'. Explain it directly instead of announcing it.

  • ai-tells.UrgencyInflation error existence

    AI urgency: '%s'. Delete it or show the stakes concretely.

  • ai-tells.VagueAttributions error existence

    AI vague attribution: '%s'. Give the specific source or delete the claim.

  • ai-tells.VerbTricolon error existence

    AI tricolon: '%s'. Exactly three parallel verbs in series. Restructure or vary the count.

  • ai-tells.VerbTricolonDensity error occurrence scope: paragraph

    AI tricolon: multiple verb tricolons in one paragraph (found %d). Rewrite some with two or four items.

  • ai-tells.WrapUpHeadings error existence scope: heading

    AI wrap-up heading: '%s'. Delete the section or rename the heading to the topic.