zero-slop 2.11.2__tar.gz
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.
- zero_slop-2.11.2/LICENSE +21 -0
- zero_slop-2.11.2/PKG-INFO +109 -0
- zero_slop-2.11.2/README-pypi.md +83 -0
- zero_slop-2.11.2/README.md +321 -0
- zero_slop-2.11.2/packaging/zero_slop/__init__.py +14 -0
- zero_slop-2.11.2/packaging/zero_slop/data/learned.json +198 -0
- zero_slop-2.11.2/packaging/zero_slop/data/patterns.json +2361 -0
- zero_slop-2.11.2/packaging/zero_slop/scripts/__init__.py +1 -0
- zero_slop-2.11.2/packaging/zero_slop/scripts/gate.py +74 -0
- zero_slop-2.11.2/packaging/zero_slop/scripts/register.py +1304 -0
- zero_slop-2.11.2/packaging/zero_slop/scripts/rerank.py +159 -0
- zero_slop-2.11.2/packaging/zero_slop/scripts/safeio.py +147 -0
- zero_slop-2.11.2/packaging/zero_slop/scripts/slopscore.py +2009 -0
- zero_slop-2.11.2/packaging/zero_slop.egg-info/PKG-INFO +109 -0
- zero_slop-2.11.2/packaging/zero_slop.egg-info/SOURCES.txt +22 -0
- zero_slop-2.11.2/packaging/zero_slop.egg-info/dependency_links.txt +1 -0
- zero_slop-2.11.2/packaging/zero_slop.egg-info/entry_points.txt +4 -0
- zero_slop-2.11.2/packaging/zero_slop.egg-info/top_level.txt +1 -0
- zero_slop-2.11.2/pyproject.toml +55 -0
- zero_slop-2.11.2/setup.cfg +4 -0
- zero_slop-2.11.2/tests/test_all.py +5142 -0
- zero_slop-2.11.2/tests/test_distribution.py +214 -0
- zero_slop-2.11.2/tests/test_release_automation.py +285 -0
- zero_slop-2.11.2/tests/test_release_surfaces.py +329 -0
zero_slop-2.11.2/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Garage Capital Ventures
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: zero-slop
|
|
3
|
+
Version: 2.11.2
|
|
4
|
+
Summary: Score AI-sounding prose 0-100 and check what a rewrite changed. Offline, standard library only.
|
|
5
|
+
Author-email: Manav Mishra <manavm@gmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://zero-slop.ai
|
|
8
|
+
Project-URL: Source, https://github.com/manavmishra/ZeroSlop
|
|
9
|
+
Project-URL: Changelog, https://github.com/manavmishra/ZeroSlop/releases
|
|
10
|
+
Project-URL: Issues, https://github.com/manavmishra/ZeroSlop/issues
|
|
11
|
+
Keywords: prose,linter,writing,editing,ai-slop,de-slop,humanize,style,ci,static-analysis
|
|
12
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
19
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
20
|
+
Classifier: Topic :: Text Processing :: Linguistic
|
|
21
|
+
Classifier: Typing :: Typed
|
|
22
|
+
Requires-Python: >=3.9
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Dynamic: license-file
|
|
26
|
+
|
|
27
|
+
# Zero Slop
|
|
28
|
+
|
|
29
|
+
**Find AI-sounding writing. Keep the source intact.**
|
|
30
|
+
|
|
31
|
+
A prose linter that scores text 0–100 for stock phrasing, mechanical rhythm,
|
|
32
|
+
vague claims, and canned formatting, then tells you which phrases produced the
|
|
33
|
+
number. It runs offline, uses only the Python standard library, and has no
|
|
34
|
+
runtime dependencies.
|
|
35
|
+
|
|
36
|
+
The score describes the writing. It does not identify who wrote it. Zero Slop is
|
|
37
|
+
not an AI detector and must not be used as one.
|
|
38
|
+
|
|
39
|
+
## Install
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
pip install zero-slop
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Use it
|
|
46
|
+
|
|
47
|
+
```sh
|
|
48
|
+
slopscore draft.md # readable report
|
|
49
|
+
slopscore --json draft.md # machine-readable
|
|
50
|
+
slopscore --explain draft.md # report, reasons, line-by-line map
|
|
51
|
+
slopscore --batch docs/ --gate 25 # exits non-zero above the threshold
|
|
52
|
+
slopscore --fidelity before.md after.md # did the rewrite keep the facts?
|
|
53
|
+
cat draft.md | slopscore # stdin
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### As a library
|
|
57
|
+
|
|
58
|
+
```python
|
|
59
|
+
from zero_slop import load_patterns, score_text
|
|
60
|
+
|
|
61
|
+
data = load_patterns()
|
|
62
|
+
score_text("We are thrilled to announce a transformative solution.", data)["ai_likelihood"]
|
|
63
|
+
# 99.3
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### In CI
|
|
67
|
+
|
|
68
|
+
```yaml
|
|
69
|
+
- uses: manavmishra/ZeroSlop@v2.11.2
|
|
70
|
+
with:
|
|
71
|
+
path: docs
|
|
72
|
+
gate: "25"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### As a pre-commit hook
|
|
76
|
+
|
|
77
|
+
```yaml
|
|
78
|
+
repos:
|
|
79
|
+
- repo: https://github.com/manavmishra/ZeroSlop
|
|
80
|
+
rev: v2.11.2
|
|
81
|
+
hooks:
|
|
82
|
+
- id: zero-slop
|
|
83
|
+
args: [--gate, "25"]
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## What the score means
|
|
87
|
+
|
|
88
|
+
Human reference samples score 9–21. Unedited model output averages 77. Those are
|
|
89
|
+
reference points, not boundaries. The scoring was run over 7,627 abstracts from
|
|
90
|
+
the MIT-licensed RAID+ dataset and all 2,187 Beemo records; the drafts, outputs,
|
|
91
|
+
and hashes are in the repository so the numbers can be reproduced.
|
|
92
|
+
|
|
93
|
+
The scorer handles about 500 documents per second on a single machine, so it is
|
|
94
|
+
usable as a batch gate rather than only an interactive tool.
|
|
95
|
+
|
|
96
|
+
## Rewriting
|
|
97
|
+
|
|
98
|
+
This package is the scorer. The full editorial workflow — where your own AI
|
|
99
|
+
assistant rewrites the draft across copy-desk and read-aloud passes, and a local
|
|
100
|
+
fact gate rejects any revision that adds or drops a name, number, quotation, or
|
|
101
|
+
link — ships as an Agent Skill:
|
|
102
|
+
|
|
103
|
+
```sh
|
|
104
|
+
npx skills add manavmishra/ZeroSlop --global
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
- Website: <https://zero-slop.ai>
|
|
108
|
+
- Source: <https://github.com/manavmishra/ZeroSlop>
|
|
109
|
+
- MIT licensed
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Zero Slop
|
|
2
|
+
|
|
3
|
+
**Find AI-sounding writing. Keep the source intact.**
|
|
4
|
+
|
|
5
|
+
A prose linter that scores text 0–100 for stock phrasing, mechanical rhythm,
|
|
6
|
+
vague claims, and canned formatting, then tells you which phrases produced the
|
|
7
|
+
number. It runs offline, uses only the Python standard library, and has no
|
|
8
|
+
runtime dependencies.
|
|
9
|
+
|
|
10
|
+
The score describes the writing. It does not identify who wrote it. Zero Slop is
|
|
11
|
+
not an AI detector and must not be used as one.
|
|
12
|
+
|
|
13
|
+
## Install
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
pip install zero-slop
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Use it
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
slopscore draft.md # readable report
|
|
23
|
+
slopscore --json draft.md # machine-readable
|
|
24
|
+
slopscore --explain draft.md # report, reasons, line-by-line map
|
|
25
|
+
slopscore --batch docs/ --gate 25 # exits non-zero above the threshold
|
|
26
|
+
slopscore --fidelity before.md after.md # did the rewrite keep the facts?
|
|
27
|
+
cat draft.md | slopscore # stdin
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### As a library
|
|
31
|
+
|
|
32
|
+
```python
|
|
33
|
+
from zero_slop import load_patterns, score_text
|
|
34
|
+
|
|
35
|
+
data = load_patterns()
|
|
36
|
+
score_text("We are thrilled to announce a transformative solution.", data)["ai_likelihood"]
|
|
37
|
+
# 99.3
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### In CI
|
|
41
|
+
|
|
42
|
+
```yaml
|
|
43
|
+
- uses: manavmishra/ZeroSlop@v2.11.2
|
|
44
|
+
with:
|
|
45
|
+
path: docs
|
|
46
|
+
gate: "25"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### As a pre-commit hook
|
|
50
|
+
|
|
51
|
+
```yaml
|
|
52
|
+
repos:
|
|
53
|
+
- repo: https://github.com/manavmishra/ZeroSlop
|
|
54
|
+
rev: v2.11.2
|
|
55
|
+
hooks:
|
|
56
|
+
- id: zero-slop
|
|
57
|
+
args: [--gate, "25"]
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## What the score means
|
|
61
|
+
|
|
62
|
+
Human reference samples score 9–21. Unedited model output averages 77. Those are
|
|
63
|
+
reference points, not boundaries. The scoring was run over 7,627 abstracts from
|
|
64
|
+
the MIT-licensed RAID+ dataset and all 2,187 Beemo records; the drafts, outputs,
|
|
65
|
+
and hashes are in the repository so the numbers can be reproduced.
|
|
66
|
+
|
|
67
|
+
The scorer handles about 500 documents per second on a single machine, so it is
|
|
68
|
+
usable as a batch gate rather than only an interactive tool.
|
|
69
|
+
|
|
70
|
+
## Rewriting
|
|
71
|
+
|
|
72
|
+
This package is the scorer. The full editorial workflow — where your own AI
|
|
73
|
+
assistant rewrites the draft across copy-desk and read-aloud passes, and a local
|
|
74
|
+
fact gate rejects any revision that adds or drops a name, number, quotation, or
|
|
75
|
+
link — ships as an Agent Skill:
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
npx skills add manavmishra/ZeroSlop --global
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
- Website: <https://zero-slop.ai>
|
|
82
|
+
- Source: <https://github.com/manavmishra/ZeroSlop>
|
|
83
|
+
- MIT licensed
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://zero-slop.ai">
|
|
3
|
+
<picture>
|
|
4
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/logo/zero-slop-logo-reversed.svg">
|
|
5
|
+
<img src="assets/logo/zero-slop-logo-primary.svg" width="360" alt="Zero Slop">
|
|
6
|
+
</picture>
|
|
7
|
+
</a>
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
Zero Slop is installed about 1,600 times a week on npm.
|
|
11
|
+
|
|
12
|
+
<p align="center"><strong>Find AI-sounding tells and slop in your writing.</strong></p>
|
|
13
|
+
|
|
14
|
+
<p align="center">
|
|
15
|
+
Zero Slop finds slop- stock phrasing, mechanical rhythm, vague claims, and canned formatting in writing.<br>
|
|
16
|
+
Your existing AI assistant edits the draft; local checks guard its names, numbers, links, quotations, code, tables, and paths.
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
<p align="center">
|
|
20
|
+
<a href="https://zero-slop.ai/try/"><strong>Try it in your browser</strong></a>
|
|
21
|
+
·
|
|
22
|
+
<a href="#install">Install the skill</a>
|
|
23
|
+
·
|
|
24
|
+
<a href="#evidence-and-limits">See the evidence</a>
|
|
25
|
+
·
|
|
26
|
+
<a href="https://github.com/manavmishra/ZeroSlop/releases/latest">Latest release</a>
|
|
27
|
+
·
|
|
28
|
+
<a href="https://zero-slop.ai/brand/">Brand assets</a>
|
|
29
|
+
</p>
|
|
30
|
+
|
|
31
|
+
<p align="center">
|
|
32
|
+
<a href="https://github.com/manavmishra/ZeroSlop/actions/workflows/validate.yml"><img alt="Validate" src="https://github.com/manavmishra/ZeroSlop/actions/workflows/validate.yml/badge.svg"></a>
|
|
33
|
+
<img alt="Version 2.11.2" src="https://img.shields.io/badge/version-2.11.2-72528F?color=C15732">
|
|
34
|
+
<a href="https://www.npmjs.com/package/zero-slop"><img alt="npm version" src="https://img.shields.io/npm/v/zero-slop?color=C15732"></a>
|
|
35
|
+
<a href="https://www.npmjs.com/package/zero-slop"><img alt="npm downloads" src="https://img.shields.io/npm/dm/zero-slop?color=17634F"></a>
|
|
36
|
+
<a href="https://github.com/manavmishra/ZeroSlop/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/manavmishra/ZeroSlop?style=flat&color=C15732"></a>
|
|
37
|
+
<a href="LICENSE"><img alt="MIT license" src="https://img.shields.io/badge/license-MIT-141412"></a>
|
|
38
|
+
<a href="https://hol.org/registry/plugins/manav-mishra%2Fzero-slop"><img alt="Listed in the HOL plugin registry" src="https://img.shields.io/badge/HOL%20registry-listed-2C6E8F"></a>
|
|
39
|
+
</p>
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
npx skills add manavmishra/ZeroSlop --global
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
<a href="assets/zero-slop-demo.mp4?v=dark-shell-restored-20260906">
|
|
46
|
+
<picture>
|
|
47
|
+
<source media="(prefers-reduced-motion: reduce)" srcset="assets/zero-slop-demo-poster.png?v=dark-shell-restored-20260906">
|
|
48
|
+
<source type="image/webp" srcset="assets/zero-slop-demo.webp?v=dark-shell-restored-20260906">
|
|
49
|
+
<img src="assets/zero-slop-demo.gif?v=dark-shell-restored-20260906" width="900" alt="Dark-shell demo: install Zero Slop, edit with your assistant, and check scores while preserving 40%.">
|
|
50
|
+
</picture>
|
|
51
|
+
</a>
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
## Before and after
|
|
56
|
+
|
|
57
|
+
A launch post, as AI wrote it:
|
|
58
|
+
|
|
59
|
+
> We're thrilled to announce that our team has leveraged cutting-edge machine learning to deliver a seamless onboarding experience, reducing setup time by 40%.
|
|
60
|
+
|
|
61
|
+
The scorer rates that draft 99.3/100 and flags four phrases: “We're thrilled
|
|
62
|
+
to,” “leveraged,” “cutting-edge,” and “seamless.”
|
|
63
|
+
|
|
64
|
+
The rewrite, limited to the draft's stated claims:
|
|
65
|
+
|
|
66
|
+
> We used machine learning to reduce onboarding setup time by 40%.
|
|
67
|
+
|
|
68
|
+
```text
|
|
69
|
+
Writing score: 9.5/100 [clear]
|
|
70
|
+
Flagged phrases : 0 across 10 words
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The rewrite retains the draft's stated result. See four complete, reproducible pairs in [`examples/`](examples/).
|
|
74
|
+
|
|
75
|
+
## What can I use it for?
|
|
76
|
+
|
|
77
|
+
- Tighten a launch post without losing the release details.
|
|
78
|
+
- Turn a padded product update into a useful changelog.
|
|
79
|
+
- Clean up an email while preserving names, dates, and numbers.
|
|
80
|
+
- Edit a research summary without flattening its qualifications.
|
|
81
|
+
- Gate a folder of generated copy before it ships.
|
|
82
|
+
|
|
83
|
+
The score describes writing patterns, not authorship.
|
|
84
|
+
|
|
85
|
+
## Install
|
|
86
|
+
|
|
87
|
+
[Try the free browser editor](https://zero-slop.ai/try/), or install:
|
|
88
|
+
|
|
89
|
+
| Environment | Fastest route |
|
|
90
|
+
|---|---|
|
|
91
|
+
| Claude Code, Codex, Cursor, OpenCode, Warp, Zed | `npx skills add manavmishra/ZeroSlop --global` |
|
|
92
|
+
| Gemini CLI | `gemini extensions install https://github.com/manavmishra/ZeroSlop --auto-update` |
|
|
93
|
+
| Claude Code plugin | `/plugin marketplace add manavmishra/ZeroSlop`, then `/plugin install zero-slop@zero-slop` |
|
|
94
|
+
| Any assistant with file uploads | Download the [single-file bundle](https://github.com/manavmishra/ZeroSlop/releases/latest/download/zero-slop-single-file.md) |
|
|
95
|
+
| Claude.ai | Upload the [latest skill ZIP](https://github.com/manavmishra/ZeroSlop/releases/latest/download/zero-slop.zip) |
|
|
96
|
+
| ChatGPT, Claude, Grok, Gemini, Cursor, or another MCP client | Connect the optional [hosted MCP server](mcp/README.md) |
|
|
97
|
+
|
|
98
|
+
Ask your assistant to edit:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
/zero-slop (your writing)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Inspect without editing:
|
|
105
|
+
|
|
106
|
+
```text
|
|
107
|
+
/zero-slop inspect (your writing)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Score locally:
|
|
111
|
+
|
|
112
|
+
```sh
|
|
113
|
+
npx zero-slop score draft.md
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
From a cloned checkout, gate a folder:
|
|
117
|
+
|
|
118
|
+
```sh
|
|
119
|
+
python3 scripts/slopscore.py --batch drafts/ --gate 25
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Installed checks run locally. Skill editing follows your assistant's privacy settings; [MCP editing is remote](mcp/README.md).
|
|
123
|
+
|
|
124
|
+
### Prefer one hosted connection? Use the MCP
|
|
125
|
+
|
|
126
|
+
Connect the [Zero Slop MCP](https://zero-slop.ai/#mcp) to edit drafts inside your MCP client. No account or API key required.
|
|
127
|
+
|
|
128
|
+
```text
|
|
129
|
+
https://mcp.zero-slop.ai/mcp
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
[Connection options and listing status](DISTRIBUTION.md).
|
|
133
|
+
|
|
134
|
+
## CLI
|
|
135
|
+
|
|
136
|
+
Edit a file through MCP:
|
|
137
|
+
|
|
138
|
+
```sh
|
|
139
|
+
npx --yes zero-slop@2.11.2 deslop draft.md --genre professional
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Use `-` for stdin and `--json` for structured output. `--require-approved` exits nonzero
|
|
143
|
+
when review is needed; the result is still printed. Files stay unchanged. Node.js 22+;
|
|
144
|
+
offline `score` also needs Python 3. [CLI reference and privacy](docs/cli.md).
|
|
145
|
+
|
|
146
|
+
## REST API
|
|
147
|
+
|
|
148
|
+
```sh
|
|
149
|
+
curl --fail-with-body --max-time 75 https://mcp.zero-slop.ai/v1/deslop \
|
|
150
|
+
-H 'Content-Type: application/json' \
|
|
151
|
+
--data '{"text":"Maya owns the pricing review.","genre":"professional"}'
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Same pipeline and result as MCP. Check `status` before using the edit. Free, shared
|
|
155
|
+
capacity; up to 20,000 Unicode code points per draft after trimming. Hosted CLI
|
|
156
|
+
editing and REST process drafts remotely without storing them.
|
|
157
|
+
|
|
158
|
+
[API reference](docs/rest-api.md) · [OpenAPI contract](https://mcp.zero-slop.ai/openapi.json)
|
|
159
|
+
|
|
160
|
+
## What the workflow adds
|
|
161
|
+
|
|
162
|
+
| A prompt alone | Zero Slop |
|
|
163
|
+
|---|---|
|
|
164
|
+
| “Make this sound human” leaves the target vague. | A 0–100 meter points to exact phrases and structural problems. |
|
|
165
|
+
| One rewrite can quietly alter source details. | A local fact gate checks protected strings before the edit is returned. |
|
|
166
|
+
| The model tends to overcorrect into fragments or forced casualness. | An overcorrection pass checks readability, rhythm, grammar, and voice. |
|
|
167
|
+
| Each session starts from scratch. | Optional, reason-labelled preferences can be learned privately. |
|
|
168
|
+
|
|
169
|
+
Zero Slop ships no model. Your AI assistant reads and edits the draft in context,
|
|
170
|
+
using Claude, GPT, or another compatible model. The repository supplies the
|
|
171
|
+
workflow and local tools for scoring and source checks.
|
|
172
|
+
|
|
173
|
+
## What it catches
|
|
174
|
+
|
|
175
|
+
The scorer combines 294 weighted patterns with a 96-term lexicon. Examples include:
|
|
176
|
+
|
|
177
|
+
- binary contrast formulas: “It's not X. It's Y.”
|
|
178
|
+
- canned openers: “We're thrilled to…” and “Here's the thing…”
|
|
179
|
+
- vague attribution: “experts agree” and “studies show”
|
|
180
|
+
- significance inflation: “marks a pivotal moment” and “a testament to”
|
|
181
|
+
- promotional riders: “robust,” “seamless,” and “leverage” when used as hype
|
|
182
|
+
- repeated sentence shapes, crowded statistics, and overworked formatting
|
|
183
|
+
|
|
184
|
+
Marketing terms are scored in context, so an ordinary technical use of a word need not trigger the same penalty. [`references/eval.md`](references/eval.md) documents all 80 checks.
|
|
185
|
+
|
|
186
|
+
Unedited AI drafts averaged 77 in [`bench/examples.json`](bench/examples.json).
|
|
187
|
+
Human writing scored 9 to 21 in
|
|
188
|
+
[`data/corpus/must-not-flag/`](data/corpus/must-not-flag/). These are reference
|
|
189
|
+
points for the scorer, not authorship boundaries.
|
|
190
|
+
|
|
191
|
+
## How it works
|
|
192
|
+
|
|
193
|
+

|
|
194
|
+
|
|
195
|
+
Eight responsibilities form one workflow. They are jobs, not separate models.
|
|
196
|
+
Research supports the checks, not the number eight, which is an engineering
|
|
197
|
+
choice.
|
|
198
|
+
|
|
199
|
+
| Stage | Job |
|
|
200
|
+
|---|---|
|
|
201
|
+
| 1. Scorer | Find exact phrases, pacing problems, readability issues, and overworked formatting. |
|
|
202
|
+
| 2. Interpreter | Read the claims, audience, structure, and voice before editing. |
|
|
203
|
+
| 3. Rewriter | Remove stock language without inventing detail. |
|
|
204
|
+
| 4. Fact gate | Check names, numbers, quotations, links, code, tables, paths, and structure locally. |
|
|
205
|
+
| 5. Copy desk | Fix grammar, usage, spelling, and consistency. |
|
|
206
|
+
| 6. Read-aloud editor | Catch stumbles, repetition, and awkward transitions. |
|
|
207
|
+
| 7. Verifier | Compare the edit with the source for meaning, qualifiers, voice, and format. |
|
|
208
|
+
| 8. Fresh-eyes finalizer | Apply only safe final polish, then run one last local check. |
|
|
209
|
+
|
|
210
|
+
The free web editor combines the five AI responsibilities into one response and
|
|
211
|
+
makes at most one live model call. A single response does not provide independent review.
|
|
212
|
+
Any final change receives one final local recheck.
|
|
213
|
+
|
|
214
|
+
If a repair still misses the target, Zero Slop returns the safest source-preserving edit with a plain warning. It does not enter an open-ended rewrite loop.
|
|
215
|
+
|
|
216
|
+
## Evidence and limits
|
|
217
|
+
|
|
218
|
+
### Same model, same 18 drafts
|
|
219
|
+
|
|
220
|
+
A saved replay ran Zero Slop and three comparable open-source instruction sets over the same drafts with GPT-5.4, high reasoning, and pinned instructions. The outputs are frozen and reproducible.
|
|
221
|
+
|
|
222
|
+
| Method | Mean writing score ↓ | Passed local gates | Source check passed | Mean length change |
|
|
223
|
+
|---|---:|---:|---:|---:|
|
|
224
|
+
| Original drafts | 76.3 | 0/18 | — | — |
|
|
225
|
+
| **Zero Slop** | **12.8** | **18/18** | **18/18** | -8.9% |
|
|
226
|
+
| avoid-ai-writing | 23.3 | 15/18 | 18/18 | -14.6% |
|
|
227
|
+
| no-ai-slop | 28.4 | 12/18 | 17/18 | -13.7% |
|
|
228
|
+
| humanizer | 35.4 | 9/18 | 17/18 | -7.2% |
|
|
229
|
+
|
|
230
|
+

|
|
231
|
+
|
|
232
|
+
This small LLM-reviewed regression study measures repeatable behavior; it does not establish universal writing quality. The drafts, hashes, method versions, prompts, and limitations are in [`bench/README.md`](bench/README.md).
|
|
233
|
+
|
|
234
|
+
Zero Slop's frozen outputs came from v2.5.9; newer versions only rescore those
|
|
235
|
+
saved outputs. The current scorer matched the prior 84.2% result on the fixed
|
|
236
|
+
38-item editorial panel. These fixed-sample checks are not field accuracy.
|
|
237
|
+
|
|
238
|
+
<details>
|
|
239
|
+
<summary>More validation</summary>
|
|
240
|
+
|
|
241
|
+
- A method-hidden editorial preference replay: [`bench/incumbent-blind-replay/`](bench/incumbent-blind-replay/)
|
|
242
|
+
- External-checker clean rates: [`assets/bench-external-checker.png`](assets/bench-external-checker.png)
|
|
243
|
+
- Method-hidden quality ranking: [`assets/bench-blind-quality.png`](assets/bench-blind-quality.png)
|
|
244
|
+
- Current-model corpus measurements: [`assets/bench-raid-plus.png`](assets/bench-raid-plus.png)
|
|
245
|
+
- Antithesis regression set: [`assets/bench-antithesis.png`](assets/bench-antithesis.png)
|
|
246
|
+
|
|
247
|
+
On the 75 labelled antithesis pairs, the current reading pass reached 91.2% recall across the full set, 100% recall on shapes in reach, and 100% precision. The labels are maintainer-authored and the pairs are constructed, so this is a regression floor rather than field accuracy.
|
|
248
|
+
|
|
249
|
+
Local speed measurements cover the checks, with editing time excluded. On one
|
|
250
|
+
Apple silicon Mac, the scorer processed 1,000 documents in a median of 1.9929
|
|
251
|
+
seconds (501.8 per second); the five runs ranged from 1.9614 to 2.0945 seconds.
|
|
252
|
+
It scored a 15,201-word document in a median of 0.3223 seconds. The slowest
|
|
253
|
+
stress case took 2.2932 seconds, and learning from an 8,000-word edit took
|
|
254
|
+
0.1592 seconds. The measurements and machine details are in
|
|
255
|
+
[`bench/performance-results.json`](bench/performance-results.json).
|
|
256
|
+
|
|
257
|
+
Across 12 interleaved runs against 2.7.7, we measured 0.08% lower median throughput,
|
|
258
|
+
within the 5% regression limit. The separate two-way replay used
|
|
259
|
+
Zero Slop v2.6.0.
|
|
260
|
+
|
|
261
|
+
The [RAID+ audit](bench/raid-plus-corpus/README.md) checks how the scorer responds
|
|
262
|
+
to output from different models. Its pinned sample contains 7,627 usable
|
|
263
|
+
generations:
|
|
264
|
+
|
|
265
|
+
| Model | Texts scored | Mean writing score ↓ | At or above 25 |
|
|
266
|
+
|---|---:|---:|---:|
|
|
267
|
+
| DeepSeek V3 | 1,995 | 14.5 | 10.1% |
|
|
268
|
+
| Gemini 3.1 Pro | 1,998 | 17.0 | 18.2% |
|
|
269
|
+
| Gemma 3 27B | 1,634 | 21.6 | 30.4% |
|
|
270
|
+
| Llama 3.3 70B | 2,000 | 25.5 | 41.7% |
|
|
271
|
+
|
|
272
|
+
RAID+ labels record which model produced each text; they do not grade writing
|
|
273
|
+
quality. The [Beemo paired-edit audit](bench/beemo-corpus/README.md) checks how
|
|
274
|
+
scores change after human editing: raw responses averaged 30.2, expert edits
|
|
275
|
+
25.3, and human answers 20.0. Beemo also lacks writing-quality labels.
|
|
276
|
+
|
|
277
|
+
</details>
|
|
278
|
+
|
|
279
|
+
### Documented capability audit
|
|
280
|
+
|
|
281
|
+

|
|
282
|
+
|
|
283
|
+
This chart says nothing about writing quality or which tool writes better. It
|
|
284
|
+
records documented features at pinned commits; the data and reproduction notes
|
|
285
|
+
are in [`bench/README.md`](bench/README.md).
|
|
286
|
+
|
|
287
|
+
The design follows research on [predictable wording in machine text](https://arxiv.org/abs/2301.11305) and [overused vocabulary](https://arxiv.org/abs/2406.07016). It deliberately avoids authorship claims because detectors can [misclassify non-native English](https://arxiv.org/abs/2304.02819).
|
|
288
|
+
|
|
289
|
+
## Private learning
|
|
290
|
+
|
|
291
|
+
Learning begins only when you provide an original output and your reason-labelled edit. Zero Slop does not monitor files, browsers, or publishing tools. Private data stays under `$ZERO_SLOP_HOME`; it is not committed to this repository and does not retrain the model.
|
|
292
|
+
|
|
293
|
+
A profile selected by name can exempt existing watchlist words. It does not
|
|
294
|
+
learn cadence, tone, or a complete writing style.
|
|
295
|
+
|
|
296
|
+
## Repository map
|
|
297
|
+
|
|
298
|
+
| Path | Purpose |
|
|
299
|
+
|---|---|
|
|
300
|
+
| [`SKILL.md`](SKILL.md) | The complete detect, rewrite, verify, and learn workflow |
|
|
301
|
+
| [`scripts/slopscore.py`](scripts/slopscore.py) | Offline meter and source-detail gate |
|
|
302
|
+
| [`scripts/register.py`](scripts/register.py) | Performed-register and reading pass |
|
|
303
|
+
| [`references/`](references/) | Genre guidance, tells, safeguards, and evaluation rules |
|
|
304
|
+
| [`examples/`](examples/) | Reproducible before-and-after edits |
|
|
305
|
+
| [`bench/`](bench/) | Frozen benchmarks, provenance, and limitations |
|
|
306
|
+
| [`mcp/`](mcp/) | Optional hosted MCP server documentation |
|
|
307
|
+
| [`DISTRIBUTION.md`](DISTRIBUTION.md) | Direct installs, marketplace submissions, and release synchronization |
|
|
308
|
+
|
|
309
|
+
## Contributing and support
|
|
310
|
+
|
|
311
|
+
Bug reports, false positives, examples, and carefully tested pattern improvements are welcome. Read [`CONTRIBUTING.md`](CONTRIBUTING.md) before opening a pull request, use the structured [issue forms](https://github.com/manavmishra/ZeroSlop/issues/new/choose), or start a [Discussion](https://github.com/manavmishra/ZeroSlop/discussions).
|
|
312
|
+
|
|
313
|
+
For setup help and responsible disclosure, see [`SUPPORT.md`](SUPPORT.md) and [`SECURITY.md`](SECURITY.md).
|
|
314
|
+
|
|
315
|
+
## Credits
|
|
316
|
+
|
|
317
|
+
Zero Slop builds on ideas from [no-ai-slop](https://github.com/petergyang/no-ai-slop), [humanizer](https://github.com/blader/humanizer), [de-slop](https://github.com/isatimur/de-slop), [stop-slop](https://github.com/hardikpandya/stop-slop), [unslop-text](https://github.com/JCarterJohnson/vibecoded-design-tells/tree/main/unslop-ai-text), and [avoid-ai-writing](https://github.com/conorbronsdon/avoid-ai-writing).
|
|
318
|
+
|
|
319
|
+
## License
|
|
320
|
+
|
|
321
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""Zero Slop — score AI-sounding prose and check what a rewrite changed.
|
|
2
|
+
|
|
3
|
+
The scorer runs offline and uses only the Python standard library.
|
|
4
|
+
|
|
5
|
+
from zero_slop import score_text, load_patterns
|
|
6
|
+
|
|
7
|
+
data = load_patterns()
|
|
8
|
+
score_text("We are thrilled to announce...", data)["ai_likelihood"]
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from zero_slop.scripts.slopscore import load_patterns, score_text
|
|
12
|
+
|
|
13
|
+
__all__ = ["load_patterns", "score_text", "__version__"]
|
|
14
|
+
__version__ = "2.11.2"
|