anti-ai-prose · diff

git:20260727.4786b50 to git:20260819.d3b3be3

275 added, 274 removed. Audit A to A.

---
name: anti-ai-prose
description: >
- · Audit prose for AI tells in docs, PRs, emails, slides, docstrings. Triggers: 'ai writing', 'sounds like chatgpt', 'ai slop prose', 'llm voice', 'sound human'. Not for code (use anti-slop).
+ · Strip AI tells from prose in docs, PRs, emails, and your own replies. Filters every response once loaded; full audit on request. Triggers: 'unslop', 'ai writing', 'sounds like chatgpt', 'llm voice'. Not for code (use anti-slop).
license: MIT
compatibility: "None - works on any prose or text input"
metadata:
source: iuliandita/skills
date_added: "2026-04-09"
effort: medium
argument_hint: "<file-or-text>"
---
# Anti-AI-Prose: Audit Writing for Machine-Generated Patterns
Detect and fix the linguistic tells that make written English read as machine-generated. The goal is prose that sounds like a specific, thoughtful human wrote it.
This skill applies to any text: **documentation**, **READMEs**, **wikis** (Confluence, Notion, internal), **pull request descriptions**, **commit messages**, **release notes**, **blog posts**, **emails**, **slide copy**, **creative writing**, and **code comments / docstrings**. The vocabulary, syntax, tone, and formatting checks are language-domain, not platform-domain.
- Based in part on [Wikipedia: Signs of AI writing](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing) - a field guide compiled by editors who have read enormous volumes of LLM-generated text and know what it actually looks like - and on [stop-slop](https://github.com/hardikpandya/stop-slop) (MIT), which contributed the confident-filler check: emphasis crutches, rhetorical setups, and the faux-profundity fragment.
+ Based in part on [Wikipedia: Signs of AI writing](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing) - a field guide compiled by editors who have read enormous volumes of LLM-generated text and know what it actually looks like - on [stop-slop](https://github.com/hardikpandya/stop-slop) (MIT), which contributed the confident-filler check: emphasis crutches, rhetorical setups, and the faux-profundity fragment - and on [poteto/plugins](https://github.com/poteto/plugins) `pstack/skills/unslop` (MIT), which contributed the plain-speech checks, the abstract-metaphor-noun list, chat artifacts, and the voice-restoration guidance.
## When to use
- - Auditing a README, doc page, or wiki article that feels machine-written
- - Reviewing a PR body, commit message, or release note draft before publishing
- - Polishing a blog post, email, or presentation script you wrote with LLM help
- - Checking creative writing (fiction, essays) for AI tells after an LLM-assisted pass
- - Reviewing docstrings and code comments for the same prose patterns
- - Any time someone says "this sounds like ChatGPT wrote it"
- - Self-check after a heavy LLM-drafting session
+ - Auditing a README, doc page, or wiki article that feels machine-written, or a PR body, commit message, or release note draft before publishing
+ - Polishing a blog post, email, script, or creative writing drafted with LLM help, or reviewing docstrings and code comments for the same patterns
+ - Any time someone says "this sounds like ChatGPT wrote it", or self-checking after heavy LLM drafting
+ - Filtering your own replies, explanations, and drafts as you write them (inline mode, see below)
## When NOT to use
- Code quality, over-abstraction, dependency creep, stale idioms - use **anti-slop**
- Doc drift after a feature change, API rename, or config update - use **update-docs**
- Generating or restructuring a prompt from rough notes - use **prompt-generator**
- Correctness bugs, logic errors, edge cases - use **code-review**
- - Security review of auth, secrets, or attack surface - use **security-audit**
- - Full multi-dimensional repo audit - use **full-review**
+ - Security review of auth, secrets, or attack surface - use **security-audit**, or **full-review** for a full multi-dimensional repo audit
---
+ ## Two modes
+
+ This skill runs in one of two modes. Pick the mode from the trigger, not from the content.
+
+ ### Inline mode (default)
+
+ Applies to your own conversational output: chat replies, explanations, summaries, commit
+ bodies, PR descriptions, and any prose you draft for the user. Apply it to every response for
+ as long as this skill is in context, without being asked again. It cannot clean replies drafted
+ before it loaded, so load it early when prose quality matters.
+
+ - Apply the pattern rules silently while writing. This filters drafting, it does not review a finished draft.
+ - Emit **no report, no findings, no severity ratings, no deliverable file**, and no note that the skill ran.
+ - Do not restructure the user's own words when quoting them back.
+ - Density thresholds do not apply. Fix every tell you catch in your own output.
+ - Before sending, ask: "what in this reply reads as machine generated?" Fix what that surfaces.
+
+ ### Audit mode (explicit)
+
+ Applies to text the user hands over: a file, a paste, a diff, a directory. Triggered by an
+ explicit request ("audit this", "does this sound like AI", "unslop this doc") or by invoking
+ the skill against a target. Run the full Workflow below, emit the full output contract, and
+ apply the density thresholds so isolated instances in long documents are not flagged.
+
+ ### Precedence
+
+ When rules conflict, later entries lose: (1) the user's explicit instruction in this
+ conversation, (2) project instruction files (`CLAUDE.md`, `AGENTS.md`, repo style guide),
+ (3) genre convention of the text being written, (4) this skill's pattern rules. A house style
+ that mandates em dashes, title-case headings, or a formal register is not a finding. Inline
+ mode adapts to it rather than overriding it.
+
+ ---
+
## AI Self-Check
- Before returning any audit, verify:
+ Always, in both modes:
- - [ ] **Findings are patterns, not taste**: the issue is a demonstrable AI tell (from the Wikipedia guide or observed LLM output), not personal writing preference
- - [ ] **Context respected**: academic and technical prose can look formal without being AI-generated. Journalism, marketing, and tourism writing have legitimate conventions that overlap with AI tells. Do not flag genre conventions as AI tells
- - [ ] **Direct quotes preserved**: do not edit quoted material from other authors, even if it contains banned vocabulary
- - [ ] **Domain terms kept**: `pivotal` in hinge hardware specs, `landscape` in horticulture, `foster` as a verb in child welfare, `realm` in fantasy fiction - these are not tells in context
- - [ ] **Code blocks untouched**: do not flag identifiers, strings, or code comments that contain banned words as part of functional code
- - [ ] **Rewrites are real improvements**: every "after" is shorter, clearer, or more specific than the "before". No lateral rewrites that just swap synonyms
- - [ ] **Severity is honest**: do not inflate P3 findings to P2 to pad the report
- - [ ] **Density and short-text rule applied**: density heuristic applied before assigning severity; for text under 100 words, 2+ tells in one paragraph = P1 regardless of per-500-word threshold
- - [ ] **Audit output itself uses no AI-prose tells** (apply these rules to your own output)
- - [ ] **AI fallback names checked (fiction)**: protagonist and major-character names compared against the documented fallback set (Elara, Lyra, Aurora, Kael, Vale, Cassius, etc.) and the phonetic tell (2 soft syllables, A/L/R/N consonants, no demographic anchor); fallback-set names allowed only when the setting and population organically produce them
- - [ ] **Adverb stacking checked**: `-ly` adverb density scanned; passages with multiple adverb-modified speech tags or adjacent adverb clusters flagged at the same density threshold as vocabulary tells
- - [ ] **Confident filler checked**: emphasis crutches, rhetorical setups, and faux-profundity fragments flagged by pattern/density, not on isolated earned uses
- - [ ] **Overflagging avoided**: plain but valid technical prose is not labeled AI-written without concrete evidence
+ - [ ] **Mode picked correctly**: inline mode emitted no report, no findings list, and no deliverable file; audit mode emitted the full contract. The two were not mixed in one response
+ - [ ] **Chat artifacts cleared**: no `Great question!`, `I hope this helps!`, `Certainly!`, or cutoff disclaimer survived into the output, in either mode
+
+ Audit only:
+
+ - [ ] **Findings are patterns, not taste**: every finding is a demonstrable AI tell, not a writing preference, and plain-but-valid technical prose was not labeled AI-written without concrete evidence
+ - [ ] **Context respected**: genre conventions (academic, journalism, marketing, tourism) and domain terms of art were not flagged - `pivotal` in hinge hardware, `landscape` in horticulture, `foster` in child welfare, `realm` in Kerberos
+ - [ ] **Direct quotes preserved**: quoted material from other authors was not edited, even when it contains banned vocabulary
+ - [ ] **Code untouched, prose audited**: identifiers, string literals, and API names were not flagged for containing a banned word. Prose *inside* comments and docstrings is a valid target; the code around it is not
+ - [ ] **All four categories scanned**, including the checks that are easy to skip: adverb stacking, confident filler, the plain-speech set (participle tails, false ranges, unnamed-actor passives, dense sentence stacking, feeling-instead-of-mechanism), and fiction fallback names
+ - [ ] **Density and short-text rule applied**: density set severity, and text under 100 words with 2+ tells in one paragraph was rated P1 regardless of the per-500-word threshold
+ - [ ] **Severity is honest**: no P3 inflated to P2 to pad the report, and no finding count padded
+ - [ ] **Rewrites are real improvements**: every "after" is shorter, clearer, or more specific than the "before", carries a position and specifics, and invents no fact the source did not have. No lateral synonym swaps, and voice suggestions are marked `Consider`, never `Fix`
- [ ] **Audience preserved**: edits keep the author's domain vocabulary, intent, and required formality
+ - [ ] **House style respected**: explicit user instructions and project instruction files outranked this skill's pattern rules; a mandated em dash or title-case convention was not reported as a finding
+ - [ ] **Audit output itself uses no AI-prose tells** (apply these rules to your own output)
- [ ] Cross-cutting agent hygiene applied - see `references/agent-hygiene.md`
---
## Performance
- - Review a representative sample first, then expand only if the same pattern repeats across the document.
- - Group repeated prose issues by pattern instead of leaving near-duplicate comments on every paragraph.
- - Prioritize high-visibility text: titles, summaries, intros, conclusions, and user-facing docs.
+ - Read the whole piece before flagging - density is a per-500-word ratio and a sample cannot produce it. Sampling decides whether a *directory* is worth auditing, not how a document scores.
+ - Group repeated issues by pattern instead of near-duplicate comments on every paragraph, and prioritize high-visibility text: titles, summaries, intros, conclusions, user-facing docs.
---
## Best Practices
- Flag exact phrases and structural patterns, not vibes.
- Offer replacement copy when the fix is obvious; otherwise describe the problem and let the author decide.
- Do not erase necessary caveats, compliance language, or domain-specific precision to make prose sound casual.
## Workflow
- ### Step 1: Scope the audit
-
- Default scope based on context:
- - If invoked on a specific file or paste - audit that text
- - If invoked with no target and there are uncommitted changes to `.md` / `.txt` / doc files - audit those
- - If invoked in a code repo with recent commits - audit the docstrings and comments in changed files
- - Otherwise - ask the user for a target
-
- Available scopes:
- - **Single file** - one doc, README, draft, or source file
- - **Directory** - all `.md` / `.rst` / `.txt` under a path
- - **Pasted text** - inline block the user supplies
- - **Recent changes** - git diff against a base
- - **Comments and docstrings only** - scan code files but audit only prose regions
-
- ### Step 2: Detect text kind
-
- Different text types have different conventions. Before flagging, identify which applies:
- - **Technical docs** - formal is OK, but vocabulary bans still apply
- - **README / PR / commit** - concise is expected, significance padding is especially jarring
- - **Marketing / product copy** - tonal tells (`boast`, `showcase`) may be intentional but still weaken the writing
- - **Creative fiction** - many tells (tricolons, elegant variation) are legitimate devices; flag only when they read as mechanical
- - **Wiki article** - neutral voice required, promotional language is always a finding
- - **Email** - conversational is expected, formality inflation is a tell
- - **Slides / presentation** - fragments are fine, but vocabulary and tonal tells still apply
-
- ### Step 3: Scan for patterns
-
- Apply the four categories (see below). For each match, read the surrounding context - a single instance of an AI word in a 5000-word document is probably noise, but three instances in three paragraphs is a pattern.
-
- **Density heuristic** (rough guide, not a hard rule):
- - **Under 1 flagged item per 500 words** - noise, usually do not flag
- - **2-3 per 500 words** - a pattern, flag the cluster as P2
- - **4+ per 500 words** - dominant voice, P1 severity, recommend structural rewrite
-
- **Short text scaling:** for text under 100 words, any 2+ tells in a single paragraph is P1 severity regardless of the per-500-words threshold. A single sentence crammed with AI vocabulary is worse than a long doc with scattered instances.
+ Audit mode only. Full detail in `references/audit-mode.md`: scoping rules, the text-kind list,
+ the density heuristic, the action and severity scales, and the report template with a worked
+ example.
- Density only applies to vocabulary and syntax tells. A single travel-guide paragraph is enough to flag on its own. One fabricated citation is always P1.
+ 1. **Scope.** Audit the file or paste given. With no target, fall back to uncommitted doc changes,
+ then to docstrings in changed files, then ask.
+ 2. **Detect text kind.** Technical docs, README/PR/commit, marketing, fiction, wiki, email, and
+ slides each carry conventions that change what counts as a tell.
+ 3. **Scan.** Apply the four categories below. Read surrounding context before flagging: one AI
+ word in 5000 words is noise, three in three paragraphs is a pattern. Density sets severity;
+ text under 100 words with 2+ tells in a paragraph is P1 regardless. Some checks skip density
+ because one instance is already the finding: travel-guide voice, promotional tone, the
+ formulaic article shape, chat artifacts, and an AI fallback character name. Trust breaches
+ skip it too, at P0 in text meant to ship - a fabricated citation, an invented fact, a leaked
+ secret, generator residue, or a cutoff disclaimer under a human byline.
+ `references/audit-mode.md` holds the authoritative gated/not-gated list.
+ 4. **Report and fix.** Group by category, show the concrete rewrite, keep every rewrite shorter or
+ more specific than the original. **Plan first, apply that plan only:** when the user asks for
+ fixes, change only what the report flagged. New findings during application become a second
+ audit, never silent edits.
- Classify each finding by category, action, and severity:
+ ---
- **Action:**
- - **Fix** - clearly a tell, should change
- - **Consider** - judgment call, present it and let the user decide
- - **Fine** - matches the pattern but is justified (note why, move on)
+ ## The Four Categories of AI Prose Slop
- **Severity:**
- - **P1** - cluster of tells that makes the piece sound unmistakably AI-written; vague attribution passing opinion as fact; fabricated citations or broken references
- - **P2** - vocabulary or syntax tells that dull the voice without breaking trust; formulaic structures ("Despite its X, faces challenges..."); travel-guide voice in non-travel writing
- - **P3** - single instances of banned vocabulary; formatting nits (em-dash usage, unnecessary bold); tricolon overuse
+ ### 1. Vocabulary Tells
- ### Step 4: Report and fix
+ Specific words that LLMs overuse far beyond their natural English frequency.
- Present findings grouped by category. For each Fix-level item, show the concrete rewrite. Rewrites should be **shorter** or **more specific** - never longer.
+ **Flagged vocabulary** (context-sensitive - see exceptions below):
- **Plan first, apply that plan only.** Produce the audit report as the improvement plan before any
- rewrites are merged. If the user then asks for the fixes to be applied, change only what the plan
- flagged. Do not freelance edits outside the plan, do not "while we're here" rewrite adjacent
- prose, and do not chain a second pass of new fixes on top of the applied ones in the same step.
- This keeps the work auditable and prevents a cheap model from re-drafting the piece worse than
- the original. If new findings emerge while applying, surface them as a second audit, not as
- silent edits.
+ Grouped by the fix. `(or cut)` marks the words that are usually padding, where the phrase
+ should go rather than get a substitute.
- ---
+ **Say "use":** leverage, utilize -> use. facilitate -> help, enable.
- ## The Four Categories of AI Prose Slop
+ **Use a plain verb:** delve / dive deep into -> look at, examine, dig into, cover. showcase ->
+ show, display, feature. navigate -> handle, work through, manage. garner -> get, earn, attract.
+ underscore -> show, highlight, confirm. enhance -> improve, speed up, extend (or name the
+ change). ensure -> make sure, guarantee (or name the mechanism). empower -> help, enable, let.
+ foster -> build, grow, support, encourage. boast -> has. commence / embark on -> start, begin.
- ### 1. Vocabulary Tells (Noise)
+ **Use a plain noun:** realm -> area, field, world. landscape -> scene, field, mix. tapestry ->
+ mix, range, variety (or cut the metaphor). testament -> proof, evidence, example. interplay ->
+ how X and Y interact (or cut). synergy -> fit, overlap, how X and Y work together (or cut).
- Specific words that LLMs overuse far beyond their natural English frequency.
+ **Use a plainer adjective:** enduring -> lasting, long-running. numerous -> many. nestled ->
+ set, located, built. innovative -> new, novel (or name what is new).
- **Flagged vocabulary** (context-sensitive - see exceptions below):
+ **Padding adjectives**, all `(or cut)` by default - substitute only when the adjective does
+ real work: pivotal / crucial -> key, important, central, needed. nuanced -> subtle, careful,
+ specific. intricate -> detailed, complex. multifaceted -> has many sides, covers a lot.
+ holistic -> whole, end-to-end, full. seamless -> smooth. robust -> reliable, solid. vibrant ->
+ lively, active, busy.
- | AI word | Natural alternatives |
- |---|---|
- | delve | look at, examine, dig into, cover |
- | tapestry | mix, range, variety (or just drop the metaphor) |
- | testament | proof, evidence, example |
- | pivotal | key, important, central (or drop if padding) |
- | crucial | important, needed (or drop if padding) |
- | realm | area, field, world |
- | landscape | scene, field, mix |
- | showcase | show, display, feature |
- | empower | help, enable, let (or rewrite with a specific claim) |
- | foster | build, grow, support, encourage |
- | navigate | handle, work through, manage |
- | nestled | set, located, built |
- | vibrant | lively, active, busy (or drop) |
- | underscore | show, highlight, confirm |
- | garner | get, earn, attract |
- | enduring | lasting, long-running |
- | boast | have (just "has") |
- | leverage | use |
- | utilize | use |
- | facilitate | help, enable |
- | seamless | smooth (or drop) |
- | robust | reliable, solid (or drop if padding) |
- | commitment to | cares about, focuses on |
- | dive deep into | look at, cover |
- | embark on | start, begin |
- | nuanced | subtle, careful, specific (or drop - almost always padding) |
- | multifaceted | has many sides, covers a lot (or drop) |
- | holistic | whole, end-to-end, full (or drop) |
- | synergy | fit, overlap, how X and Y work together (or drop) |
- | innovative | new, novel (or name what is new) |
- | commence | start, begin |
- | journey toward | work toward, move toward, aim for (or drop) |
- | moving forward | from now on, next, going forward (or drop) |
+ **Padding phrases**, same rule: commitment to -> cares about, focuses on. journey toward ->
+ work toward, move toward, aim for. moving forward -> from now on, next. additionally -> also,
+ and (or start the sentence with the content).
**Detect:**
- Multiple flagged words in the same paragraph
- Flagged word used metaphorically (`tapestry of experiences`, `realm of possibility`)
- Flagged word in a context where a plain verb would work (`showcase the features` -> `show the features`)
**Fix:** Replace with the plain alternative. If the sentence gets weaker after replacement, the original was padding - cut the whole phrase.
See "What NOT to Flag" below for domain exceptions (horticulture `landscape`, child welfare `foster`, networking `realm`, etc.).
#### AI fallback character names (fiction)
- Generated fiction often converges on soft, no-baggage names such as `Elara`, `Kael`, or
- `Voss`. If a prose audit includes invented character names, read
- `references/fiction-name-tells.md` for the fallback-name pattern, exceptions, and fix guidance.
+ Generated fiction converges on soft, no-baggage names such as `Elara`, `Kael`, or `Voss`. Not
+ density-gated: one such protagonist name is the finding. See `references/fiction-tells.md` for
+ the phonetic test and the exceptions.
- ### 2. Syntax Tells (Noise + Soul)
+ #### Abstract metaphor nouns
+ Nouns that read as technical but stand in for a plainer word: `substrate`, `wedge`, `vector`,
+ `locus`, `vantage`, `nexus`, `primitive` (as noun), `harness` (as metaphor), `surface` (as in
+ "API surface"), `bedrock`, `scaffolding` (as metaphor), `modality`, `paradigm`, `gold-plating`.
+
+ **Detect:** the noun carries no measurement, no referent, and no consequence. **Fix:** name the
+ concrete thing - `substrate` -> `base`, `wedge in` -> `add`, `vector` -> `way`. **Exception:** each
+ is a term of art somewhere (`vector` in linear algebra, `locus` in genetics); full table in
+ `references/plain-speech.md`.
+
+ ### 2. Syntax Tells
+
Sentence structures LLMs reach for to sound balanced or significant.
#### Negative parallelism
- LLMs overuse `not X but Y` and `not just X, but also Y` constructions to signal balance and sophistication. In moderation this is fine English. In quantity it is a clear tell.
+ `not X but Y` and `not just X, but also Y`, used to signal balance. Fine English in moderation, a clear tell in quantity.
- **Detect:**
- - Three or more `not X but Y` / `not just X, but Y` / `it's not about X, it's about Y` structures in a single piece
- - Used where a direct claim would work: `this isn't just a tool, it's a platform` -> `this is a platform`
+ **Detect:** three or more `not X but Y` / `it's not about X, it's about Y` structures in one piece, or one used where a direct claim would work: `this isn't just a tool, it's a platform` -> `this is a platform`.
**Fix:** State the positive claim directly. If the contrast matters, keep one instance and rewrite the rest.
#### Forced tricolons (rule of three)
`X, Y, and Z` lists used for rhythm rather than enumeration. LLMs default to three items even when two or four would be more accurate.
**Detect:**
- - Adjective triplets where one adjective would carry the meaning: `a fast, reliable, and scalable system`
- - Noun triplets that are really the same concept: `clarity, precision, and accuracy`
+ - Adjective triplets where one adjective carries the meaning (`a fast, reliable, and scalable system`), or noun triplets that are really one concept (`clarity, precision, and accuracy`)
- Three-item lists where the third item is obviously padded to hit the count
**Fix:** Drop the weakest item. Use two items when the point is a contrast, four or more when it is an actual list.
#### Copula avoidance
LLMs avoid plain `is` / `are` / `has` / `have` in favor of elaborate constructions: `serves as`, `marks`, `represents`, `features`, `offers`, `boasts`, `stands as`.
- **Detect:**
- - `serves as` where `is` works: `it serves as a backup` -> `it is a backup`
- - `represents` used as a replacement for `is`: `this represents a shift` -> `this is a shift`
- - `boasts` used for `has`: `the app boasts 50 features` -> `the app has 50 features`
- - `marks` used to inflate: `this marks the first time` -> `this is the first time`
+ **Detect:** `it serves as a backup` -> `it is a backup`. `this represents a shift` -> `this is
+ a shift`. `the app boasts 50 features` -> `the app has 50 features`. `this marks the first
+ time` -> `this is the first time`.
**Fix:** Use the plain copula. Elaborate verbs should carry weight - do not spend them on simple identity claims.
- #### Adverb crutch (-ly modifiers)
+ #### Adverb crutch and elegant variation
- LLMs reach for `-ly` adverbs to inflate description and dodge precise verb choice: `said softly`, `ran quickly`, `smiled warmly`, `walked slowly`, `whispered quietly`. Each one in isolation is acceptable English. Density is the tell. The classical fiction-editing test (Stephen King and most line editors): if dropping the adverb does not change the meaning, the verb is the problem.
+ Two line-editing tells. **Adverb crutch:** `-ly` adverbs inflating description in place of a
+ precise verb (`said softly`, `ran quickly`, `whispered quietly`). Density is the tell, not any
+ single use. Test: drop the adverb. If only rhythm shifts, the verb was weak - `said softly` ->
+ `whispered`. Keep adverbs carrying information the verb cannot (`answered honestly`).
- **Detect:**
- - `-ly` adverbs modifying speech tags: `said softly`, `whispered quietly`, `shouted loudly`, `replied curtly`
- - Adverbs that restate the verb: `whispered quietly`, `shouted loudly`, `ran quickly`, `mumbled under his breath`
- - Multiple `-ly` adverbs in adjacent sentences (a passage sprinkled with them rather than one used for emphasis)
- - Stacking with hedges: `gently`, `slightly`, `rather`, `somewhat` modifying the same verb or following each other across a paragraph (cross-references "Hedging and qualifier stacking" in Tonal Tells)
+ **Elegant variation:** the same entity named by 3+ strained synonyms in close proximity -
+ Alice becomes `the protagonist`, `the young woman`, `the eponymous heroine`. Fix: use the name
+ or a pronoun. Repetition beats forced variation.
- **Fix:** Prefer a stronger verb. `said softly` -> `whispered`. `ran quickly` -> `sprinted`. `smiled warmly` -> `beamed`. `looked carefully at` -> `studied`. Delete adverbs that restate the verb outright.
+ Detect lists, worked fixes, and exceptions for both: `references/fiction-tells.md`.
- **Exception:** Keep the adverb when it carries information the verb cannot. `said reluctantly`, `answered honestly`, `arrived late`, `she nodded slowly` (when the slowness is the point) all earn their place. The test: drop the adverb. If meaning shifts, keep it. If only rhythm shifts, the verb was weak.
- #### Elegant variation
+ #### Superficial participle tails
- LLMs avoid repeating a noun within a paragraph, substituting increasingly strained synonyms. A character named Alice becomes `the protagonist`, `the main character`, `the young woman`, `the eponymous heroine` in four consecutive sentences.
+ A sentence ending in a comma plus an `-ing` clause that restates what the sentence already
+ said, implying consequence without asserting one: `..., highlighting the need for X`, `...,
+ ensuring reliability`, `..., reflecting a broader shift`, `..., showcasing the team's
+ expertise`, `..., underscoring its importance`.
- **Detect:**
- - The same entity referred to by 3+ different nouns in close proximity
- - Strained synonyms where a pronoun or name repetition would be natural
- - Different technical terms for the same concept within one document
+ **Detect:** cut the clause. If nothing is lost, it was decoration. **Fix:** delete the tail; if
+ the consequence is real, promote it to its own sentence with a stated mechanism - `..., ensuring
+ reliability` -> `Retries cover the transient failures.`
- **Fix:** Use the name, or a pronoun. Repetition is fine. Forced variation is worse than repetition.
+ #### False ranges
- ### 3. Tonal Tells (Soul)
+ `from X to Y` where X and Y do not sit on a shared scale, implying comprehensive coverage of
+ what is really two examples: `everything from authentication to deployment`, `from startups to
+ enterprises` with no middle named.
- The voice of the text gives away the author even when the words are individually defensible.
+ **Detect:** test for a meaningful midpoint. `from 10ms to 2s` is a real range, `from CI to
+ observability` is not. **Fix:** list the items directly - `covers authentication and deployment`.
- #### Travel-guide voice
+ #### Passive voice with an unnamed actor
- `Nestled between rolling hills, this vibrant city boasts a rich cultural heritage and a thriving arts scene`. LLMs default to this register for any geographic or cultural topic.
+ `is/are/was/were + past participle` that drops the actor: `queries are validated`, `errors are
+ logged`. Ask who does it; if the answer is in the document but not the sentence, name it.
- **Detect:** `nestled`, `rolling hills`, `vibrant`, `thriving`, `rich heritage`, `bustling`, `charming`, `picturesque`
+ **Fix:** promote the actor to subject - `the compiler validates queries`. **Exception:** passive
+ is correct when the actor is unknown, irrelevant, or withheld on purpose (incident writeups,
+ scientific method sections). See `references/plain-speech.md`.
- **Fix:** State facts. `The city has 300,000 people, two universities, and a jazz festival in August.`
+ #### Dense sentence stacking
- #### Promotional tone
+ Three or more clauses chained with commas, `and`, `which`, and `while`. Length is not the tell,
+ backtracking is: flag sentences needing a second pass to locate the verb.
- `Our commitment to excellence ensures we foster innovation and empower our customers to succeed.` LLMs reach for press-release cadence when asked to describe any organization or product.
+ **Fix:** Split at the clause boundary, or drop the clause carrying the least. One idea per
+ sentence. Worked before/after in `references/plain-speech.md`.
- **Detect:** `commitment to`, `empower`, `foster`, `ensure`, `strive`, `dedicated to`, `passionate about`, `industry-leading`, `cutting-edge`, `next-generation`
+ ### 3. Tonal Tells
- **Fix:** Replace with specific claims. `We help X customers do Y` beats `We empower customers to succeed`.
+ The voice gives away the author even when the words are individually defensible. Travel-guide
+ voice, promotional tone, the formulaic shape, chat artifacts, and cutoff disclaimers are not
+ density-gated: one instance is the finding. The sentence-level tells here - vague attribution,
+ significance padding, hedging, scaffolding, confident filler, feeling-instead-of-mechanism -
+ are gated like the vocabulary tells.
+ #### Travel-guide voice
+
+ `Nestled between rolling hills, this vibrant city boasts a rich cultural heritage and a thriving arts scene`. The default register for any geographic or cultural topic.
+
+ **Detect:** `nestled`, `rolling hills`, `vibrant`, `thriving`, `rich heritage`, `bustling`, `charming`, `picturesque`. **Fix:** state facts - `The city has 300,000 people, two universities, and a jazz festival in August.`
+
+ #### Promotional tone
+
+ `Our commitment to excellence ensures we foster innovation and empower our customers to succeed.` Press-release cadence, reached for when describing any organization or product.
+
+ **Detect:** `commitment to`, `empower`, `foster`, `ensure`, `strive`, `dedicated to`, `passionate about`, `industry-leading`, `cutting-edge`, `next-generation`. **Fix:** replace with specific claims - `We help X customers do Y` beats `We empower customers to succeed`.
+
#### Vague attribution
`Experts say`, `industry reports indicate`, `observers have noted`, `many believe`. LLMs use these when they want to assert something without a source. Real writers either cite or own the claim.
- **Detect:**
- - `experts say` / `experts agree` without naming experts
- - `industry reports` / `studies show` without a study
- - `observers have noted` / `critics argue` without names
- - Plural `sources say` pointing to at most one source
+ **Detect:** `experts say` / `experts agree` with no expert named, `industry reports` /
+ `studies show` with no study, `observers have noted` / `critics argue` with no names, plural
+ `sources say` pointing to at most one source.
**Fix:** Cite the source. Or own the claim. Or cut it - most of the time the surrounding sentence works without the attribution.
#### Significance padding
`This marks a pivotal moment, underscoring broader trends in the industry.` LLMs inflate the weight of routine events to pad word count.
- **Detect:**
- - `marks a pivotal moment`
- - `underscoring broader trends`
- - `highlighting the importance of`
- - `serves as a reminder that`
- - `in an era where`
- - `in today's fast-paced world`
+ **Detect:** `marks a pivotal moment`, `underscoring broader trends`, `highlighting the
+ importance of`, `serves as a reminder that`, `in an era where`, `in today's fast-paced world`.
**Fix:** Delete the whole sentence. If what follows does not make sense without the padding, rewrite the surrounding paragraph.
#### Hedging and qualifier stacking
LLMs stack hedges and qualifiers to sound cautious or balanced. Each hedge by itself is fine English; stacking them makes every claim feel tentative.
**Detect:**
- - Frequent `generally`, `typically`, `often`, `usually`, `in many cases`, `for the most part`
- - Weak modal stacking: `may`, `can`, `might`, `could potentially`, `arguably`, `relatively`
+ - Frequent `generally`, `typically`, `often`, `usually`, `in many cases`, `for the most part`, or weak modal stacking: `may`, `can`, `might`, `could potentially`, `arguably`, `relatively`
- Two or more hedges in the same clause: `can generally be considered to be relatively reliable`
- - Hedges on claims that the author clearly knows are true: `this may help with performance` (when benchmarks are already in the paragraph)
+ - Hedges on claims the author clearly knows are true: `this may help with performance`, when benchmarks are already in the paragraph
**Fix:** Delete the hedge and state the claim. If the claim really does need a caveat, state it concretely: `on Linux only`, `for connections over 1000 RPS` - not `generally speaking`.
#### Scaffolding padding
Phrases that wrap around the actual content without adding information. LLMs lean on these to sound organized or conversational.
**Detect:**
- - `it's worth noting that`, `it's important to note`, `it's worth mentioning`
- - `in this article, we'll explore` / `in this guide, we'll cover` (meta-commentary about the piece itself)
- - `let's dive into` / `let's explore` / `let's take a look at`
- - `here's the thing:` / `the fact is:` / `the truth is:`
- - `at the end of the day` / `when all is said and done`
- - `as we've seen` / `as mentioned earlier` / `as previously discussed` (when the reader just read it)
+ - `it's worth noting that`, `it's important to note`, `it's worth mentioning`, `here's the thing:`, `the fact is:`, `the truth is:`, `at the end of the day`, `when all is said and done`
+ - Meta-commentary about the piece itself: `in this article, we'll explore`, `in this guide, we'll cover`, `let's dive into`, `let's explore`, `let's take a look at`
+ - `as we've seen` / `as mentioned earlier` / `as previously discussed`, when the reader just read it
+ - Wordy connectives with a one-word equivalent: `in order to` -> `to`, `due to the fact that` -> `because`, `in the event that` -> `if`, `for the purpose of` -> `to`, `with regard to` -> `about`, `a large number of` -> `many`, `at this point in time` -> `now`
**Fix:** Cut the wrapper and keep the content. `It's worth noting that X` becomes `X`. `In this article, we'll explore Y` becomes a first sentence that is about Y.
#### Confident filler and false emphasis
LLMs punctuate with manufactured confidence and rhetorical scaffolding that announces insight instead of delivering it.
**Detect:**
- Emphasis crutches: `Full stop.`, `Period.` (as standalone emphasis), `let that sink in`, `make no mistake`, `here's why that matters`
- Rhetorical setups: `What if...`, `Imagine...`, `Think about it:`, `Picture this`
- Faux-profundity fragment: a curt closer that asserts depth instead of earning it - `<short sentence>. That's it.`, `Simple as that.`, `Nothing more.`
**Fix:** Cut the wrapper; make the claim carry its own weight. Density is the tell: one earned `that's it` is voice, three is a tic. Overlaps significance padding (`serves as a reminder that`) and scaffolding padding (`let's dive into`); when a phrase fits more than one bucket, count it once under the densest cluster, not in every bucket it touches.
- #### "Despite its X, faces challenges"
+ #### Formulaic article shape
- LLMs reach for a formula when asked to describe any organization or project: positives first, then a "however" paragraph listing challenges, often ending with a "future outlook" paragraph.
+ The default structure LLMs reach for when describing any organization or project: paragraph 1
+ positive, paragraph 2 opening with `Despite` or `However` to list challenges, paragraph 3
+ opening with `Looking ahead` or `The future`. The shape is the tell, not the words. Its closing
+ move also stands alone: a paragraph gesturing at the future without committing - `The future
+ looks bright`, `Only time will tell`, `As the space continues to evolve`, `The possibilities
+ are endless`.
- **Detect:** the shape of the article more than specific words. Three-paragraph structure where paragraph 1 is positive, paragraph 2 starts with `Despite` or `However`, and paragraph 3 starts with `Looking ahead` or `The future`.
+ **Fix:** Reorganize around the actual story; if there is no story, the piece should not exist.
+ For the closer specifically, state a plan, a date, or a fact, or end on the last real point. A
+ piece does not need a conclusion paragraph to be finished.
- **Fix:** Reorganize around the actual story. If there is no story, the piece probably should not exist.
+ #### Chat artifacts and sycophancy
- ### 4. Formatting Tells (Noise)
+ Assistant-voice residue that survives a copy-paste out of a chat window into a doc, PR, or
+ email. Also the highest-value check in inline mode, where it applies to the reply itself.
- Layout and punctuation patterns that LLMs default to.
+ **Detect:** openers (`Great question!`, `Certainly!`, `You're absolutely right!`), closers
+ (`I hope this helps!`, `Let me know if you have any questions`), progress theater (`Found the
+ smoking gun!`, `Perfect!` as a standalone reaction), and restating the request before answering it.
+ **Fix:** Delete. Open with the answer, close when the answer ends. In inline mode this is a hard
+ rule with no density threshold: one `Great question!` is one too many.
+
+ #### Cutoff and knowledge disclaimers
+
+ Hedges about the model's own limits, left in text a human is supposed to have written:
+ `While specific details are limited`, `As of my last update`, `I don't have access to
+ real-time data`, `Based on available information`.
+
+ **Fix:** Find the fact and state it, or cut the sentence. If the uncertainty is real, name what
+ is unknown and why: `The 2026 figures are not published yet`.
+
+ #### Feeling instead of mechanism
+
+ Prose naming an impression rather than a fact the reader can act on. Ask what the sentence tells
+ the reader to do or know: `the database stays close at hand`, `SQL you can read`, `types that
+ follow your schema` all fail that test.
+
+ **Fix:** Replace with the mechanism, a number, or an instruction. `.toSQL() returns the exact
+ string sent to the database.` If no concrete restatement exists, cut the sentence. Table and
+ exceptions in `references/plain-speech.md`.
+
+ ### 4. Formatting Tells
+
+ Layout and punctuation patterns that LLMs default to. The four below fire on almost every
+ draft. The long tail - curly quotes, emoji, decorative `---` breaks, three-bullet-happy
+ layouts, markdown artifacts, LLM output bugs (`turn0search0`, `oaicite`), the mid-sentence
+ colon connector, and self-restating inline headers - is in `references/formatting-tells.md`.
+
**Detect:**
- - **Em dashes** (Unicode U+2014, or the `--` double-dash substitute) used as sentence breaks. LLMs overuse them to imitate journalistic cadence. Replace with single `-` or restructure the sentence.
- - **Title Case in section headings** (`Understanding the Core Concepts` vs `Understanding the core concepts`). AI defaults to title case even in sentence-case conventions. Match the project's style.
- - **Excessive bold** - every third noun bolded for no reason. Bold earns its use by signaling a term or path.
- - **Bullet salad** - prose turned into bullets when a paragraph would read better. Lists are for enumerations, not for every idea.
- - **Three-bullet-happy layouts** - suspicious when every list has exactly three items
- - **Curly quotes** (`"`, `'`) in technical writing that should use ASCII
- - **Emoji** in professional prose where decoration is the only purpose
- - **Decorative thematic breaks** - `---` before every `##`. Dividers that mark a real phase change are fine; decoration is not
- - **Markdown artifacts in rendered text** - `**bold**` appearing as literal characters because the paste lost its format
- - **LLM output bugs** - `turn0search0`, `contentReference`, `oaicite`, `+1`, `attached_file`, hallucinated wiki-style shortcuts
+ - **Em dashes** (U+2014, or the `--` substitute) as sentence breaks in prose. Replace with a
+ single `-` or restructure; parentheses and en dashes just trade one tell for another. Never
+ rewrite `--` inside code or fenced blocks - there it is real syntax.
+ - **Title Case in section headings** (`Understanding the Core Concepts`) where the project uses sentence case.
+ - **Excessive bold** - every third noun bolded. Bold signals a term or path, nothing else.
+ - **Bullet salad** - prose bulleted when a paragraph would read better.
- **Fix:** Match the surrounding project's conventions. If there is no convention, default to plain ASCII, sentence case, minimal bold, paragraph prose.
+ **Fix:** Match project conventions. With none, default to plain ASCII, sentence case, minimal bold, paragraph prose.
---
+ ## Restoring Voice
+
+ Removing tells is half the work. Prose stripped of every pattern and given nothing back reads
+ as sterile, which is its own tell. Rewrites should carry a position, varied rhythm,
+ acknowledged complexity, first person where it fits, and specifics. Long form in
+ `references/plain-speech.md`. In **audit mode** voice notes are `Consider`-level, never `Fix`:
+ voice belongs to the author, so never rewrite a piece into your own under the banner of
+ removing AI tells. In **inline mode** apply this to your own drafting instead of reporting it.
+
+ ---
+
## What NOT to Flag
These look like AI tells but are not:
- **Direct quotations** - do not edit words written by someone else, even if they contain banned vocabulary
- **Genre conventions** - travel writing uses travel-guide voice because that is what travel writing sounds like. Marketing copy uses promotional tone. Journalism uses em-dashes. Fiction uses elegant variation and tricolons intentionally. Respect the genre.
- - **Technical terms of art** - `pivotal` in mechanical engineering, `realm` in networking or identity (Kerberos, OIDC), `foster` in child welfare, `landscape` in horticulture or graphic design, `crucial experiment` in philosophy of science
- - `landscape` in ML/AI contexts (optimization landscape, loss landscape, feature landscape)
- - `robust` in statistics/ML (robust estimation, robust optimization, robust regression)
+ - **Technical terms of art** - `pivotal` in mechanical engineering, `realm` in networking or identity (Kerberos, OIDC) and in fantasy fiction, `foster` in child welfare, `landscape` in horticulture, graphic design, or ML (loss landscape), `robust` in statistics and ML (robust estimation), `crucial experiment` in philosophy of science. Each per-check `Exception:` block above applies here too - domain context always overrides a pattern match
- **Deliberate register play** - satire, parody, pastiche, and stylistic experiments
- **Direct speech / dialog** in fiction - characters can sound however they sound
- **Lists that are actually lists** - a three-item list is only suspicious if the items are padded. An enumeration of three real things is fine
- - **Bold where it signals a term or path** - bolding a defined term on first use is standard
- **Em dashes in publications that require them** - some style guides (Chicago, AP) allow or require em dashes. The rule applies to your project's conventions
+ - **Real ranges** - `from 10ms to 2s`, `from v1 to v4` sit on a shared scale. Only ranges with no meaningful midpoint are false ranges
- **A genuine rhetorical question or single hard fragment** - one "What if X?" that the piece actually answers, or one deliberate "That's it." landing a point, is voice. Flag the pattern (stacked setups, repeated faux-profundity fragments), not the isolated use. An earned single use is not a tell, so it does not count toward the short-text density threshold or escalate to P1 on its own - it is the stacking that carries the severity.
### Counter-example (prose that looks AI but is fine)
> Nestled in the loss landscape near a sharp minimum, the model's robust features fail to generalize. This underscores a pivotal result from Keskar et al. (2017): flat minima tend to foster better test accuracy than sharp ones.
- Looks flagged at a glance: `nestled`, `landscape`, `robust`, `underscores`, `pivotal`, `foster`. But every term is a term of art (ML optimization, statistics), `underscores` has a real referent, and the citation is real. Verdict: **Fine**. Do not flag. Domain context overrides vocabulary match.
+ Looks flagged at a glance: `nestled`, `landscape`, `robust`, `underscores`, `pivotal`, `foster`. But `loss landscape` and `robust` are terms of art in ML and statistics, `underscores` has a real referent, `pivotal` and `foster` describe a checkable cited result rather than inflating a routine one, and `nestled` is doing literal spatial work. Six matches, one real cluster's worth of suspicion, zero tells. Verdict: **Fine**. Do not flag. Note the reasoning: domain context and a real referent each override a vocabulary match, and they are different arguments.
---
## Output Format
- ````markdown
- ## Anti-AI-Prose Audit: [scope]
-
- ### Findings
-
- #### [Category Name] ([count] items)
-
- **[action]** ([severity]) `path/to/file:line` - [description]
-
- > before: [quoted text from the source]
-
- > after: [suggested rewrite]
-
- ### Summary
- - X findings across Y files / sections
- - [overall read: does the piece sound human?]
- - [top-level observation: e.g., "vocabulary is mostly fine but the structure is formulaic"]
- ````
-
- Rules for the report itself:
- - **Omit empty categories.** If there are no formatting tells, do not write an empty "Formatting Tells (0 items)" heading
- - **Order within a category** P1 > P2 > P3
- - **Deletion fixes have no "after"** - write `> after: (cut)` or just state the delete in the description
- - **Apply these rules to your own audit.** Run the Self-Check on the report before returning it - an audit written in AI-slop voice is not credible
-
- Keep it concise. Show the before/after pair. Do not lecture about why AI writing is bad - the user already knows.
-
- ### Worked example (anchor the format)
-
- Input (README snippet, 48 words):
-
- > In today's fast-paced world, our platform empowers developers to seamlessly navigate the complex landscape of modern APIs. Built with a commitment to excellence, it boasts robust features and fosters innovation. Whether you're a beginner or expert, this tool serves as a pivotal resource for your journey toward better software.
-
- Report:
-
- ```
- ## Anti-AI-Prose Audit: README snippet (48 words)
-
- ### Findings
-
- #### Vocabulary Tells (9 items)
-
- **Fix** (P1) line 1 - cluster of 9 flagged words in 48 words: far above 4/500 threshold
- > before: empowers / seamlessly / navigate / landscape / commitment to / boasts / fosters / pivotal / journey toward
- > after: (rewrite, see below)
-
- #### Tonal Tells (2 items)
+ Audit mode only. See `references/audit-mode.md` for the report template, the rules for the
+ report itself, and a worked example anchoring the format.
- **Fix** (P1) line 1 - scaffolding padding and significance padding
- > before: "In today's fast-paced world"
- > after: (cut)
+ Inline mode has no output format: the cleaned prose is the output.
- **Fix** (P2) line 1 - promotional tone
- > before: "Built with a commitment to excellence"
- > after: (cut)
+ ## Reference Files
- ### Summary
- - 11 findings, one paragraph, dominant AI voice
- - Rewrite: "An HTTP API client for Python. Handles auth, retries, and pagination. Works with any OpenAPI 3.x spec."
- - Down from 48 words to 22, with concrete claims instead of posture
- ```
+ - `references/audit-mode.md` - audit workflow, scoping, density and severity scales, report template, worked example
+ - `references/plain-speech.md` - abstract metaphor nouns, the concreteness and actor tests, sentence splitting, voice restoration
+ - `references/fiction-tells.md` - AI fallback character names, adverb crutch, elegant variation
+ - `references/formatting-tells.md` - the formatting long tail
+ - `references/agent-hygiene.md` - cross-cutting agent hygiene shared across the collection
+ - `references/output-contract.md` - the shared output contract
## Output Contract
See `references/output-contract.md` for the full contract.
- **Skill name:** ANTI-AI-PROSE
- **Deliverable bucket:** `audits`
- - **Mode:** always-on. Every invocation emits the full contract - boxed inline header, body summary inline plus per-finding detail in the deliverable file, boxed conclusion, conclusion table.
+ - **Mode:** conditional, split on the two modes above. **Audit mode** (a file, paste, diff, or directory handed over for review) emits the full contract - boxed inline header, body summary inline plus per-finding detail in the deliverable file, boxed conclusion, conclusion table. **Inline mode** (filtering your own conversational output as you write it) emits nothing: no header, no findings, no deliverable, no announcement that the skill ran.
- **Deliverable path:** `docs/local/audits/anti-ai-prose/<YYYY-MM-DD>-<slug>.md`
- **Severity scale:** `P0 | P1 | P2 | P3 | info` (see shared contract).
## Related Skills
- - **anti-slop** - code quality audit. When auditing a repo, run anti-slop for code and anti-ai-prose for docs. The two are deliberately complementary.
- - **update-docs** - keeps docs accurate and trimmed after feature changes. Anti-ai-prose focuses on voice; update-docs focuses on factual drift.
- - **prompt-generator** - structures a rough draft into an LLM prompt. If the user wants to generate cleaner prose next time, this helps shape the prompt.
- - **full-review** - orchestrates code-review, anti-slop, security-audit, and update-docs. Not wired into full-review by default - invoke anti-ai-prose separately when the repo has substantial prose worth auditing.
- - **code-review** - catches logic and correctness issues. Anti-ai-prose only touches prose; code-review handles the code itself.
+ - **anti-slop** - code quality audit. When auditing a repo, run anti-slop for code and anti-ai-prose for docs. Deliberately complementary.
+ - **update-docs** - keeps docs accurate after feature changes. Anti-ai-prose covers voice, update-docs covers factual drift.
+ - **prompt-generator** - structures a rough draft into an LLM prompt, for generating cleaner prose next time.
+ - **full-review** - orchestrates code-review, anti-slop, security-audit, and update-docs. Anti-ai-prose is not wired in by default; invoke it separately when the repo has substantial prose.
+ - **code-review** - logic and correctness. Anti-ai-prose only touches prose.
---
## Rules
1. **Read the full piece before flagging.** A single `delve` in a 10,000-word book is not a pattern. Three in a paragraph is. Context determines severity.
2. **Never edit quoted material.** Original words from other authors stay as written.
3. **Respect genre conventions.** Travel writing, marketing, fiction, and academic prose have legitimate conventions that overlap with AI tells. Flag only when the writing is worse for the device, not because it matches a pattern.
4. **Every rewrite must be shorter or more specific.** Lateral synonym swaps are not improvements. If the rewrite is longer, the original was fine.
- 5. **Plan first, apply that plan only.** When applying fixes after the audit, change only what the report flagged. Do not freelance edits, do not rewrite adjacent prose, and do not chain a second pass of new fixes on top of the applied ones. New findings during application become a follow-up audit, not silent edits.
- 6. **Keep the voice of the author.** The goal is prose that sounds like a specific human, not a generic "good writing" rewrite. If you do not know the author's voice, leave stylistic calls alone and only flag the mechanical tells.
+ 5. **Plan first, apply that plan only.** When applying fixes after the audit, change only what the report flagged. New findings during application become a follow-up audit, not silent edits.
+ 6. **Keep the voice of the author.** The goal is prose that sounds like a specific human, not a generic "good writing" rewrite. If you do not know the author's voice, flag only the mechanical tells.
7. **Do not pad the report.** If there are three findings, list three. Not five. Not one inflated to three.
- 8. **Run the AI Self-Check** before returning any audit.
+ 8. **Inline mode is silent.** Applying these rules to your own output produces cleaner prose and nothing else: no report, no findings, no deliverable, no note that the skill ran. A user who wanted an audit will ask for one.
+ 9. **In your own output, drop the density thresholds.** They exist to stop overflagging someone else's long document. One chat artifact in your own reply is one too many.
+ 10. **Run the AI Self-Check.** The two mode items apply to every response; the rest before returning an audit.