Skip to main content

slopstopper-cli

A Python CLI plus GitHub Actions workflows that run security, hygiene and reliability checks on every PR. One command to install into any repo. This package is the CLI.

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>, which is the 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 it with gh attestation verify <wheel> --owner hungovercoders.

For a repo you'll keep, install the pinned suite so 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>, disabled, detect}   # project-shape profile (ui / api / library)
slopstopper cloudflare preview-url <sha>       # a commit's Workers Builds preview URL, from Cloudflare's PR comment on stdin
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 is the argparse dispatcher and prints the bare-invocation banner
  • slopstopper/output.py holds the shared formatters (running / success / warn / error / footer / --quiet)
  • slopstopper/config.py reads .slopstopper.yml (stdlib-only YAML subset)
  • slopstopper/templates.py resolves bundled templates and backs the templates {list, path, eject} API
  • slopstopper/emit.py wraps the gh CLI to post PR comments and main-branch issues
  • slopstopper/discovery.py resolves the pages to audit for reliability checks
  • slopstopper/profiles.py holds the project-shape profiles. It 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/ holds one module per check; the registry is in __init__.py
  • slopstopper/data/ holds the bundled Playwright specs, lighthouserc dev/prod, server.js and 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. Follow the single checklist in the "New quality check" row of docs/contributing/CHANGE_MAP.md rather than a summary here. Inside this package, slopstopper/checks/<name>.py exposes run(args) -> int (0 pass, 1 findings, 2 could-not-run) and registers in checks/__init__.py's REGISTRY. Its docstring's first line is what slopstopper checks list prints. It 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

The only third-party Python dependency of slopstopper-cli is 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; the full text is in LICENSE.

Metadata

Release files for slopstopper-cli 0.20.2

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.20.2
File Size Uploaded
slopstopper_cli-0.20.2.tar.gz 288.7 kB Details

Built distribution (wheel)

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

Total release size: 494.9 kB

Release files / slopstopper_cli-0.20.2.tar.gz

Download URL slopstopper_cli-0.20.2.tar.gz
Size 288.7 kB
Tags Source
SHA-256 checksum
How to use checksums
f22bc0633f586d95ca10e6438a9992c03dce4f0638eab5c953557e34eaee13dc
BLAKE2b-256 checksum
How to use checksums
b3d720c78383c4b4eea352bc4122b53c4002626c48188ba800e30b05d27e12b5
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 11, 2026.

Transparency log

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

Download URL slopstopper_cli-0.20.2-py3-none-any.whl
Size 206.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
eb6efef5ba95dd231820227a17be7c815c01553f662de2e0da7c0d93bd42f182
BLAKE2b-256 checksum
How to use checksums
0991b68e5a3a8c907e3249b5a2d00d290c428d57a6551e952a836a5117e8383a
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 11, 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

This release

0.20.2 This release

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

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