human-tone — strip the AI flavor
Turn AI-flavored text back into something a person would write. Subtraction only: delete, shorten, merge, restore a plain verb. No style lessons, no new voice, no injected personality. The one piece of positive content is the guardrails — telling the model when not to touch.
Do two things at once: high recall (clear out the AI flavor that is actually there) and high precision (never damage terms, quotes, code, register-appropriate norms, or a person's deliberate phrasing). When the two conflict, favor precision — mis-cutting a real voice is less reversible than leaving a trace of AI flavor.
Two layers of criteria (why split this way)
AI flavor has two layers, so the criteria do too:
- Universal layer (this file +
references/*.md) — only the shape of each defect, how to judge it, and the control flow. The mother-patterns (evaluative inflation, mechanical antithesis, rule-of-three padding, …) come from how the text was generated, recur across languages, and are stated once. No language-specific trigger words, blacklists, or calques live here. - Language side (
references/languages/<code>/) — all the data for one language: how each defect surfaces in it, which words, which registers are exempt, its calque table.languages/currently holdszhanden.
Write a criterion once and every language benefits; keep the word lists apart. Adding a language means dropping a folder under languages/ — the universal layer and the script do not change. For how a language is auto-discovered and detected, see references/resolver.md.
Strength (default: standard, precision-leaning)
minimal— cut only the most glaring boilerplate and jargon; leave sentence structure almost untouched.standard(default) — check every mother-pattern, gated by register and whitelist; when unsure, leave it.aggressive— also fix mild clustering. Ask the user before moving up to this; do not escalate on your own.
All three share the same mother-patterns and guardrails and differ only in how tight the density threshold is. Precision-leaning by default, for the reason above: sooner under-cut than erase a person's judgment, tone, and detail.
Workflow (six steps)
- Detect — identify the language (zh / en / mixed); for mixed text, split by sentence and route each part to its language side; roughly judge the source (if it reads like a person's hand-written draft, raise the bar before rewriting). Detection and routing live in
references/resolver.md. - Register-gate — judge the register (social / marketing / business / formal / academic / official / fiction / …) and activate only the rules that register warrants. Fixed officialese and high academic nominalization are norms there, not defects.
- Scan — check against the mother-patterns (
references/patterns.md). A single occurrence is not judged; flag only what clusters in a short span, floats free of the content, and loses nothing when cut. - Subtractive rewrite — cut if you can; only if you cannot, shorten / restore a plain verb / swap in the idiomatic phrase. Protected spans (numbers, dates, proper nouns, quotes, code) stay untouched throughout.
- Re-scan — after rewriting, list ≥2 residual tells yourself and revise once more; run the flattening-rollback check (if it now reads like a neutral manual, revert); reconcile facts against the original so none are lost or invented. Optionally run
scripts/check.mjsto re-scan surface signals (report-only; the model arbitrates on conflict). - Output — final text by default; give a change list plus a before/after only when the user asks to annotate or detect-only.
Pointers (load as needed)
references/patterns.md— the 16 cross-language mother-patterns (MP-01..MP-16): each one's shape, how to judge it, which Orwell category it hangs on. Language-neutral; instances point to the packs.references/precision.md— the no-false-positive spine: register-gating · object-disambiguation · density threshold · whitelist gate · calque back-translation test · source heuristic · fallback downgrade.references/guardrails.md— what not to touch (the master table) + flattening rollback (over-cutting into a flat, even manual is its own failure) + keeping the human voice.references/workflow.md— the six steps in detail + the self-check loop + two-way fact reconciliation + optional script re-scan.references/resolver.md— the generic loader: how supported languages are auto-discovered, how the input language is detected, how mixed text routes by sentence.references/languages/<code>/— all data for one language:pack.md(full structured data) ·minimal.md(one-page condensed always-on rules) ·signals.json(rescan signals). The pack format and how to add a language are inreferences/languages/README.md; the universal layer stays put.
When in doubt, ask — do not force a cut. That is this skill's bottom line.