humanizer-lint · diff
v1.1.0 to v1.4.1
61 added, 90 removed. Audit A to A.
---
name: humanizer-lint
- description: Deterministic AI text humanizer, anti-slop prose linter, and stylometric analyzer (EN/ID). Fixes uniform sentence rhythm, low burstiness (CV), MATTR vocabulary repetition, and LLM clichés using a local zero-dependency Node.js CLI validator.
- version: 1.1.0
- license: MIT
- compatibility: Node.js >= 18.3.0 (zero external dependencies)
- allowed-tools: Bash(node:*) Read Write
- metadata:
- version: "1.1.0"
- author: "yanstd888"
- domain: "writing"
+ description: Deterministic prose linter, AI writing style editor, and stylometric rhythm analyzer for natural copywriting, blog posts, SEO articles, and technical documentation. Provides 8 anti-cliché rule packs (EN, ID, ES, MS, FR, DE, PT, ZH) and universal sentence-rhythm diagnostics for 100+ languages via local Node.js CLI.
+ summary: Local deterministic prose, copywriting, and code-comment linter with 8 lexical anti-cliché packs and universal stylometric rhythm analysis across 100+ languages.
+ topic: agent-workflows
+ allowed-tools: Bash(node:*)
+ version: 1.4.1
---
# Humanizer Lint
- Use this skill when writing or revising Indonesian or English prose that must avoid uniform agent rhythm, repeated stock phrases, and excessive translation-style structure. The local analyzer is mandatory. It uses only Node.js built-ins and sends no text over the network.
-
- ## When to use
-
- - Humanize an agent-generated draft in Indonesian or English.
- - Check prose for uniform sentence rhythm and repeated lexical templates.
- - Match a user voice profile generated from writing samples.
- - Verify edited prose before returning it.
-
- Do not use it to alter code, commands, structured data, quotations, legal language, or factual identifiers. The sanitizer excludes common Markdown structures, but the agent must still preserve meaning and supported facts.
-
- ## Trigger Intents & Search Keywords
-
- Use this skill for requests such as:
+ **Audit prose locally, revise only measured problems, and verify the final text before delivery.**
- - "humanize AI text"
- - "remove AI slop and clichés"
- - "bypass robotic writing patterns"
- - "increase sentence burstiness and perplexity"
- - "lint markdown documentation prose"
- - "humanizer bahasa Indonesia"
- - "perbaiki tulisan AI yang kaku"
- - "match author voice profile"
+ - Run `node <skill_dir>/scripts/analyze.mjs --stdin --json` for deterministic local analysis.
+ - Use 8 language-specific lexical and morphological packs (`en`, `id`, `es`, `ms`, `fr`, `de`, `pt`, `zh`) plus universal sentence-rhythm segmentation for 100+ languages through `Intl.Segmenter`.
+ - Follow each finding's surgical `suggestedReplacement`, `splitSuggestion`, and `fixInstruction` without rewriting clean prose.
+ - Build a local author voice profile with `node <skill_dir>/scripts/fingerprint.mjs`; samples never leave the machine.
- These intents apply across Claude Code, Cursor, Windsurf, Cline, Codex, and Gemini CLI when the request needs deterministic EN/ID prose validation rather than an unmeasured rewrite.
+ ## Agent Tool Boundary
- ## Prerequisites
+ Inside an agent workflow, execute only:
- - Node.js 18.3 or newer.
- - Resolve this skill's installed directory as `<skill_dir>` at runtime.
- - Optional custom profile: `<skill_dir>/profiles/custom-voice.json`.
+ ```sh
+ node <skill_dir>/scripts/analyze.mjs --stdin --json
+ node <skill_dir>/scripts/fingerprint.mjs --dir <samples_dir> --out <skill_dir>/profiles/custom-voice.json
+ ```
- ## Closed-loop protocol
+ Do not call network tools or upload the user's text. `npx humanizer-lint` is a manual human CLI convenience outside this agent workflow.
- ### 1. Resolve context
+ ## Workflow A — Drafting New Prose
- 1. Resolve `<skill_dir>` from this `SKILL.md`; never assume the current working directory.
- 2. Determine `id`, `en`, or `auto` from the requested output.
- 3. If `<skill_dir>/profiles/custom-voice.json` exists, pass it with `--profile`. Otherwise use the bundled default profile.
- 4. Keep source facts, names, numbers, dates, quotations, citations, and technical terms unchanged unless the user explicitly requests a factual edit.
+ 1. Write with concrete nouns, active verbs, specific claims, and transitions that reflect the actual relationship between ideas.
+ 2. Keep facts, quotations, names, numbers, and required terminology unchanged.
+ 3. Avoid stock openings, staged conversational hooks, generic claims, and repeated sentence templates.
+ 4. Before returning the draft, pipe it to `node <skill_dir>/scripts/analyze.mjs --stdin --json`.
+ 5. Revise only actionable findings, then verify again. Stop after at most three analysis/revision passes.
- Completion criterion: language, analyzer path, and optional profile path are known before drafting.
+ ## Workflow B — Auditing and Revising Existing Text
- ### 2. Draft with asymmetric rhythm
+ 1. Run the analyzer **before changing a single word**.
+ 2. If the result is `SKIP`, preserve short or code-heavy input unless a specific lexical or domain finding identifies a real problem.
+ 3. Edit only flagged sentences or phrases. Prefer `suggestedReplacement` and `splitSuggestion`; otherwise follow `fixInstruction`.
+ 4. Preserve all unflagged prose and factual meaning.
+ 5. Re-run the analyzer. Stop after at most three iterations and report any unresolved diagnostic instead of forcing a rewrite.
- Write the first draft with concrete subjects and verbs. Mix short 2 to 6 word sentences with longer 26 to 38 word sentences where the meaning supports them. Avoid generic introductions and summary paragraphs that merely repeat earlier content.
+ ## Metrics Are Diagnostics, Not Rigid Targets
- Do not distort meaning to hit a metric. Sentence-length variation must come from legitimate splitting, merging, or reordering of supported material.
+ `CV`, paragraph `CV`, adjacent sentence delta ($\Delta_{adj}$), sentence-length ranges, MATTR, and compression ratio identify flat or repetitive patterns. They are not mechanical writing targets. Never manufacture a 3-word sentence followed by a 35-word sentence merely to raise a number; the result must still sound coherent.
- Completion criterion: the draft preserves every source claim and contains no invented detail.
+ Formal, legal, academic, and regulated documents often use lower sentence variance, nominalized terms, or prescribed wording. Preserve required domain language. When a consistent author voice matters, use a custom `--profile` rather than forcing casual cadence.
- ### 3. Run deterministic verification
+ ## Local Voice Profile
- Prefer stdin so the target repository remains clean:
+ Place at least three human writing samples in one local folder. A combined total of 500 words or more is recommended. Files must be `.txt` or `.md`.
```sh
- node <skill_dir>/scripts/analyze.mjs --stdin --lang auto --json
+ node <skill_dir>/scripts/fingerprint.mjs \
+ --dir <samples_dir> \
+ --out <skill_dir>/profiles/custom-voice.json
```
- Pipe the complete draft to stdin. With a custom profile:
+ Then analyze with:
```sh
- node <skill_dir>/scripts/analyze.mjs --stdin --lang auto --profile <skill_dir>/profiles/custom-voice.json --json
+ node <skill_dir>/scripts/analyze.mjs \
+ --stdin \
+ --profile <skill_dir>/profiles/custom-voice.json \
+ --json
```
- Never skip this command. Read `status`, `score`, `metrics`, and every item in `violations`.
-
- Completion criterion: a parseable JSON report exists for the exact draft being considered.
-
- ### 4. Correct only flagged prose
+ Fingerprinting and analysis run locally with zero network uploads.
- If `status` is `FAIL`:
+ ## Indonesian Revision Examples
- 1. Group overlapping violations by paragraph. Whole-text statistical diagnostics (`LOW_BURSTINESS`, `MISSING_SENTENCE_RANGE`, `LOW_ADJACENT_DELTA`, and `LOW_LEXICAL_DIVERSITY`) identify the global gate when no single sentence is solely responsible.
- 2. Edit only the cited sentences or paragraphs, or make the smallest whole-text rhythm correction named by a statistical diagnostic.
- 3. Follow each `fixInstruction` without adding or dropping facts.
- 4. Run the analyzer again on the complete revised draft.
- 5. Stop after three analyzer iterations.
+ **Before — FAIL**
- If `status` is `SKIP`, statistical stylometry is unavailable. Fix any lexical violations that are still reported, preserve the short form, and state that the statistical gate was skipped because the text is too short.
+ > Tidak dapat dipungkiri bahwa pengimplementasian sistem ini dilakukan untuk meningkatkan efisiensi proses.
- If the third iteration still returns `FAIL`, do not present the draft as verified. Return the remaining diagnostics and ask whether the user wants a broader rewrite.
+ **After — PASS**
- Completion criterion: return prose only after `PASS`, or an explicitly labeled short-text `SKIP` with no unresolved lexical violations.
+ > Tim menerapkan sistem ini untuk mempercepat proses.
- ## Analyzer commands
+ **Before — FAIL**
- ```sh
- node <skill_dir>/scripts/analyze.mjs --file draft.md --lang id --json
- node <skill_dir>/scripts/analyze.mjs --file draft.md --lang en
- node <skill_dir>/scripts/analyze.mjs --stdin --lang auto --json
- node <skill_dir>/scripts/fingerprint.mjs --input samples --output <skill_dir>/profiles/custom-voice.json
- ```
+ > Dalam rangka memastikan stabilitas, pelaksanaan pemeriksaan dilakukan oleh tim sebelum deployment.
- Exit codes:
+ **After — PASS**
- - `0`: `PASS` or `SKIP`.
- - `1`: analyzed successfully and returned `FAIL`.
- - `2`: invalid arguments, unreadable input, or malformed profile.
+ > Tim memeriksa sistem sebelum deployment untuk memastikan layanan tetap stabil.
- ## Pitfalls
+ Mixed Indonesian–English technical prose is supported. Keep necessary terms such as `deployment`, `latency`, `cache`, `middleware`, and `pull request`; Indonesian stopwords and sentence structure determine routing when they dominate the text.
- - A high score does not prove human authorship. It proves only that the configured checks passed.
- - Very short text cannot support statistical stylometry.
- - Technical, legal, and intentionally repetitive prose may require a custom profile.
- - Do not rewrite unflagged paragraphs merely to increase the score.
- - Do not treat `voiceProfileDeviation` as an authorship probability; it is a relative distance from the selected profile.
+ ## Delivery Gate
- ## Verification
+ Use `--delivery-gate` for a human-readable four-block report or `--json` for the same structured data:
- Before returning revised prose:
+ 1. `rhythmAndStylometry` — document CV, paragraph CV, adjacent delta, range, and clause symmetry.
+ 2. `lexicalAndMorphology` — active rule pack, repeated n-grams, stock phrases, nominalization, and passive bloat.
+ 3. `domainHygiene` — copy/CTA, code comments, and filename-aware UI/accessibility/responsive checks.
+ 4. `finalVerdict` — score, `PASS`/`FAIL`/`SKIP`, and prioritized one-pass fixes.
- - [ ] Analyzer ran against the final exact text.
- - [ ] Final status is `PASS`, or an honest lexical-clean `SKIP` for short text.
- - [ ] No source fact, identifier, number, quotation, or citation changed unintentionally.
- - [ ] Only flagged prose was revised after the first analyzer pass.
- - [ ] No network service or external package was used.
+ ## Search Intents & Editorial Keywords
+ `perbaiki tulisan AI yang kaku`; `hilangkan kata klise AI`; `audit ritme kalimat dan burstiness`; `rapikan dokumentasi teknis`; `polish robotic LLM drafts`; `remove repetitive AI stock phrases`; `lint markdown documentation and copywriting`; `check sentence rhythm and lexical repetition`; `消除AI写作腔`; `提升文章可读性`.