peakoss/anti-slop
A GitHub action that detects and automatically closes low-quality and AI slop PRs.
View on GitHubTrust Signals
- Scorecard Score
- not yet scored
- Maintenance Recency
- Activelast commit Apr 15, 2026
- License
- AGPL 3.0
Pinned Snippet
uses: peakoss/anti-slop@57858eead489d08b255fab2af45a506c2ca6eab2 # v0.3.0tags can be moved; commit SHAs can't. why a SHA?
Inputs
| name | description | required | default |
|---|---|---|---|
| github-token | GitHub token used to authenticate API requests. | yes | ${{ github.token }} |
| max-failures | Number of check failures needed before failure actions are triggered. | no | 4 |
| allowed-target-branches | Newline-separated target branch patterns to allow. Empty allows all branches. | no | "" |
| blocked-target-branches | Newline-separated target branch patterns to block. | no | "" |
| allowed-source-branches | Newline-separated source branch patterns to allow. Empty allows all branches. | no | "" |
| blocked-source-branches | Newline-separated source branch patterns to block. | no | main master |
| max-changed-files | Maximum number of changed files allowed in the PR. 0 disables this check. | no | 50 |
| max-changed-lines | Maximum number of changed lines (additions + deletions) allowed in the PR. 0 disables this check. | no | 10000 |
| max-negative-reactions | Maximum number of negative reactions (thumbs down + confused) allowed on the PR. 0 disables this check. | no | 0 |
| require-maintainer-can-modify | Require the PR to allow maintainers to push to the source branch. | no | true |
| require-conventional-title | Require PR titles to follow Conventional Commits format (e.g. 'feat:', 'fix:', 'feat(scope):'). | no | false |
| require-description | Require a non-empty PR description. | no | true |
| max-description-length | Maximum character length for the PR description. 0 disables this check. | no | 2500 |
| max-emoji-count | Maximum number of emojis allowed in the PR title and description. 0 disables this check. | no | 2 |
| max-code-references | Maximum number of code references (file paths, function/method calls) allowed in the PR description. 0 disables this check. | no | 5 |
| require-linked-issue | Require the PR to reference at least one issue in the PR description. | no | false |
| blocked-terms | Newline-separated list of terms blocked from appearing in the PR description. | no | "" |
| blocked-issue-numbers | Comma-separated list of issue numbers blocked from being referenced in the PR description. | no | "" |
| require-pr-template | Require the PR description to follow the repository PR template structure. | no | false |
| strict-pr-template-sections | Comma-separated PR template section headings (without '#') classified as strict. All checkboxes must be present and checked. Only applies when require-pr-template is enabled. | no | "" |
| optional-pr-template-sections | Comma-separated PR template section headings (without '#') classified as optional. Can be removed from the description without failing the check. Only applies when require-pr-template is enabled. | no | "" |
| max-additional-pr-template-sections | Maximum number of additional sections not in the template that are allowed in the PR description. 0 disables this check. | no | 0 |
| max-commit-message-length | Maximum character length for individual commit messages. 0 disables this check. | no | 500 |
| require-conventional-commits | Require all commit messages to follow Conventional Commits format (e.g. 'feat:', 'fix:', 'feat(scope):'). | no | false |
| require-commit-author-match | Require every commit in the PR to be authored by the same GitHub user who opened the PR. | no | true |
| blocked-commit-authors | Comma-separated list of blocked commit author usernames. | no | "" |
| allowed-file-extensions | Comma-separated list of allowed file extensions (e.g. '.ts,.js') for changed files. Empty allows all. | no | "" |
| allowed-paths | Newline-separated file or folder paths to allow for changed files. Entries ending with '/' match folders. Empty allows all. | no | "" |
| blocked-paths | Newline-separated file or folder paths to block for changed files. Entries ending with '/' match folders. | no | README.md SECURITY.md LICENSE CODE_OF_CONDUCT.md |
| require-final-newline | Require all changed files to end with a newline character. | no | true |
| max-added-comments | Maximum number of added comments in all changed files. 0 disables this check. | no | 10 |
| detect-spam-usernames | Detect usernames that match common spam patterns. | no | true |
| min-account-age | Minimum GitHub account age in days. 0 disables this check. | no | 30 |
| max-daily-forks | Maximum number of repositories forked by the user in any 24-hour window. 0 disables this check. | no | 6 |
| require-public-profile | Require the PR author to have a public GitHub profile. | no | true |
| min-profile-completeness | Minimum number of profile signals (name, email, bio, etc.) the user must have to pass. 0 disables this check. | no | 4 |
| min-repo-merged-prs | Minimum number of merged PRs in this repository from the author. 0 disables this check. | no | 0 |
| min-repo-merge-ratio | Minimum merge/close PR ratio percentage in this repository. 0 disables this check. | no | 0 |
| min-global-merge-ratio | Minimum merge/close PR ratio percentage across all repositories. 0 disables this check. | no | 30 |
| global-merge-ratio-exclude-own | Exclude PRs to the author's own repositories from the global merge ratio calculation. | no | false |
| exempt-draft-prs | Exempt draft PRs from all checks. | no | false |
| exempt-bots | Newline-separated list of bot usernames exempt from all checks. | no | actions-user autofix-ci[bot] dependabot[bot] renovate[bot] github-actions[bot] |
| exempt-users | Comma-separated list of GitHub usernames exempt from all checks. | no | "" |
| exempt-author-association | Comma-separated list of GitHub author associations exempt from all checks. | no | OWNER,MEMBER,COLLABORATOR |
| exempt-label | Label name that exempts PRs and Issues from all checks when it is present. | no | exempt |
| exempt-pr-label | Label name that exempts PRs from all checks when it is present. | no | "" |
| exempt-all-milestones | Exempt all PRs and Issues that are assigned to any milestone. | no | false |
| exempt-all-pr-milestones | Exempt all PRs that are assigned to any milestone. | no | false |
| exempt-milestones | Comma-separated list of milestone titles. PRs and Issues assigned to any listed milestone are exempt. | no | "" |
| exempt-pr-milestones | Comma-separated list of milestone titles. PRs assigned to any listed milestone are exempt. | no | "" |
| success-add-pr-labels | Comma-separated list of labels to add to the PR on success. | no | "" |
| failure-remove-pr-labels | Comma-separated list of labels to remove from the PR on failure. | no | "" |
| failure-remove-all-pr-labels | Remove all labels from the PR on failure. | no | false |
| failure-add-pr-labels | Comma-separated list of labels to add to the PR on failure. | no | "" |
| failure-pr-message | Comment posted on the PR when the maximum number of failures is reached. Empty posts no comment. | no | "" |
| close-pr | Close the PR when the maximum number of failures is reached. | no | true |
| lock-pr | Lock the PR conversation after closing. | no | false |
Outputs
| name | description |
|---|---|
| total-checks | Total number of checks that were run. |
| failed-checks | Number of checks that failed. |
| passed-checks | Number of checks that passed. |
| result | Overall result: 'passed', 'failed', or 'skipped'. |