unsloppify
Strip AI slop from your prose. A fast CLI prose linter for markdown, plus a Claude Code skill and output-style for the judgment calls a regex can't make.
uvx unsloppify draft.md # report findings, exit 1 if any
uvx unsloppify draft.md --fix # rewrite safe deterministic fixes in place
uvx unsloppify docs/ --format json # recursive scan, JSON output
Why this exists
Existing Claude skills like stop-slop and anti-ai-slop-writing ask Claude to scan your prose for tells. That works, but it costs tokens and Claude can miss obvious cases.
unsloppify splits the work:
| Tier | Examples | Handled by |
|---|---|---|
| 1. Punctuation | em dashes, smart quotes, ellipsis chars | CLI, auto-fixed |
| 2. Banned phrases | delve into, tapestry, In today's fast-paced world |
CLI, flagged or auto-fixed |
| 3. Structures | binary contrasts, false agency, parataxis | Skill (LLM judgment) |
Run the CLI first to nuke the obvious stuff. Let the skill handle the rest.
Install
uvx unsloppify --help # one-shot, no install
pipx install unsloppify # persistent CLI
uv add --dev unsloppify # as a dev dep in a uv project
Usage
CLI
unsloppify FILE [FILE...] # lint one or more files / directories
--fix # apply safe fixes in place
--format {text,json,github} # output format (default: text)
--severity {error,warning,info} # minimum severity to report
--rules PATH # add custom rules YAML
--list-rules # print bundled rule catalogue
Exit codes: 0 clean, 1 findings present, 2 invocation error.
Pre-commit
Works with pre-commit and prek:
repos:
- repo: https://github.com/petems/unsloppify
rev: v0.1.1
hooks:
- id: unsloppify
With prek:
prek install
prek run --all-files
The hook creates a Python 3.11 environment. If your Git config uses a global
core.hooksPath, make sure that global hook runner chains into
.git/hooks/pre-commit, or Git will not invoke the generated hook.
GitHub Actions
- run: uvx unsloppify docs/ --format github
Claude Code skill
Two ways to install:
Plugin marketplace (recommended for Claude Code):
/plugin marketplace add petems/unsloppify
/plugin install unsloppify@unsloppify
Skills CLI (works with Claude Code, Codex, Cursor, and other agents):
npx skills add petems/unsloppify
Then ask the agent to "unsloppify this draft" and it will invoke the CLI first for the deterministic catches, then do a judgment pass on structures.
Claude Code output style
cp output-styles/unsloppified.md ~/.claude/output-styles/ then /output-style unsloppified. Claude's own responses will avoid em dashes, banned phrases, and structural cliches.
Rule catalogue
unsloppify --list-rules
Or browse src/unsloppify/rules/*.yaml directly. Rules are versioned with the package.
Credit
The vocabulary lists and structural patterns are adapted from MIT-licensed upstream skills. See THIRD_PARTY_NOTICES.md.
License
MIT
Metadata
Release files for unsloppify 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| unsloppify-0.1.1.tar.gz | 49.3 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| unsloppify-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 69.2 kB
Release files / unsloppify-0.1.1.tar.gz
| Download URL | unsloppify-0.1.1.tar.gz |
|---|---|
| Size | 49.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ae72a97c3581bb24c2090ace073a712b4cb3055a8dce70475682a7154c682e09
|
|
BLAKE2b-256 checksum How to use checksums |
053740a33a8034ed73eb98a0cc0cbe6f10c888cecf52f82af8b6c57287f515ea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 16, 2026.
Transparency logRelease files / unsloppify-0.1.1-py3-none-any.whl
| Download URL | unsloppify-0.1.1-py3-none-any.whl |
|---|---|
| Size | 19.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5f1874dd7306492dc4f0af3af7ff246b79ecf3080cdd9720d633ba772c589c26
|
|
BLAKE2b-256 checksum How to use checksums |
f405c52dba2ab5fca182fba1c76b1f7336a9b115057a2fd62644a328adb60a63
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 16, 2026.
Transparency logSecurity for unsloppify 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for unsloppify-0.1.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 16, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.