humanizer-lint 0.2.4 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +69 -23
- package/SKILL.md +134 -116
- package/package.json +26 -4
- package/rules/de-slop.json +190 -0
- package/rules/en-slop.json +50 -49
- package/rules/es-slop.json +190 -0
- package/rules/fr-slop.json +190 -0
- package/rules/id-slop.json +58 -57
- package/rules/ms-slop.json +190 -0
- package/rules/pt-slop.json +190 -0
- package/rules/zh-slop.json +190 -0
- package/scripts/analyze.mjs +9 -3
- package/scripts/core/analyzer-core.mjs +51 -24
- package/scripts/utils/tokenizer.mjs +149 -82
package/README.md
CHANGED
|
@@ -2,37 +2,70 @@
|
|
|
2
2
|
|
|
3
3
|
# humanizer-lint
|
|
4
4
|
|
|
5
|
-
### Deterministic prose and Markdown style linting
|
|
5
|
+
### Deterministic multi-language prose and Markdown style linting
|
|
6
6
|
|
|
7
7
|
Detect repetitive LLM phrasing, uniform sentence rhythm, structural clichés, and voice-profile drift without sending text to an external service.
|
|
8
8
|
|
|
9
9
|
[](https://github.com/yanstd888/humanizer-lint/releases)
|
|
10
10
|
[](https://www.npmjs.com/package/humanizer-lint)
|
|
11
11
|
[](https://github.com/yanstd888/humanizer-lint/actions/workflows/ci.yml)
|
|
12
|
+
[](package.json)
|
|
13
|
+
[](https://www.skills.sh/yanstd888/humanizer-lint/humanizer-lint/security/snyk)
|
|
14
|
+
[](https://www.skills.sh/yanstd888/humanizer-lint/humanizer-lint/security/socket)
|
|
15
|
+
[](https://www.skills.sh/yanstd888/humanizer-lint/humanizer-lint/security/agent-trust-hub)
|
|
16
|
+
[](https://humanizer.aiclub.ai.id/)
|
|
12
17
|
[](LICENSE)
|
|
13
18
|
[](https://nodejs.org/)
|
|
14
|
-
[](https://skills.sh/yanstd888/humanizer-lint)
|
|
19
|
+
[](https://www.skills.sh/yanstd888/humanizer-lint/humanizer-lint)
|
|
15
20
|
[](https://github.com/yanstd888/humanizer-lint/stargazers)
|
|
16
21
|
|
|
17
|
-
[What it does](#what-it-does) | [Install](#install) | [Quick start](#quick-start) | [CLI reference](#cli-reference) | [Detectors](#detectors-and-violation-types) | [Agent skill](#use-as-an-agent-skill) | [FAQ](#frequently-asked-questions)
|
|
22
|
+
[What it does](#what-it-does) | [Try in your browser](#try-in-your-browser) | [Install](#install) | [Quick start](#quick-start) | [CLI reference](#cli-reference) | [Detectors](#detectors-and-violation-types) | [Agent skill](#use-as-an-agent-skill) | [FAQ](#frequently-asked-questions)
|
|
18
23
|
|
|
19
24
|
</div>
|
|
20
25
|
|
|
21
|
-
**humanizer-lint is an open-source natural-text and Markdown prose linter
|
|
26
|
+
**humanizer-lint is an open-source natural-text and Markdown prose linter. Native `Intl.Segmenter` provides local sentence and word boundaries; eight bundled anti-slop packs cover English, Indonesian, Spanish, Malay, French, German, Portuguese, and Mandarin. Other ISO 639-1 inputs use universal stylometric checks. It is a style validator, not an authorship detector.**
|
|
22
27
|
|
|
23
|
-
|
|
28
|
+
```sh
|
|
29
|
+
npx skills add yanstd888/humanizer-lint
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Use the command above to install the agent skill. For one-off local linting, run the published `humanizer-lint` CLI below.
|
|
33
|
+
|
|
34
|
+
## Try in your browser
|
|
35
|
+
|
|
36
|
+
Use the official demo: [humanizer.aiclub.ai.id](https://humanizer.aiclub.ai.id).
|
|
37
|
+
|
|
38
|
+
[humanizer-lint.pages.dev](https://humanizer-lint.pages.dev) remains available as a mirror.
|
|
39
|
+
|
|
40
|
+
Open a deterministic sample view directly:
|
|
41
|
+
|
|
42
|
+
| Sample | URL | Expected result |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| AI sample (ID) | [open](https://humanizer.aiclub.ai.id/?sample=ai-id) | `FAIL`, score `< 65` |
|
|
45
|
+
| Human sample (ID) | [open](https://humanizer.aiclub.ai.id/?sample=human-id) | `PASS`, score `>= 88` |
|
|
46
|
+
| AI sample (EN) | [open](https://humanizer.aiclub.ai.id/?sample=ai-en) | `FAIL`, score `< 65` |
|
|
47
|
+
| Human sample (EN) | [open](https://humanizer.aiclub.ai.id/?sample=human-en) | `PASS`, score `>= 88` |
|
|
48
|
+
|
|
49
|
+
Use `?lang=en` or `?lang=id` to open the playground chrome in a chosen language for that visit; it does not overwrite a saved browser preference.
|
|
24
50
|
|
|
25
51
|
It works locally with zero runtime dependencies. Instead of rewriting text through another language model, it reports paragraph- and sentence-level violations with specific correction instructions. Use it to lint LLM-generated documentation, remove robotic AI phrasing from Markdown, check burstiness and lexical diversity, or add a deterministic prose gate to an agent workflow.
|
|
26
52
|
|
|
27
53
|
It can serve as a CLI text humanizer guardrail, automated writing style linter, or CI/CD documentation linter. The bundled rules flag overused AI clichés such as `delve` and `tapestry` without rewriting the source.
|
|
28
54
|
|
|
55
|
+
## Language support
|
|
56
|
+
|
|
57
|
+
| Tier | Languages | Checks |
|
|
58
|
+
|---|---|---|
|
|
59
|
+
| Tier 1 — rule packs | `en`, `id`, `es`, `ms`, `fr`, `de`, `pt`, `zh` | Universal stylometric metrics plus lexical, definitional-opening, and structural-cliché packs; Indonesian keeps its morphology rules. |
|
|
60
|
+
| Tier 2 — universal | `universal` or another ISO 639-1 code such as `tr`, `ja`, or `ar` | Universal stylometry through native `Intl.Segmenter`: burstiness, adjacent rhythm delta, adaptive MATTR, paragraph symmetry, repeated starters, and compression ratio. |
|
|
61
|
+
|
|
29
62
|
## What it does
|
|
30
63
|
|
|
31
64
|
`humanizer-lint` analyzes prose after removing or neutralizing common non-prose Markdown structures. It then combines lexical rules, sentence-length statistics, structural checks, Indonesian morphology checks, and an optional voice profile into a score from 0 to 100.
|
|
32
65
|
|
|
33
66
|
The project includes:
|
|
34
67
|
|
|
35
|
-
-
|
|
68
|
+
- Eight reviewable lexical and structural rule packs for EN, ID, ES, MS, FR, DE, PT, and ZH.
|
|
36
69
|
- Sentence-length burstiness, adjacent rhythm delta, short/long sentence ratios, and adaptive MATTR.
|
|
37
70
|
- Repetition checks based on paragraph symmetry, repeated sentence starters, and compression ratio.
|
|
38
71
|
- Indonesian nominalization, passive-voice, loanword, and translation-style opening checks.
|
|
@@ -105,20 +138,21 @@ Language: en
|
|
|
105
138
|
|
|
106
139
|
and exits with code `0`.
|
|
107
140
|
|
|
108
|
-
##
|
|
141
|
+
## Static `SKILL.md` Humanizers vs. `humanizer-lint` (Closed-Loop CLI)
|
|
109
142
|
|
|
110
|
-
|
|
143
|
+
A static writing prompt can ask a model to vary prose, but it cannot verify the finished draft. `humanizer-lint` takes the smaller, deterministic approach: inspect the exact text after drafting, make only flagged revisions, then check again locally.
|
|
111
144
|
|
|
112
|
-
| Capability |
|
|
113
|
-
|
|
114
|
-
|
|
|
115
|
-
| Measures sentence rhythm |
|
|
116
|
-
|
|
|
117
|
-
|
|
|
118
|
-
|
|
|
119
|
-
|
|
|
120
|
-
|
|
|
121
|
-
|
|
|
145
|
+
| Capability | Static `SKILL.md` humanizer prompt | `humanizer-lint` closed-loop CLI |
|
|
146
|
+
|---|---|---|
|
|
147
|
+
| Checks the completed draft | No | Yes, exact input is measured |
|
|
148
|
+
| Measures sentence rhythm | Prompt guidance only | CV, adjacent delta, short/long distribution |
|
|
149
|
+
| Measures vocabulary repetition | Prompt guidance only | Adaptive MATTR and repetition checks |
|
|
150
|
+
| Flags configured AI clichés | Model-dependent | Rule IDs and locations |
|
|
151
|
+
| Preserves source text | Depends on rewrite | Yes, analysis only |
|
|
152
|
+
| Runs offline after installation | Depends on agent/model | Yes |
|
|
153
|
+
| Supports EN and ID lexical rules | Prompt-dependent | Yes |
|
|
154
|
+
| Produces JSON and exit codes | Usually no | Yes |
|
|
155
|
+
| Proves human authorship | No | No |
|
|
122
156
|
|
|
123
157
|
If you are looking for an AI writing detector linter, a ChatGPT tone remover CLI, or an open-source alternative to AI humanizers, note the boundary: this tool detects configured style signals and rhythm problems. It does not claim to determine whether a human or model wrote the text.
|
|
124
158
|
|
|
@@ -143,7 +177,7 @@ npm install -g humanizer-lint
|
|
|
143
177
|
The recommended installation for coding agents is through the skills CLI:
|
|
144
178
|
|
|
145
179
|
```sh
|
|
146
|
-
npx skills add yanstd888/humanizer-lint
|
|
180
|
+
npx skills add yanstd888/humanizer-lint
|
|
147
181
|
```
|
|
148
182
|
|
|
149
183
|
The public listing, installation command, and install count are available on [skills.sh](https://skills.sh/yanstd888/humanizer-lint).
|
|
@@ -165,12 +199,24 @@ No dependency installation or build step is required.
|
|
|
165
199
|
|
|
166
200
|
## Quick start
|
|
167
201
|
|
|
168
|
-
Analyze one file:
|
|
202
|
+
Analyze one file with auto-detection:
|
|
169
203
|
|
|
170
204
|
```sh
|
|
171
205
|
humanizer-lint --file draft.md --lang auto
|
|
172
206
|
```
|
|
173
207
|
|
|
208
|
+
Force universal stylometry for a language without a bundled pack:
|
|
209
|
+
|
|
210
|
+
```sh
|
|
211
|
+
humanizer-lint --file draft.md --lang universal
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Request an ISO 639-1 language directly:
|
|
215
|
+
|
|
216
|
+
```sh
|
|
217
|
+
humanizer-lint --file draft.md --lang es
|
|
218
|
+
```
|
|
219
|
+
|
|
174
220
|
Return machine-readable JSON:
|
|
175
221
|
|
|
176
222
|
```sh
|
|
@@ -238,7 +284,7 @@ Untuk contoh ini, skor naik dari **38** menjadi **100** setelah frasa template d
|
|
|
238
284
|
### Analyzer
|
|
239
285
|
|
|
240
286
|
```text
|
|
241
|
-
humanizer-lint (--file <path> | --stdin) [--lang
|
|
287
|
+
humanizer-lint (--file <path> | --stdin) [--lang auto|universal|<ISO-639-1>] [--profile <path>] [--json]
|
|
242
288
|
```
|
|
243
289
|
|
|
244
290
|
| Option | Required | Description |
|
|
@@ -394,7 +440,7 @@ The skill is indexed on skills.sh and its current listing passes the platform's
|
|
|
394
440
|
|
|
395
441
|
The skills.sh badge at the top of this README is the public source for anonymous installation activity. GitHub's native `Used by` sidebar is generated automatically from its dependency graph; repository owners cannot set that count manually.
|
|
396
442
|
|
|
397
|
-
Because the CLI is
|
|
443
|
+
Because the CLI is published on npm, npm downloads and downstream package manifests are the relevant distribution signals. The skills.sh listing separately represents agent-skill installation activity.
|
|
398
444
|
|
|
399
445
|
## CI and repository automation
|
|
400
446
|
|
|
@@ -460,7 +506,7 @@ It can identify the exact paragraph or sentence that matches a configured phrase
|
|
|
460
506
|
<details>
|
|
461
507
|
<summary><strong>Can I install it from npm?</strong></summary>
|
|
462
508
|
|
|
463
|
-
|
|
509
|
+
Yes. Run `npx humanizer-lint --file draft.md --lang auto` for a one-off command, or install it globally with `npm install -g humanizer-lint`. Install the agent skill separately with `npx skills add yanstd888/humanizer-lint`.
|
|
464
510
|
|
|
465
511
|
</details>
|
|
466
512
|
|
package/SKILL.md
CHANGED
|
@@ -1,116 +1,134 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: humanizer-lint
|
|
3
|
-
description:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
Completion criterion:
|
|
68
|
-
|
|
69
|
-
###
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
-
|
|
115
|
-
-
|
|
116
|
-
-
|
|
1
|
+
---
|
|
2
|
+
name: humanizer-lint
|
|
3
|
+
description: Deterministic universal multi-language stylometric analyzer and anti-slop prose linter. Uses native Intl.Segmenter plus eight built-in EN, ID, ES, MS, FR, DE, PT, and ZH lexical rule packs with a zero-dependency local Node.js CLI validator.
|
|
4
|
+
version: 1.2.0
|
|
5
|
+
license: MIT
|
|
6
|
+
compatibility: Node.js >= 18.3.0 (zero external dependencies)
|
|
7
|
+
allowed-tools: Bash(node:*) Read Write
|
|
8
|
+
metadata:
|
|
9
|
+
version: "1.2.0"
|
|
10
|
+
author: "yanstd888"
|
|
11
|
+
domain: "writing"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Humanizer Lint
|
|
15
|
+
|
|
16
|
+
Use this skill when writing or revising prose that must avoid uniform agent rhythm, repeated stock phrases, and excessive translation-style structure. The local analyzer is mandatory. Native `Intl.Segmenter` handles sentence and word boundaries; EN, ID, ES, MS, FR, DE, PT, and ZH use bundled lexical packs, while other ISO 639-1 languages use universal stylometry. It uses only Node.js built-ins and sends no text over the network.
|
|
17
|
+
|
|
18
|
+
## When to use
|
|
19
|
+
|
|
20
|
+
- Humanize an agent-generated draft in Indonesian or English.
|
|
21
|
+
- Check prose for uniform sentence rhythm and repeated lexical templates.
|
|
22
|
+
- Match a user voice profile generated from writing samples.
|
|
23
|
+
- Verify edited prose before returning it.
|
|
24
|
+
|
|
25
|
+
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.
|
|
26
|
+
|
|
27
|
+
## Trigger Intents & Search Keywords
|
|
28
|
+
|
|
29
|
+
Use this skill for requests such as:
|
|
30
|
+
|
|
31
|
+
- "humanize AI text"
|
|
32
|
+
- "remove AI slop and clichés"
|
|
33
|
+
- "bypass robotic writing patterns"
|
|
34
|
+
- "increase sentence burstiness and perplexity"
|
|
35
|
+
- "lint markdown documentation prose"
|
|
36
|
+
- "humanizer bahasa Indonesia"
|
|
37
|
+
- "humanize Spanish, Malay, French, German, Portuguese, or Chinese prose"
|
|
38
|
+
- "check Japanese, Arabic, or another language with universal stylometry"
|
|
39
|
+
- "perbaiki tulisan AI yang kaku"
|
|
40
|
+
- "match author voice profile"
|
|
41
|
+
|
|
42
|
+
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.
|
|
43
|
+
|
|
44
|
+
## Prerequisites
|
|
45
|
+
|
|
46
|
+
- Node.js 18.3 or newer.
|
|
47
|
+
- Resolve this skill's installed directory as `<skill_dir>` at runtime.
|
|
48
|
+
- Optional custom profile: `<skill_dir>/profiles/custom-voice.json`.
|
|
49
|
+
|
|
50
|
+
## Closed-loop protocol
|
|
51
|
+
|
|
52
|
+
### 1. Resolve context
|
|
53
|
+
|
|
54
|
+
1. Resolve `<skill_dir>` from this `SKILL.md`; never assume the current working directory.
|
|
55
|
+
2. Determine `auto`, `universal`, or a two-letter ISO 639-1 code. `auto` selects a bundled pack when evidence is strong; otherwise it uses `universal`.
|
|
56
|
+
3. If `<skill_dir>/profiles/custom-voice.json` exists, pass it with `--profile`. Otherwise use the bundled default profile.
|
|
57
|
+
4. Keep source facts, names, numbers, dates, quotations, citations, and technical terms unchanged unless the user explicitly requests a factual edit.
|
|
58
|
+
|
|
59
|
+
Completion criterion: language, analyzer path, and optional profile path are known before drafting.
|
|
60
|
+
|
|
61
|
+
### 2. Draft with asymmetric rhythm
|
|
62
|
+
|
|
63
|
+
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.
|
|
64
|
+
|
|
65
|
+
Do not distort meaning to hit a metric. Sentence-length variation must come from legitimate splitting, merging, or reordering of supported material.
|
|
66
|
+
|
|
67
|
+
Completion criterion: the draft preserves every source claim and contains no invented detail.
|
|
68
|
+
|
|
69
|
+
### 3. Run deterministic verification
|
|
70
|
+
|
|
71
|
+
Prefer stdin so the target repository remains clean:
|
|
72
|
+
|
|
73
|
+
```sh
|
|
74
|
+
node <skill_dir>/scripts/analyze.mjs --stdin --lang auto --json
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Pipe the complete draft to stdin. With a custom profile:
|
|
78
|
+
|
|
79
|
+
```sh
|
|
80
|
+
node <skill_dir>/scripts/analyze.mjs --stdin --lang auto --profile <skill_dir>/profiles/custom-voice.json --json
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Never skip this command. Read `status`, `score`, `metrics`, and every item in `violations`.
|
|
84
|
+
|
|
85
|
+
Completion criterion: a parseable JSON report exists for the exact draft being considered.
|
|
86
|
+
|
|
87
|
+
### 4. Correct only flagged prose
|
|
88
|
+
|
|
89
|
+
If `status` is `FAIL`:
|
|
90
|
+
|
|
91
|
+
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.
|
|
92
|
+
2. Edit only the cited sentences or paragraphs, or make the smallest whole-text rhythm correction named by a statistical diagnostic.
|
|
93
|
+
3. Follow each `fixInstruction` without adding or dropping facts.
|
|
94
|
+
4. Run the analyzer again on the complete revised draft.
|
|
95
|
+
5. Stop after three analyzer iterations.
|
|
96
|
+
|
|
97
|
+
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.
|
|
98
|
+
|
|
99
|
+
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.
|
|
100
|
+
|
|
101
|
+
Completion criterion: return prose only after `PASS`, or an explicitly labeled short-text `SKIP` with no unresolved lexical violations.
|
|
102
|
+
|
|
103
|
+
## Analyzer commands
|
|
104
|
+
|
|
105
|
+
```sh
|
|
106
|
+
node <skill_dir>/scripts/analyze.mjs --file draft.md --lang id --json
|
|
107
|
+
node <skill_dir>/scripts/analyze.mjs --file draft.md --lang en
|
|
108
|
+
node <skill_dir>/scripts/analyze.mjs --stdin --lang auto --json
|
|
109
|
+
node <skill_dir>/scripts/fingerprint.mjs --input samples --output <skill_dir>/profiles/custom-voice.json
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Exit codes:
|
|
113
|
+
|
|
114
|
+
- `0`: `PASS` or `SKIP`.
|
|
115
|
+
- `1`: analyzed successfully and returned `FAIL`.
|
|
116
|
+
- `2`: invalid arguments, unreadable input, or malformed profile.
|
|
117
|
+
|
|
118
|
+
## Pitfalls
|
|
119
|
+
|
|
120
|
+
- A high score does not prove human authorship. It proves only that the configured checks passed.
|
|
121
|
+
- Very short text cannot support statistical stylometry.
|
|
122
|
+
- Technical, legal, and intentionally repetitive prose may require a custom profile.
|
|
123
|
+
- Do not rewrite unflagged paragraphs merely to increase the score.
|
|
124
|
+
- Do not treat `voiceProfileDeviation` as an authorship probability; it is a relative distance from the selected profile.
|
|
125
|
+
|
|
126
|
+
## Verification
|
|
127
|
+
|
|
128
|
+
Before returning revised prose:
|
|
129
|
+
|
|
130
|
+
- [ ] Analyzer ran against the final exact text.
|
|
131
|
+
- [ ] Final status is `PASS`, or an honest lexical-clean `SKIP` for short text.
|
|
132
|
+
- [ ] No source fact, identifier, number, quotation, or citation changed unintentionally.
|
|
133
|
+
- [ ] Only flagged prose was revised after the first analyzer pass.
|
|
134
|
+
- [ ] No network service or external package was used.
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "humanizer-lint",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "Universal multi-language stylometric linter and anti-AI-slop diagnostic engine with native Intl.Segmenter",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=18.3.0"
|
|
8
8
|
},
|
|
9
9
|
"bin": {
|
|
10
|
-
"humanizer-lint": "
|
|
11
|
-
"humanizer-fingerprint": "
|
|
10
|
+
"humanizer-lint": "scripts/analyze.mjs",
|
|
11
|
+
"humanizer-fingerprint": "scripts/fingerprint.mjs"
|
|
12
12
|
},
|
|
13
13
|
"files": [
|
|
14
14
|
"SKILL.md",
|
|
@@ -22,5 +22,27 @@
|
|
|
22
22
|
"test": "node --test tests/test-runner.mjs",
|
|
23
23
|
"build:demo": "node demo/build.mjs"
|
|
24
24
|
},
|
|
25
|
+
"homepage": "https://humanizer.aiclub.ai.id",
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "git+https://github.com/yanstd888/humanizer-lint.git"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"skills-sh",
|
|
32
|
+
"agent-skill",
|
|
33
|
+
"ai-humanizer",
|
|
34
|
+
"anti-slop",
|
|
35
|
+
"prose-linter",
|
|
36
|
+
"stylometry",
|
|
37
|
+
"burstiness",
|
|
38
|
+
"mattr",
|
|
39
|
+
"multilingual-nlp",
|
|
40
|
+
"indonesian-nlp",
|
|
41
|
+
"claude-code",
|
|
42
|
+
"cursor-skill",
|
|
43
|
+
"windsurf",
|
|
44
|
+
"codex",
|
|
45
|
+
"gemini-cli"
|
|
46
|
+
],
|
|
25
47
|
"license": "MIT"
|
|
26
48
|
}
|