Prose scores for open-source repositories.
We ran Style Doctor on six open-source repositories. Explore the findings, then give your own prose a check on every pull request.
Add it to your GitHub ActionsLocal snapshots · Style Doctor 0.4.2 · Oct 8, 2026 UTC
Repository scans
Lowest score first · Expand a row to inspect findingsbrandonwise/humanizer76 / 100Needs workFindings 32444 errors · 280 warningsFiles 15Words 6,826
This writing-rules repository includes intentional examples and test fixtures of the patterns it teaches writers to avoid. Those examples contribute to its score; review the findings in context.
Findings by rule
Expand a rule for matched text, rewrite guidance, and links to the original source. Showing up to five occurrences per rule.
errorLeftover AI-generation artifact×12
This is a chatbot sign-off or citation scrap left in from an unedited paste.
Remove it; it means the output was never read before publishing.
I hope this helpsREADME.md:267:41 ↗I hope this helpsSKILL.md:55:45 ↗I hope this helpsSKILL.md:101:27 ↗I hope this helpsopenai-gpt/instructions.md:43:30 ↗I hope this helpsopenai-gpt/instructions.md:64:12 ↗
Showing 5 of 12 occurrences. The JSON report includes every source location.
errorFiller word "delve"×10
"delve" is a hallmark LLM word rarely used in natural writing.
Use "look at", "go into", or cut.
delveREADME.md:255:55 ↗delveREADME.md:276:104 ↗delveSKILL.md:43:48 ↗delveSKILL.md:79:32 ↗delveSKILL.md:81:133 ↗
Showing 5 of 10 occurrences. The JSON report includes every source location.
error"Tapestry" metaphor×10
"tapestry" as a metaphor is LLM boilerplate.
Name the actual thing.
tapestryREADME.md:255:64 ↗tapestryREADME.md:276:111 ↗tapestrySKILL.md:43:57 ↗tapestrySKILL.md:79:39 ↗tapestrySKILL.md:141:33 ↗
Showing 5 of 10 occurrences. The JSON report includes every source location.
error"It's important to note" filler×6
"it's important to note" adds nothing.
Just state the note.
It's worth notingSKILL.md:63:75 ↗It is important to noteSKILL.md:100:4 ↗It is important to noteopenai-gpt/instructions.md:61:4 ↗it is important to notereferences/ai-vocabulary.md:111:3 ↗It is important to notereferences/patterns.md:303:3 ↗
Showing 5 of 6 occurrences. The JSON report includes every source location.
error"It's not X, it's Y" reversal×3
The "It's not X, it's Y" reversal reads as generated.
Make the claim once, plainly.
It's not just X, it'sREADME.md:257:47 ↗It's not just X, it'sSKILL.md:45:43 ↗It's not just X, it'sopenai-gpt/instructions.md:29:33 ↗
error"A testament to" filler praise×2
"a testament to" is empty praise.
Say what it shows and why.
a testament toreferences/ai-vocabulary.md:14:16 ↗is a testament toreferences/ai-vocabulary.md:89:4 ↗
error"Not just X, but Y" construction×1
The "not just X, but Y" escalation is one of the strongest LLM tells.
Cut it and state the point directly.
Not just X, it's Y" and "Not only X butreferences/patterns.md:125:2 ↗
warningAI-vocabulary word×39
This word shows up disproportionately in LLM output.
Use a plainer, more specific word.
vibrantREADME.md:276:121 ↗meticulousREADME.md:276:139 ↗vibrantSKILL.md:79:49 ↗meticulousSKILL.md:79:82 ↗vibrantSKILL.md:141:43 ↗
Showing 5 of 39 occurrences. The JSON report includes every source location.
warningWordy phrase×32
This phrase has a shorter equivalent.
e.g. "in order to" -> "to", "due to the fact that" -> "because".
In order toREADME.md:270:39 ↗Due to the fact thatREADME.md:270:54 ↗In order toSKILL.md:58:35 ↗Due to the fact thatSKILL.md:58:50 ↗At this point in timeSKILL.md:58:74 ↗
Showing 5 of 32 occurrences. The JSON report includes every source location.
warningOverused intensifier×30
Everything is "crucial" in LLM prose.
Reserve it for what truly is; else cut.
pivotalREADME.md:249:57 ↗crucialREADME.md:276:130 ↗crucialREADME.md:279:89 ↗pivotalSKILL.md:37:53 ↗crucialSKILL.md:79:58 ↗
Showing 5 of 30 occurrences. The JSON report includes every source location.
warningSuperficial-analysis "-ing" filler×23
These "-ing" connectives gesture at analysis without adding any.
State the actual point instead.
showcasingREADME.md:251:53 ↗highlightingREADME.md:251:81 ↗showcasingSKILL.md:39:49 ↗highlightingSKILL.md:39:77 ↗showcasingopenai-gpt/instructions.md:21:40 ↗
Showing 5 of 23 occurrences. The JSON report includes every source location.
warning"Serves/stands as" instead of "is"×22
Dressing up "is" as "serves as"/"stands as" is a common LLM avoidance tic.
Just use "is" or the plain verb.
serves asREADME.md:256:42 ↗plays a crucial roleREADME.md:279:81 ↗serves asREADME.md:279:107 ↗serves asSKILL.md:44:38 ↗plays a crucial roleSKILL.md:81:65 ↗
Showing 5 of 22 occurrences. The JSON report includes every source location.
warningPossible passive voice×17
Naive check for passive voice (no POS tagger).
Prefer active voice: name the actor. --ignore passive-voice if noisy.
are providedREADME.md:165:31 ↗are weightedREADME.md:283:82 ↗was extrudedSKILL.md:18:156 ↗is discussedSKILL.md:51:58 ↗was incorrectly flaggeddocs/CONTRIBUTING.md:66:17 ↗
Showing 5 of 17 occurrences. The JSON report includes every source location.
warningUnsourced authority×15
This attributes a claim to an unnamed authority.
Cite the actual source or cut the claim.
Experts believeREADME.md:253:43 ↗Studies showREADME.md:253:62 ↗Experts believeSKILL.md:41:39 ↗Studies showSKILL.md:41:58 ↗Industry reportsSKILL.md:41:74 ↗
Showing 5 of 15 occurrences. The JSON report includes every source location.
warningFormal connective overload×11
Formal connectives pile up in LLM prose.
Use "also" or start a new sentence.
AdditionallyREADME.md:255:39 ↗furthermoreREADME.md:277:84 ↗furthermoreSKILL.md:80:39 ↗moreoverSKILL.md:80:52 ↗additionallyreferences/ai-vocabulary.md:11:3 ↗
Showing 5 of 11 occurrences. The JSON report includes every source location.
warningTravel-brochure word "nestled"×10
"nestled" is travel-brochure prose.
Use "in" or "near".
nestledREADME.md:252:45 ↗nestledSKILL.md:40:41 ↗nestledSKILL.md:79:269 ↗nestledopenai-gpt/instructions.md:22:32 ↗nestledopenai-gpt/instructions.md:27:230 ↗
Showing 5 of 10 occurrences. The JSON report includes every source location.
warningStacked hedge / confidence-calibration opener×9
Stacked hedges, or flagging your own "noteworthy" aside, is LLM throat-clearing.
Pick one hedge, or state the fact plainly.
could potentiallyREADME.md:271:42 ↗could potentiallySKILL.md:59:38 ↗It's worth notingSKILL.md:63:75 ↗could potentiallyopenai-gpt/instructions.md:49:30 ↗could potentiallyreferences/ai-vocabulary.md:150:4 ↗
Showing 5 of 9 occurrences. The JSON report includes every source location.
warningMarketing filler "seamless"×8
"seamless" is marketing filler.
Describe the actual flow.
seamlessREADME.md:276:151 ↗seamlessSKILL.md:43:94 ↗seamlessSKILL.md:79:110 ↗seamlessSKILL.md:141:69 ↗seamlessopenai-gpt/instructions.md:27:71 ↗
Showing 5 of 8 occurrences. The JSON report includes every source location.
warningWeasel / hedge word×8
Hedge and intensifier words weaken the sentence.
Cut it or be specific.
arguablySKILL.md:59:74 ↗actuallydocs/CONTRIBUTING.md:69:8 ↗Verydocs/IMPROVEMENTS.md:79:3 ↗arguablyopenai-gpt/instructions.md:49:66 ↗actuallyreferences/ai-vocabulary.md:13:87 ↗
Showing 5 of 8 occurrences. The JSON report includes every source location.
warningCorporate verb "leverage"×7
"leverage" as a verb is corporate-speak.
Use "use".
leverageSKILL.md:79:136 ↗leverageopenai-gpt/instructions.md:27:97 ↗leverageopenai-gpt/instructions.md:55:105 ↗leveragingreferences/ai-vocabulary.md:41:3 ↗leveragereferences/ai-vocabulary.md:41:14 ↗
Showing 5 of 7 occurrences. The JSON report includes every source location.
warningEm-dash overuse×5
A high em-dash rate is a common LLM tell.
Replace some with periods or commas.
21 em-dashes in 1185 wordsREADME.md:1:1 ↗8 em-dashes in 262 wordsdocs/CONTRIBUTING.md:1:1 ↗4 em-dashes in 326 wordsdocs/INTEGRATIONS.md:1:1 ↗33 em-dashes in 577 wordsopenai-gpt/instructions.md:1:1 ↗4 em-dashes in 308 wordstests/fixtures/ai-sample-1.txt:1:1 ↗
warningAd-copy verb "boasts"×5
"X boasts Y" is product-page voice.
Use "has" or "includes".
warningVague praise "robust"×5
"robust" is vague praise.
Say how it holds up.
warningShowy word "myriad"×5
"myriad" is showy.
Use "many" or a number.
warningBold-text overuse×4
Frequent bolding is a common LLM formatting tell.
Reserve bold for genuine emphasis; use fewer spans.
37 bolded spans in 1185 wordsREADME.md:1:1 ↗6 bolded spans in 296 wordsdocs/PATTERNS.md:1:1 ↗42 bolded spans in 577 wordsopenai-gpt/instructions.md:1:1 ↗58 bolded spans in 680 wordsreferences/patterns.md:1:1 ↗
warningVague legacy/location praise×4
This phrase is empty legacy/location praise.
Say the specific fact instead.
in the heart ofreferences/ai-vocabulary.md:70:4 ↗indelible markreferences/ai-vocabulary.md:96:4 ↗indelible markreferences/patterns.md:11:130 ↗in the heart ofreferences/patterns.md:53:98 ↗
warning"**Label:** text" bullet×3
Bolded label-then-colon bullets are an LLM list default.
Write the point as a plain sentence, or drop the bold.
- **Tier 1 (Dead giveaways):**SKILL.md:79:1 ↗- **Tier 2 (Suspicious in density):**SKILL.md:80:1 ↗- **Phrases:**SKILL.md:81:1 ↗
warning"Landscape" metaphor×3
The "landscape" metaphor is overused by LLMs.
Be concrete about what changed.
evolving landscapereferences/ai-vocabulary.md:17:31 ↗evolving landscapereferences/ai-vocabulary.md:95:4 ↗evolving landscapereferences/patterns.md:11:83 ↗
warning"In today's world" opener×2
"in today's world" is throat-clearing.
Cut it.
In today's digital ageREADME.md:279:53 ↗In today's digital ageSKILL.md:81:17 ↗
warning"Deep dive" filler opener×2
"deep dive" / "let's dive in" is a filler opener.
Just start.
deep diveSKILL.md:79:293 ↗let's dive inSKILL.md:81:217 ↗
warning"In the realm of" padding×2
"in the realm of" is padding.
Use "in" or name the field.
in the realm ofSKILL.md:81:114 ↗in the realm ofreferences/ai-vocabulary.md:121:3 ↗
warningTitle Case Every Word heading×2
Capitalizing every word in a heading is an LLM formatting default.
Use sentence case.
## OpenAI Custom GPTdocs/INTEGRATIONS.md:89:1 ↗### With Actions APIdocs/INTEGRATIONS.md:97:1 ↗
warningEmpty superlative "cutting-edge"×2
"cutting-edge" carries no information.
Name the specific capability.
cutting-edgereferences/ai-vocabulary.md:53:3 ↗state-of-the-artreferences/ai-vocabulary.md:76:4 ↗
warning"When it comes to" filler×2
"when it comes to" is filler.
Use "for" or "with".
when it comes toreferences/ai-vocabulary.md:116:3 ↗When it comes toreferences/patterns.md:304:3 ↗
warning"Game-changer" cliche×1
"game-changer" is marketing cliche.
State the concrete effect.
game-changingreferences/ai-vocabulary.md:78:4 ↗
warning"At the end of the day" cliche×1
"at the end of the day" is a dead cliche.
Cut it or say "ultimately".
at the end of the dayreferences/ai-vocabulary.md:115:3 ↗
warningRedundant "In conclusion" signpost×1
"In conclusion" signposting is unnecessary in short prose.
End on the point itself.
In conclusiontests/fixtures/ai-sample-1.txt:15:1 ↗
Iampattanayak/Claude-Humanizer77 / 100Needs workFindings 8711 errors · 76 warningsFiles 2Words 1,911
This writing-rules repository includes intentional examples and test fixtures of the patterns it teaches writers to avoid. Those examples contribute to its score; review the findings in context.
Findings by rule
Expand a rule for matched text, rewrite guidance, and links to the original source. Showing up to five occurrences per rule.
errorLeftover AI-generation artifact×5
This is a chatbot sign-off or citation scrap left in from an unedited paste.
Remove it; it means the output was never read before publishing.
I hope this helpsREADME.md:66:39 ↗I hope this helpsSKILL.md:316:21 ↗Of course!SKILL.md:316:40 ↗Certainly!SKILL.md:316:52 ↗I hope this helpsSKILL.md:474:50 ↗
errorFiller word "delve"×2
"delve" is a hallmark LLM word rarely used in natural writing.
Use "look at", "go into", or cut.
delveREADME.md:10:173 ↗delveSKILL.md:160:65 ↗
error"Tapestry" metaphor×2
"tapestry" as a metaphor is LLM boilerplate.
Name the actual thing.
intricate tapestryREADME.md:10:198 ↗tapestrySKILL.md:160:238 ↗
error"It's not X, it's Y" reversal×1
The "It's not X, it's Y" reversal reads as generated.
Make the claim once, plainly.
It's not just X, it'sREADME.md:71:60 ↗
error"It's important to note" filler×1
warningSuperficial-analysis "-ing" filler×10
These "-ing" connectives gesture at analysis without adding any.
State the actual point instead.
highlightingSKILL.md:102:21 ↗underscoringSKILL.md:102:34 ↗emphasizingSKILL.md:102:47 ↗fosteringSKILL.md:102:135 ↗showcasingSKILL.md:102:166 ↗
Showing 5 of 10 occurrences. The JSON report includes every source location.
warningAI-vocabulary word×9
This word shows up disproportionately in LLM output.
Use a plainer, more specific word.
intricateREADME.md:10:198 ↗enduringSKILL.md:74:211 ↗vibrantSKILL.md:116:31 ↗enduringSKILL.md:160:85 ↗garnerSKILL.md:160:115 ↗
Showing 5 of 9 occurrences. The JSON report includes every source location.
warning"Serves/stands as" instead of "is"×7
Dressing up "is" as "serves as"/"stands as" is a common LLM avoidance tic.
Just use "is" or the plain verb.
serves asREADME.md:69:88 ↗serves asSKILL.md:74:28 ↗serves asSKILL.md:174:21 ↗stands asSKILL.md:174:31 ↗serves asSKILL.md:483:30 ↗
Showing 5 of 7 occurrences. The JSON report includes every source location.
warningOverused intensifier×7
Everything is "crucial" in LLM prose.
Reserve it for what truly is; else cut.
vitalSKILL.md:74:66 ↗crucialSKILL.md:74:84 ↗pivotalSKILL.md:74:92 ↗crucialSKILL.md:160:56 ↗pivotalSKILL.md:160:219 ↗
Showing 5 of 7 occurrences. The JSON report includes every source location.
warningWeasel / hedge word×6
Hedge and intensifier words weaken the sentence.
Cut it or be specific.
obviouslyREADME.md:20:96 ↗obviouslySKILL.md:33:67 ↗obviouslySKILL.md:33:159 ↗obviouslySKILL.md:459:27 ↗ratherSKILL.md:462:69 ↗
Showing 5 of 6 occurrences. The JSON report includes every source location.
warningWordy phrase×6
This phrase has a shorter equivalent.
e.g. "in order to" -> "to", "due to the fact that" -> "because".
In order toSKILL.md:359:4 ↗Due to the fact thatSKILL.md:360:4 ↗At this point in timeSKILL.md:361:4 ↗In the event thatSKILL.md:362:4 ↗has the ability toSKILL.md:363:15 ↗
Showing 5 of 6 occurrences. The JSON report includes every source location.
warningPossible passive voice×5
Naive check for passive voice (no POS tagger).
Prefer active voice: name the actor. --ignore passive-voice if noisy.
are statistically programmedREADME.md:10:6 ↗be arguedREADME.md:65:62 ↗are overusedSKILL.md:188:90 ↗were strippedSKILL.md:425:39 ↗be arguedSKILL.md:486:49 ↗
warningTitle Case Every Word heading×5
Capitalizing every word in a heading is an LLM formatting default.
Use sentence case.
## How It WorksREADME.md:16:1 ↗## Anti-Pattern Detection MatrixREADME.md:59:1 ↗## PERSONALITY AND SOULSKILL.md:36:1 ↗## LANGUAGE AND GRAMMAR PATTERNSSKILL.md:156:1 ↗## FILLER AND HEDGINGSKILL.md:354:1 ↗
warningAd-copy verb "boasts"×3
"X boasts Y" is product-page voice.
Use "has" or "includes".
boastsREADME.md:69:103 ↗boastsSKILL.md:116:21 ↗boastsSKILL.md:174:63 ↗
warning"**Label:** text" bullet×3
Bolded label-then-colon bullets are an LLM list default.
Write the point as a plain sentence, or drop the bold.
* **Copula Avoidance:**README.md:69:1 ↗* **The Rule of Three:**README.md:70:1 ↗* **Negative Parallelisms:**README.md:71:1 ↗
warningUnsourced authority×3
This attributes a claim to an unnamed authority.
Cite the actual source or cut the claim.
Industry reportsSKILL.md:130:21 ↗Observers have citedSKILL.md:130:39 ↗Experts argueSKILL.md:130:61 ↗
warningStacked hedge / confidence-calibration opener×2
Stacked hedges, or flagging your own "noteworthy" aside, is LLM throat-clearing.
Pick one hedge, or state the fact plainly.
could potentiallyREADME.md:65:35 ↗could potentiallySKILL.md:486:31 ↗
warningBold-text overuse×2
Frequent bolding is a common LLM formatting tell.
Reserve bold for genuine emphasis; use fewer spans.
8 bolded spans in 329 wordsREADME.md:1:1 ↗107 bolded spans in 1582 wordsSKILL.md:1:1 ↗
warning"Landscape" metaphor×2
The "landscape" metaphor is overused by LLMs.
Be concrete about what changed.
evolving landscapeSKILL.md:74:339 ↗evolving landscapeSKILL.md:475:67 ↗
warningVague legacy/location praise×2
This phrase is empty legacy/location praise.
Say the specific fact instead.
indelible markSKILL.md:74:372 ↗in the heart ofSKILL.md:116:149 ↗
warningTravel-brochure word "nestled"×2
"nestled" is travel-brochure prose.
Use "in" or "near".
nestledSKILL.md:116:140 ↗nestledSKILL.md:476:52 ↗
warningFormal connective overload×1
Formal connectives pile up in LLM prose.
Use "also" or start a new sentence.
AdditionallySKILL.md:160:30 ↗
warningMarketing filler "seamless"×1
vitejs/vite92 / 100ExcellentFindings 2,8345 errors · 2,829 warningsFiles 307Words 137,657
Findings by rule
Expand a rule for matched text, rewrite guidance, and links to the original source. Showing up to five occurrences per rule.
error"It's important to note" filler×3
"it's important to note" adds nothing.
Just state the note.
It is important to notedocs/config/index.md:83:1 ↗It's important to notedocs/guide/env-and-mode.md:207:1 ↗It is important to notedocs/guide/static-deploy.md:38:1 ↗
error"Not just X, but Y" construction×2
The "not just X, but Y" escalation is one of the strongest LLM tells.
Cut it and state the point directly.
not only being favored more by users butdocs/blog/announcing-vite6.md:36:199 ↗not only in production butdocs/blog/announcing-vite8-1.md:63:52 ↗
warning"**Label:** text" bullet×1746
Bolded label-then-colon bullets are an LLM list default.
Write the point as a plain sentence, or drop the bold.
- **Built-in tsconfig support:**docs/blog/announcing-vite8-beta.md:139:1 ↗- ** support:**docs/blog/announcing-vite8-beta.md:140:1 ↗- **Performance:**docs/blog/announcing-vite8.md:63:1 ↗- **Compatibility:**docs/blog/announcing-vite8.md:64:1 ↗- **Advanced features:**docs/blog/announcing-vite8.md:65:1 ↗
Showing 5 of 1746 occurrences. The JSON report includes every source location.
warningPossible passive voice×860
Naive check for passive voice (no POS tagger).
Prefer active voice: name the actor. --ignore passive-voice if noisy.
is only considered.github/SECURITY.md:9:76 ↗are treated.github/SECURITY.md:25:127 ↗are trusted.github/SECURITY.md:28:122 ↗are trusted.github/SECURITY.md:31:96 ↗are expected.github/SECURITY.md:36:114 ↗
Showing 5 of 860 occurrences. The JSON report includes every source location.
warningTitle Case Every Word heading×95
Capitalizing every word in a heading is an LLM formatting default.
Use sentence case.
### What Vite Does Not Trust.github/SECURITY.md:14:1 ↗### What Vite Trusts.github/SECURITY.md:19:1 ↗## Git Commit Message Convention.github/commit-convention.md:1:1 ↗# Vite Contributing GuideCONTRIBUTING.md:1:1 ↗### Docs Translation ContributionCONTRIBUTING.md:40:1 ↗
Showing 5 of 95 occurrences. The JSON report includes every source location.
warningWeasel / hedge word×43
Hedge and intensifier words weaken the sentence.
Cut it or be specific.
reallyCONTRIBUTING.md:3:11 ↗reallyCONTRIBUTING.md:80:6 ↗actuallyCONTRIBUTING.md:101:164 ↗quiteCONTRIBUTING.md:117:174 ↗extremelyREADME.md:36:200 ↗
Showing 5 of 43 occurrences. The JSON report includes every source location.
warningSentence buried behind "there is"×40
"There is / are" pushes the real subject back.
Start with the real subject.
there isCONTRIBUTING.md:188:254 ↗There aredocs/blog/announcing-vite2.md:46:220 ↗There isdocs/blog/announcing-vite3.md:54:103 ↗There isdocs/blog/announcing-vite3.md:56:1 ↗there aredocs/blog/announcing-vite3.md:104:232 ↗
Showing 5 of 40 occurrences. The JSON report includes every source location.
warningCorporate verb "leverage"×11
"leverage" as a verb is corporate-speak.
Use "use".
leveragesdocs/blog/announcing-vite2.md:32:186 ↗leveragingdocs/blog/announcing-vite2.md:70:97 ↗leveragedocs/blog/announcing-vite6.md:89:75 ↗leveragedocs/blog/announcing-vite8-beta.md:57:69 ↗leveragedocs/blog/announcing-vite8-beta.md:61:285 ↗
Showing 5 of 11 occurrences. The JSON report includes every source location.
warningBold-text overuse×9
Frequent bolding is a common LLM formatting tell.
Reserve bold for genuine emphasis; use fewer spans.
65 bolded spans in 2014 wordsdocs/config/build-options.md:1:1 ↗21 bolded spans in 706 wordsdocs/config/dep-optimization-options.md:1:1 ↗18 bolded spans in 363 wordsdocs/config/preview-options.md:1:1 ↗76 bolded spans in 2559 wordsdocs/config/shared-options.md:1:1 ↗13 bolded spans in 357 wordsdocs/config/ssr-options.md:1:1 ↗
Showing 5 of 9 occurrences. The JSON report includes every source location.
warningWordy phrase×8
This phrase has a shorter equivalent.
e.g. "in order to" -> "to", "due to the fact that" -> "because".
In order toCONTRIBUTING.md:101:141 ↗a large number ofdocs/blog/announcing-vite8-1.md:61:219 ↗is able todocs/config/dep-optimization-options.md:112:60 ↗In order todocs/config/server-options.md:112:178 ↗In order todocs/guide/api-plugin.md:405:98 ↗
Showing 5 of 8 occurrences. The JSON report includes every source location.
warningFormal connective overload×5
Formal connectives pile up in LLM prose.
Use "also" or start a new sentence.
additionallydocs/guide/api-plugin.md:630:19 ↗Additionallydocs/guide/features.md:768:219 ↗Additionallydocs/guide/features.md:808:225 ↗Additionallydocs/guide/index.md:27:395 ↗additionallypackages/vite/LICENSE.md:27:29 ↗
warningVague praise "robust"×3
"robust" is vague praise.
Say how it holds up.
warningEmpty superlative "cutting-edge"×3
"cutting-edge" carries no information.
Name the specific capability.
bleeding edgedocs/guide/index.md:266:175 ↗bleeding edgepackages/plugin-legacy/README.md:94:189 ↗bleeding edgepackages/plugin-legacy/README.md:96:38 ↗
warning"Serves/stands as" instead of "is"×2
Dressing up "is" as "serves as"/"stands as" is a common LLM avoidance tic.
Just use "is" or the plain verb.
serve asdocs/config/shared-options.md:95:14 ↗function aspackages/vite/CHANGELOG.md:314:48 ↗
warningAI-vocabulary word×1
This word shows up disproportionately in LLM output.
Use a plainer, more specific word.
warningOverused intensifier×1
Everything is "crucial" in LLM prose.
Reserve it for what truly is; else cut.
warningMarketing filler "seamless"×1
"seamless" is marketing filler.
Describe the actual flow.
seamlesslydocs/guide/api-environment.md:22:267 ↗
warningRedundant "In conclusion" signpost×1
"In conclusion" signposting is unnecessary in short prose.
End on the point itself.
In summarydocs/releases.md:21:1 ↗
honojs/hono94 / 100ExcellentFindings 571 errors · 56 warningsFiles 59Words 3,704
Findings by rule
Expand a rule for matched text, rewrite guidance, and links to the original source. Showing up to five occurrences per rule.
error"Not just X, but Y" construction×1
The "not just X, but Y" escalation is one of the strongest LLM tells.
Cut it and state the point directly.
not just for us as individuals, butdocs/CODE_OF_CONDUCT.md:25:28 ↗
warningPossible passive voice×43
Naive check for passive voice (no POS tagger).
Prefer active voice: name the actor. --ignore passive-voice if noisy.
are createdREADME.md:81:68 ↗be removedadapters/aws-lambda/README.md:18:42 ↗be removedadapters/bun/README.md:18:35 ↗be removedadapters/cloudflare-workers/README.md:18:50 ↗be removedadapters/deno/README.md:20:36 ↗
Showing 5 of 43 occurrences. The JSON report includes every source location.
warningSentence buried behind "there is"×6
"There is / are" pushes the real subject back.
Start with the real subject.
There isdocs/MIGRATION.md:7:1 ↗There aredocs/MIGRATION.md:23:1 ↗There aredocs/MIGRATION.md:61:1 ↗There isdocs/MIGRATION.md:152:1 ↗There aredocs/MIGRATION.md:167:1 ↗
Showing 5 of 6 occurrences. The JSON report includes every source location.
warningWeasel / hedge word×4
Hedge and intensifier words weaken the sentence.
Cut it or be specific.
reallyREADME.md:43:51 ↗fairlydocs/CODE_OF_CONDUCT.md:64:63 ↗basicallydocs/CONTRIBUTING.md:14:64 ↗actuallydocs/CONTRIBUTING.md:25:51 ↗
warningTitle Case Every Word heading×3
Capitalizing every word in a heading is an LLM formatting default.
Use sentence case.
# Hono HTTP Benchmarkbenchmarks/http-server/README.md:1:1 ↗### In Pull Requestsbenchmarks/http-server/README.md:7:1 ↗## AI Usage Policydocs/CONTRIBUTING.md:21:1 ↗
facebook/react96 / 100ExcellentFindings 1,8613 errors · 1,858 warningsFiles 2,239Words 184,382
Findings by rule
Expand a rule for matched text, rewrite guidance, and links to the original source. Showing up to five occurrences per rule.
error"It's important to note" filler×2
"it's important to note" adds nothing.
Just state the note.
it's worth notingCHANGELOG.md:2203:275 ↗It's important to notepackages/react-server/README.md:249:272 ↗
error"Not just X, but Y" construction×1
The "not just X, but Y" escalation is one of the strongest LLM tells.
Cut it and state the point directly.
not just the semantics of the input butcompiler/docs/DESIGN_GOALS.md:33:60 ↗
warningPossible passive voice×1277
Naive check for passive voice (no POS tagger).
Prefer active voice: name the actor. --ignore passive-voice if noisy.
be installed.claude/instructions.md:28:18 ↗are handled.claude/instructions.md:46:8 ↗be gated.claude/skills/feature-flags/SKILL.md:70:40 ↗be added.claude/skills/feature-flags/SKILL.md:78:43 ↗are tested.claude/skills/flags/SKILL.md:38:46 ↗
Showing 5 of 1277 occurrences. The JSON report includes every source location.
warningTitle Case Every Word heading×278
Capitalizing every word in a heading is an LLM formatting default.
Use sentence case.
# Extract Error Codes.claude/skills/extract-errors/SKILL.md:6:1 ↗# React Feature Flags.claude/skills/feature-flags/SKILL.md:6:1 ↗## Checking Flag States.claude/skills/feature-flags/SKILL.md:54:1 ↗## Debugging Channel-Specific Failures.claude/skills/feature-flags/SKILL.md:67:1 ↗# Flow Type Checking.claude/skills/flow/SKILL.md:6:1 ↗
Showing 5 of 278 occurrences. The JSON report includes every source location.
warningWeasel / hedge word×78
Hedge and intensifier words weaken the sentence.
Cut it or be specific.
very.claude/skills/test/SKILL.md:44:51 ↗very.github/PULL_REQUEST_TEMPLATE.md:32:41 ↗ratherCHANGELOG.md:1972:41 ↗veryCHANGELOG.md:2228:64 ↗reallyCHANGELOG.md:2267:100 ↗
Showing 5 of 78 occurrences. The JSON report includes every source location.
warning"**Label:** text" bullet×58
Bolded label-then-colon bullets are an LLM list default.
Write the point as a plain sentence, or drop the bold.
* **Automatic batching:**CHANGELOG.md:836:1 ↗* **Suspense trees are always consistent:**CHANGELOG.md:840:1 ↗* **Components can now render :**CHANGELOG.md:852:1 ↗* **In tests, warnings are now opt-in:**CHANGELOG.md:853:1 ↗* **No warning about on unmounted components:**CHANGELOG.md:854:1 ↗
Showing 5 of 58 occurrences. The JSON report includes every source location.
warningBold-text overuse×50
Frequent bolding is a common LLM formatting tell.
Reserve bold for genuine emphasis; use fewer spans.
4 bolded spans in 109 words.claude/instructions.md:1:1 ↗5 bolded spans in 190 words.claude/skills/test/SKILL.md:1:1 ↗19 bolded spans in 627 wordscompiler/.claude/agents/port-pass.md:1:1 ↗8 bolded spans in 240 wordscompiler/.claude/skills/compiler-commit/SKILL.md:1:1 ↗12 bolded spans in 532 wordscompiler/.claude/skills/compiler-port/SKILL.md:1:1 ↗
Showing 5 of 50 occurrences. The JSON report includes every source location.
warningSentence buried behind "there is"×44
"There is / are" pushes the real subject back.
Start with the real subject.
there isCHANGELOG.md:492:145 ↗There isCHANGELOG.md:802:151 ↗there isCHANGELOG.md:1158:43 ↗there isCHANGELOG.md:1599:18 ↗There areCHANGELOG.md:1791:3 ↗
Showing 5 of 44 occurrences. The JSON report includes every source location.
warning"Serves/stands as" instead of "is"×18
Dressing up "is" as "serves as"/"stands as" is a common LLM avoidance tic.
Just use "is" or the plain verb.
function asCHANGELOG.md:2540:36 ↗serves ascompiler/CLAUDE.md:3:100 ↗serves ascompiler/docs/rust-port/rust-compiler-workflow-guide.md:354:58 ↗serve ascompiler/docs/rust-port/rust-port-0001-babel-ast.md:33:395 ↗serve ascompiler/docs/rust-port/rust-port-0002-scope-types.md:32:67 ↗
Showing 5 of 18 occurrences. The JSON report includes every source location.
warningWordy phrase×17
This phrase has a shorter equivalent.
e.g. "in order to" -> "to", "due to the fact that" -> "because".
a large number ofCHANGELOG.md:784:34 ↗in order toCHANGELOG.md:2393:59 ↗in order toCHANGELOG.md:2402:546 ↗in order toCHANGELOG.md:2988:108 ↗with regard toCODE_OF_CONDUCT.md:65:39 ↗
Showing 5 of 17 occurrences. The JSON report includes every source location.
warningEm-dash overuse×12
A high em-dash rate is a common LLM tell.
Replace some with periods or commas.
7 em-dashes in 213 wordscompiler/.claude/agents/analyze-pass-impact.md:1:1 ↗4 em-dashes in 240 wordscompiler/.claude/skills/compiler-commit/SKILL.md:1:1 ↗10 em-dashes in 245 wordscompiler/.claude/skills/compiler-verify/SKILL.md:1:1 ↗16 em-dashes in 997 wordscompiler/crates/TODO.md:1:1 ↗9 em-dashes in 852 wordscompiler/docs/rust-port/rust-port-0002-scope-types.md:1:1 ↗
Showing 5 of 12 occurrences. The JSON report includes every source location.
warningSuperficial-analysis "-ing" filler×9
These "-ing" connectives gesture at analysis without adding any.
State the actual point instead.
highlightingCHANGELOG.md:1299:7 ↗fosteringCODE_OF_CONDUCT.md:5:20 ↗highlightingpackages/react-devtools/CHANGELOG.md:174:30 ↗highlightingpackages/react-devtools/CHANGELOG.md:494:21 ↗highlightingpackages/react-devtools/CHANGELOG.md:876:132 ↗
Showing 5 of 9 occurrences. The JSON report includes every source location.
warningOverused intensifier×5
Everything is "crucial" in LLM prose.
Reserve it for what truly is; else cut.
Essentialcompiler/docs/rust-port/rust-compiler-workflow-guide.md:305:5 ↗essentialcompiler/packages/babel-plugin-react-compiler/docs/passes/17-buildReactiveScopeTerminalsHIR.md:13:86 ↗essentialfixtures/nesting/README.md:11:73 ↗essentialfixtures/nesting/README.md:73:109 ↗essentialpackages/react-devtools/README.md:59:115 ↗
warningFormal connective overload×4
Formal connectives pile up in LLM prose.
Use "also" or start a new sentence.
AdditionallyCHANGELOG.md:514:136 ↗AdditionallyCHANGELOG.md:2259:107 ↗Additionallycompiler/docs/rust-port/rust-port-research.md:72:516 ↗Additionallypackages/react-server/README.md:89:1 ↗
warningStacked hedge / confidence-calibration opener×3
Stacked hedges, or flagging your own "noteworthy" aside, is LLM throat-clearing.
Pick one hedge, or state the fact plainly.
it's worth notingCHANGELOG.md:2203:275 ↗Notably,compiler/docs/DESIGN_GOALS.md:10:66 ↗could potentiallycompiler/packages/babel-plugin-react-compiler/docs/passes/11-inferReactiveScopeVariables.md:176:102 ↗
warningCorporate verb "leverage"×2
"leverage" as a verb is corporate-speak.
Use "use".
warningEmpty superlative "cutting-edge"×2
"cutting-edge" carries no information.
Name the specific capability.
warningVague praise "robust"×1
withastro/astro97 / 100ExcellentFindings 2,90360 errors · 2,843 warningsFiles 2,449Words 432,840
Findings by rule
Expand a rule for matched text, rewrite guidance, and links to the original source. Showing up to five occurrences per rule.
error"Not just X, but Y" construction×60
The "not just X, but Y" escalation is one of the strongest LLM tells.
Cut it and state the point directly.
not only five centuries, butbenchmark/static-projects/build-hybrid/src/pages/about.astro:15:16 ↗not only five centuries, butbenchmark/static-projects/build-hybrid/src/pages/about.astro:25:16 ↗not only five centuries, butbenchmark/static-projects/build-hybrid/src/pages/about.astro:38:16 ↗not only five centuries, butbenchmark/static-projects/build-hybrid/src/pages/about.astro:48:16 ↗not only five centuries, butbenchmark/static-projects/build-hybrid/src/pages/blog/[id].astro:32:20 ↗
Showing 5 of 60 occurrences. The JSON report includes every source location.
warningPossible passive voice×2191
Naive check for passive voice (no POS tagger).
Prefer active voice: name the actor. --ignore passive-voice if noisy.
be exported.agents/evals/README.md:5:27 ↗is deleted.agents/evals/README.md:22:43 ↗are copied.agents/evals/README.md:22:108 ↗is added.agents/skills/astro-adversary-blue/SKILL.md:30:136 ↗is focused.agents/skills/astro-adversary-purple/SKILL.md:26:28 ↗
Showing 5 of 2191 occurrences. The JSON report includes every source location.
warningWeasel / hedge word×260
Hedge and intensifier words weaken the sentence.
Cut it or be specific.
rather.agents/skills/astro-adversary-blue/SKILL.md:18:314 ↗rather.agents/skills/astro-adversary-purple/SKILL.md:32:265 ↗rather.agents/skills/astro-adversary-purple/SKILL.md:51:203 ↗rather.agents/skills/astro-code-review/SKILL.md:45:190 ↗clearly.agents/skills/astro-code-review/SKILL.md:66:38 ↗
Showing 5 of 260 occurrences. The JSON report includes every source location.
warningTitle Case Every Word heading×90
Capitalizing every word in a heading is an LLM formatting default.
Use sentence case.
# Analyze GitHub Action Logs.agents/skills/analyze-github-action-logs/SKILL.md:7:1 ↗### Per-Run Summary Table.agents/skills/analyze-github-action-logs/SKILL.md:85:1 ↗# Astro Adversary Blue Team.agents/skills/astro-adversary-blue/SKILL.md:6:1 ↗## Establish The Contract.agents/skills/astro-adversary-blue/SKILL.md:10:1 ↗## Develop An Independent Alternative.agents/skills/astro-adversary-blue/SKILL.md:16:1 ↗
Showing 5 of 90 occurrences. The JSON report includes every source location.
warningSuperficial-analysis "-ing" filler×78
These "-ing" connectives gesture at analysis without adding any.
State the actual point instead.
highlightingexamples/with-mdx/src/pages/index.mdx:19:11 ↗highlightingexamples/with-mdx/src/pages/index.mdx:21:24 ↗highlightingpackages/astro-prism/README.md:3:16 ↗highlightingpackages/astro-prism/README.md:7:45 ↗highlightingpackages/astro/CHANGELOG-v2.md:1984:222 ↗
Showing 5 of 78 occurrences. The JSON report includes every source location.
warningSentence buried behind "there is"×77
"There is / are" pushes the real subject back.
Start with the real subject.
there are.agents/skills/astro-code-review/SKILL.md:356:85 ↗there is.agents/skills/astro-code-review/SKILL.md:377:221 ↗there is.agents/skills/triage/fix.md:174:173 ↗there is.agents/skills/writing-comments/SKILL.md:193:19 ↗There is.agents/skills/writing-comments/SKILL.md:208:33 ↗
Showing 5 of 77 occurrences. The JSON report includes every source location.
warningFormal connective overload×43
Formal connectives pile up in LLM prose.
Use "also" or start a new sentence.
Additionallypackages/astro/CHANGELOG-v2.md:1907:3 ↗Additionallypackages/astro/CHANGELOG-v2.md:1979:5 ↗Additionallypackages/astro/CHANGELOG-v2.md:2197:3 ↗Additionallypackages/astro/CHANGELOG-v2.md:2549:3 ↗Additionallypackages/astro/CHANGELOG-v3.md:487:145 ↗
Showing 5 of 43 occurrences. The JSON report includes every source location.
warningWordy phrase×34
This phrase has a shorter equivalent.
e.g. "in order to" -> "to", "due to the fact that" -> "because".
in order topackages/astro-rss/CHANGELOG.md:19:243 ↗in order topackages/astro/CHANGELOG-v1.md:1051:122 ↗in order topackages/astro/CHANGELOG-v2.md:1491:266 ↗In order topackages/astro/CHANGELOG-v2.md:1932:3 ↗In order topackages/astro/CHANGELOG-v2.md:2238:3 ↗
Showing 5 of 34 occurrences. The JSON report includes every source location.
warning"**Label:** text" bullet×25
Bolded label-then-colon bullets are an LLM list default.
Write the point as a plain sentence, or drop the bold.
- **Node.js:**.agents/skills/triage/fix.md:60:1 ↗- **Browsers:**.agents/skills/triage/fix.md:61:1 ↗- **Note:**examples/blog/src/content/blog/using-mdx.mdx:31:1 ↗- **NebulaProtect Supercharged:**examples/starlog/src/content/releases/1_0.md:19:1 ↗- **NebulaConnect for Teams:**examples/starlog/src/content/releases/1_0.md:20:1 ↗
Showing 5 of 25 occurrences. The JSON report includes every source location.
warningBold-text overuse×13
Frequent bolding is a common LLM formatting tell.
Reserve bold for genuine emphasis; use fewer spans.
24 bolded spans in 684 words.agents/skills/analyze-github-action-logs/SKILL.md:1:1 ↗25 bolded spans in 498 words.agents/skills/astro-developer/SKILL.md:1:1 ↗77 bolded spans in 993 words.agents/skills/astro-developer/architecture.md:1:1 ↗47 bolded spans in 859 words.agents/skills/astro-developer/constraints.md:1:1 ↗48 bolded spans in 815 words.agents/skills/astro-developer/debugging.md:1:1 ↗
Showing 5 of 13 occurrences. The JSON report includes every source location.
warningEm-dash overuse×11
A high em-dash rate is a common LLM tell.
Replace some with periods or commas.
23 em-dashes in 684 words.agents/skills/analyze-github-action-logs/SKILL.md:1:1 ↗3 em-dashes in 93 words.agents/skills/merge/SKILL.md:1:1 ↗17 em-dashes in 861 words.agents/skills/merge/fix-ci.md:1:1 ↗14 em-dashes in 325 words.agents/skills/merge/resolve-conflicts.md:1:1 ↗9 em-dashes in 399 words.agents/skills/triage/SKILL.md:1:1 ↗
Showing 5 of 11 occurrences. The JSON report includes every source location.
warningStacked hedge / confidence-calibration opener×5
Stacked hedges, or flagging your own "noteworthy" aside, is LLM throat-clearing.
Pick one hedge, or state the fact plainly.
warningAI-vocabulary word×4
This word shows up disproportionately in LLM output.
Use a plainer, more specific word.
vibrantexamples/portfolio/src/content/work/nested/duvet-genius.md:5:61 ↗intricatepackages/astro/e2e/fixtures/cloudflare/src/data/space-probes/voyager-2.md:13:14 ↗intricatepackages/astro/test/fixtures/content-layer/src/data/space-probes/voyager-2.md:13:14 ↗intricatepackages/integrations/cloudflare/test/fixtures/vite-plugin/src/data/space-probes/voyager-2.md:13:14 ↗
warningMarketing filler "seamless"×4
"seamless" is marketing filler.
Describe the actual flow.
warningOverused intensifier×3
Everything is "crucial" in LLM prose.
Reserve it for what truly is; else cut.
warning"Serves/stands as" instead of "is"×3
Dressing up "is" as "serves as"/"stands as" is a common LLM avoidance tic.
Just use "is" or the plain verb.
warningEmpty superlative "cutting-edge"×1
"cutting-edge" carries no information.
Name the specific capability.
warning"Deep dive" filler opener×1
"deep dive" / "let's dive in" is a filler opener.
Just start.
Scores measure weighted findings per 100 words. A high score can still include many findings in a large repo. These checks suggest edits; they do not establish who wrote the text.
What we scanned
Each snapshot covers the supported, tracked files in a clean checkout at the linked commit: Markdown, MDX, text, Astro, JSX, TSX, HTML, Vue, and Svelte. The scan includes changelogs and test fixtures; documentation in separate repositories is outside the scan.
We used the same default rules for every repo, with repository configuration disabled. We exclude standard dependency, build, cache, and vendor directories. The engine skips fenced code, inline code, and blockquotes, and uses a heuristic extractor for component prose. Findings can need human review.
These results stay fixed until we run another local scan. Expand a repository and a rule to read findings here, or download the JSON for every source location.
Check your own repo
Catch prose issues in your pull requests.
Add this workflow to .github/workflows/prose.yml. It scans the repo on pushes to main and on pull requests, and fails when error-severity findings remain.
Start with --blocking none for an advisory check. Adjust the branch name if needed, and use .style-doctor.json to ignore rules or exclude paths.
name: Prose check
on:
pull_request:
push:
branches: [main]
permissions:
contents: read
jobs:
style-doctor:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
- name: Check prose
run: npx --yes style-doctor@0.4.4 --quiet