@indiekitai/llm-trope-check
v1.0.0
Published
Detect LLM writing patterns in your text — score and highlight AI tropes before you publish
Downloads
16
Maintainers
Readme
@indiekitai/llm-trope-check
Detect AI writing patterns in your text before you publish.
A fast, zero-dependency CLI (and Node.js library) that scans text for LLM writing tropes — those tell-tale phrases and patterns that scream "AI wrote this."
Patterns sourced from tropes.fyi, HN community observations, and PNAS research (arXiv:2410.16107) identifying statistically overused LLM vocabulary.
Quick Start
npx @indiekitai/llm-trope-check blog-post.md
# or
cat essay.md | npx @indiekitai/llm-trope-checkInstall Globally
npm install -g @indiekitai/llm-trope-check
# Then use:
ltc blog-post.md
ltc --helpUsage
ltc [file] Scan a file
cat essay.md | ltc Scan from stdin
ltc --list List all known tropes
ltc --json [file] JSON output (for scripts/CI)
ltc --help Show helpExample Output
LLM Trope Check 44 words
──────────────────────────────────────────────────
Score 100/100 F Almost certainly AI ⛔
██████████████████████████████████████████████████
Found 12 pattern(s) across 5 categories:
Openers & Affirmations
L 1 ●●● "Certainly!" opener
Certainly! It's worth noting that this is a fascinating...
💡 Just answer. Skip the affirmation.
False Profundity
L 1 ●●● "It's not X — it's Y" em-dash reframe
💡 This pattern creates fake insight. State the idea plainly.
...Score & Grades
| Grade | Score | Label | |-------|-------|-------| | A | 0–5 | Very human 🟢 | | B | 6–15 | Mostly human 🟡 | | C | 16–30 | Somewhat AI-flavoured 🟠 | | D | 31–50 | Heavily AI-flavoured 🔴 | | F | 51+ | Almost certainly AI ⛔ |
Score is normalised per 1000 words, so longer documents aren't unfairly penalised.
Exit code 1 for D or F grade — useful in CI pipelines.
Trope Categories
- Openers & Affirmations — "Certainly!", "Great question!", "I'll shoot straight with you"
- False Profundity — "It's not X — it's Y" em-dash reframe (the #1 AI tell)
- LLM Vocabulary — delve, tapestry, camaraderie, nuanced, comprehensive, robust, embark, navigate the complexities, unlock, realm, landscape, foster
- Hedging & Padding — "It's worth noting", "It is important to note", "Moreover/Furthermore", "fascinating aspect"
- Structural Tells — Present-participle openers, "As an AI language model", "Here are N ways..."
- Enthusiasm Overclaim — game-changer, revolutionary, cutting-edge, state-of-the-art
Run ltc --list to see all 30+ patterns with tips.
Use as a Library
import { scan } from '@indiekitai/llm-trope-check';
const result = scan('Certainly! Let\'s delve into the tapestry of this problem.');
console.log(result.score); // 0–100
console.log(result.grade); // 'A'–'F'
console.log(result.findings); // detailed per-trope resultsscan(text) returns:
{
wordCount: number,
score: number, // 0–100 LLM-ness score
grade: string, // 'A' | 'B' | 'C' | 'D' | 'F'
label: string, // human-readable label
findingCount: number,
findings: Finding[],
byCategory: Record<string, Finding[]>
}CI Integration
# .github/workflows/check-content.yml
- name: Check for AI tropes
run: |
npx @indiekitai/llm-trope-check --json blog-post.md | jq '.score'
npx @indiekitai/llm-trope-check blog-post.mdReturns exit code 1 if score is D or F — perfect for blocking AI-heavy content in CI.
Why?
LLMs have recognisable writing tics baked in by instruction-tuning and RLHF. Research shows GPT-4o's top overused words include camaraderie and tapestry. Claude loves delve. All of them overuse the "It's not X — it's Y" em-dash reframe.
This tool helps you:
- Catch AI-generated content before publishing
- Audit your own AI-assisted writing for over-reliance on tropes
- Run content quality checks in CI
License
MIT © indiekitai
