Skip to main content

Strip AI slop from prose. CLI + Claude Code skill for hard-locking em dashes, banned phrases, and structural cliches in markdown.

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

unsloppify-0.1.1.tar.gz (49.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

unsloppify-0.1.1-py3-none-any.whl (19.9 kB view details)

Uploaded Python 3

File details

Details for the file unsloppify-0.1.1.tar.gz.

File metadata

  • Download URL: unsloppify-0.1.1.tar.gz
  • Upload date:
  • Size: 49.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for unsloppify-0.1.1.tar.gz
Algorithm Hash digest
SHA256 ae72a97c3581bb24c2090ace073a712b4cb3055a8dce70475682a7154c682e09
MD5 ff60e1a59edadc5c8bc663e2c290b329
BLAKE2b-256 053740a33a8034ed73eb98a0cc0cbe6f10c888cecf52f82af8b6c57287f515ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for unsloppify-0.1.1.tar.gz:

Publisher: publish.yml on petems/unsloppify

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file unsloppify-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: unsloppify-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 19.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for unsloppify-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5f1874dd7306492dc4f0af3af7ff246b79ecf3080cdd9720d633ba772c589c26
MD5 91dd8edc90398fce26ad73822c21fded
BLAKE2b-256 f405c52dba2ab5fca182fba1c76b1f7336a9b115057a2fd62644a328adb60a63

See more details on using hashes here.

Provenance

The following attestation bundles were made for unsloppify-0.1.1-py3-none-any.whl:

Publisher: publish.yml on petems/unsloppify

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page