Humanize markdown and text files — strip AI-isms while preserving code, URLs, headings, and technical content.
Project description
unslop CLI
Humanize Markdown and text files from the command line. unslop removes common AI tells, varies rhythm, and preserves code, URLs, headings, tables, blockquotes, and YAML frontmatter.
Use it for docs, memory files, posts, bios, cover letters, and other prose where voice matters. Do not use it for secrets, legal text, medical advice, runbooks, or anything where exact wording matters more than readability.
Install
pipx install unslop
# or
uv tool install unslop
For a one-off local checkout:
cd unslop
python3 -m scripts.cli --deterministic README.md
Quick Start
unslop --deterministic doc.md
Deterministic mode is local-only. No API key, no subprocess, no network call.
unslop doc.md
LLM mode uses ANTHROPIC_API_KEY when set, otherwise falls back to claude --print if the Claude CLI is installed. Before any LLM call, the CLI refuses secret-like content such as private keys and common API token shapes. Use --deterministic for sensitive local files.
Common Commands
unslop --deterministic --diff doc.md # preview changes
unslop --deterministic --dry-run --json doc.md
unslop --deterministic --report audit.json doc.md
unslop --mode full doc.md
unslop --no-structural --no-soul doc.md # extra conservative
cat draft.md | unslop --stdin --deterministic
What Files Work
| Type | Action |
|---|---|
.md, .markdown, .txt, .rst |
Humanize prose |
.py, .js, .ts, .json, .yaml, etc. |
Skip as code/config |
*.original.md, *.original.txt |
Skip as backups |
| Mixed prose + code | Humanize prose; preserve protected regions |
Sensitive paths (.env, *.pem, ~/.ssh/) |
Refuse |
What Stays Exact
- Fenced code blocks
- Indented code blocks
- Inline backticks
- URLs and markdown links
- Headings
- Markdown tables
- Blockquotes
- YAML frontmatter
Deterministic mode validates these after rewriting. If preservation fails, the command exits non-zero and does not overwrite the file.
Backups And Sidecars
In file mode, unslop writes FILE.original.md before overwriting the target. If --strip-reasoning removes hidden reasoning traces, the stripped content is written to FILE.reasoning.md; those sidecars are gitignored by the repo template because they can contain process notes you did not mean to publish.
Why This Exists
Project memory files, READMEs, resumes, and draft posts often get polished by assistants until they all sound the same. unslop is a cleanup pass: remove the stock phrases, keep the facts, keep the code, and make the text readable again.
Part Of The Unslop Plugin
| Skill | What it does |
|---|---|
unslop |
Live assistant-output humanization |
unslop-file |
File rewrite command |
unslop-commit |
Commit messages without AI tone |
unslop-review |
Direct PR review comments |
unslop-help |
Quick reference |
License
MIT.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file unslop-0.6.0.tar.gz.
File metadata
- Download URL: unslop-0.6.0.tar.gz
- Upload date:
- Size: 73.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e21d54c0e44c7184193343821ef0523c4189987803338d327113324edca40cbe
|
|
| MD5 |
80f104ed9464a28552b9b37e8cf0614d
|
|
| BLAKE2b-256 |
784498e56fc1a857fac8bf5e4c176bae04c6dee8e4c66615bacc7cde883707ac
|
Provenance
The following attestation bundles were made for unslop-0.6.0.tar.gz:
Publisher:
publish.yml on MohamedAbdallah-14/unslop
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
unslop-0.6.0.tar.gz -
Subject digest:
e21d54c0e44c7184193343821ef0523c4189987803338d327113324edca40cbe - Sigstore transparency entry: 1397667982
- Sigstore integration time:
-
Permalink:
MohamedAbdallah-14/unslop@a9a13685c9ec35cc37ef1145e04014b065b9a30c -
Branch / Tag:
refs/tags/unslop-v0.6.0 - Owner: https://github.com/MohamedAbdallah-14
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a9a13685c9ec35cc37ef1145e04014b065b9a30c -
Trigger Event:
push
-
Statement type:
File details
Details for the file unslop-0.6.0-py3-none-any.whl.
File metadata
- Download URL: unslop-0.6.0-py3-none-any.whl
- Upload date:
- Size: 80.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ac46946f8fa6786e8e72c42fc2715f677bb0193610a4ff9bdb9c2734731a737
|
|
| MD5 |
8904780e08e35b30519edba000764a15
|
|
| BLAKE2b-256 |
d29612a7bf26d8952d94a3d9b13268b5cb8763eaac916f70cb9a80746ab84955
|
Provenance
The following attestation bundles were made for unslop-0.6.0-py3-none-any.whl:
Publisher:
publish.yml on MohamedAbdallah-14/unslop
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
unslop-0.6.0-py3-none-any.whl -
Subject digest:
7ac46946f8fa6786e8e72c42fc2715f677bb0193610a4ff9bdb9c2734731a737 - Sigstore transparency entry: 1397667990
- Sigstore integration time:
-
Permalink:
MohamedAbdallah-14/unslop@a9a13685c9ec35cc37ef1145e04014b065b9a30c -
Branch / Tag:
refs/tags/unslop-v0.6.0 - Owner: https://github.com/MohamedAbdallah-14
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a9a13685c9ec35cc37ef1145e04014b065b9a30c -
Trigger Event:
push
-
Statement type: