Skip to main content

slopstopper-cli

The SlopStopper quality suite, packaged as a Python CLI on PyPI.

Status: Beta. Every check in the public catalogue runs through this package. The CI workflows under .github/workflows/ss-*.yml install the pinned slopstopper-cli via jdx/mise-action and call slopstopper run <category>:<check> — same code path you use locally.

Install

Quick standalone try (unpinned):

pipx install slopstopper-cli
slopstopper --version
slopstopper checks list
slopstopper doctor

Published to PyPI on every release tag. pipx upgrade slopstopper-cli pulls the latest. Each release is also attached to the latest GitHub Release with a Sigstore build-provenance attestation — verify with gh attestation verify <wheel> --owner hungovercoders.

Pinned suite (a repo you'll keep — local and CI run the same version):

curl -fsSL https://raw.githubusercontent.com/hungovercoders/slopstopper/main/install.sh | bash

Requires mise. install.sh pins slopstopper-cli + task in mise.toml (the single source of truth both local runs and CI read) and seeds the ss-*.yml workflows. Move the pin with install.sh --upgrade-cli / --cli-version.

Development (editable, from a clone of this repo):

pip install -e ./cli
slopstopper run hygiene:docs-size

CLI surface

slopstopper run <category>:<check>             # run a check, write reports under .ss/reports/
slopstopper emit <c>:<n> --target {pr-comment,issue}
slopstopper discover <check> --event <e>       # resolve pages.<check> from sitemap / changed / list
slopstopper config get <key> [<default>]       # read .slopstopper.yml
slopstopper templates {list, path <n>, eject <n>}   # inspect / customise bundled templates
slopstopper serve                              # bundled static server (auto-detects worker/headers.json)
slopstopper checks list [--category <c>] [--json]
slopstopper doctor                             # verify external tools are installed
slopstopper profile {list, show, expand <n>, detect}   # project-shape profile (ui / api / library)
slopstopper --quiet …                          # suppress decorative output (CI logs)

slopstopper with no args prints a banner of the commands above plus a quick-start block.

Run the tests

# From the repo root:
task -t cli/Taskfile.yml test

# Or from cli/:
task test

# Filter to a single test:
task -t cli/Taskfile.yml test -- -k docs_size

From the repo root task contributing:test is an alias for the same target. It is also what CI runs (see ci-cli.yml), so local and CI invocations stay in sync. The Taskfile creates and reuses a project-local venv at cli/.venv/ (gitignored) so it doesn't conflict with system Python under PEP 668.

This workflow is slopstopper-internal — it is not part of the distributed ss-*-check.yml suite and is never seeded into adopter repos.

Layout

  • slopstopper/cli.py — argparse dispatcher + bare-invocation banner
  • slopstopper/output.py — shared formatters (running / success / warn / error / footer / --quiet)
  • slopstopper/config.py — .slopstopper.yml reader (stdlib-only YAML subset)
  • slopstopper/templates.py — bundled-template resolver + templates {list, path, eject} API
  • slopstopper/emit.py — gh CLI wrapper for PR comment + main-branch issue emission
  • slopstopper/discovery.py — pages-to-audit resolver for reliability checks
  • slopstopper/profiles.py — project-shape profiles: resolves which workflows a repo carries with (profile.disables − workflows.enabled) ∪ workflows.disabled (explicit workflows.disabled wins if the same workflow is listed in both), plus the check → workflow map. install.sh imports this module directly, so it is the only implementation
  • slopstopper/checks/ — one module per check; registry in __init__.py
  • slopstopper/data/ — bundled Playwright specs, lighthouserc dev/prod, server.js, profiles.json

Adding a check

A check is more than a module: it needs a workflow, a Task target, profile classification, a badge label, docs, site copy and a skills entry. The single checklist lives in the "New quality check" row of AGENTS.md — follow that, not a summary here. Inside this package the conventions are: slopstopper/checks/<name>.py exposes run(args) -> int (0 pass, 1 findings, 2 could-not-run), its docstring's first line is what slopstopper checks list prints, it registers in checks/__init__.py's REGISTRY, prints through from slopstopper import output so --quiet works, and declares a META dict if emit.py should post it.

Skills for agents

The duo under .claude/skills/slopstopper-{install,triage}/ is the long-form playbook for Claude Code agents working with this CLI. Update them when you add or rename a check, env var, task ss:* target, or profile.

Acknowledgements

slopstopper-cli has one third-party Python dependency, lizard — the complexity engine behind hygiene:complexity, which must live in the same interpreter the CLI runs from. Every other tool (Playwright, axe-core, Lighthouse, Semgrep, Gitleaks, Trivy, ZAP) is invoked via subprocess only. Full credit, licences and upstream links for every tool we drive live in ATTRIBUTIONS.md.

License

MIT — see LICENSE.

Metadata

Release files for slopstopper-cli 0.15.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for slopstopper-cli 0.15.0
File Size Uploaded
slopstopper_cli-0.15.0.tar.gz 250.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for slopstopper-cli 0.15.0
File Interpreter ABI Platform
slopstopper_cli-0.15.0-py3-none-any.whl Python 3 none any Details

Total release size: 437.6 kB

Release files / slopstopper_cli-0.15.0.tar.gz

Download URL slopstopper_cli-0.15.0.tar.gz
Size 250.9 kB
Tags Source
SHA-256 checksum
How to use checksums
9fbbd82d9d95fbeb075bf4afa59cfec7f0ba8d997f4391b5e8e4c8a59d099aef
BLAKE2b-256 checksum
How to use checksums
0c63e39de7a8fc4f2abe1502e65a10098b8a9eb8f3842f4c25e3e660ba66c077
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 3, 2026.

Transparency log

Release files / slopstopper_cli-0.15.0-py3-none-any.whl

Download URL slopstopper_cli-0.15.0-py3-none-any.whl
Size 186.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4f8e7158aa3f9f899a78e3ffdb03320bd68b1e301893e0e07749e30f0f104c03
BLAKE2b-256 checksum
How to use checksums
24f936bcc231cf9f0a2dc6747aa1a9bac6ad32e1f8b6c61de20b76bbf993a082
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 3, 2026.

Transparency log

Release history Release notifications | RSS feed

0.22.0

2 release files

0.21.0

2 release files

0.20.5

2 release files

0.20.4

2 release files

0.20.3

2 release files

0.20.2

2 release files

0.20.1

2 release files

0.20.0

2 release files

0.19.0

2 release files

0.18.0

2 release files

0.17.0

2 release files

This release

0.15.0 This release

2 release files

0.14.0

2 release files

0.13.0

2 release files

0.11.0

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page