no-slop-pr
Scores GitHub pull requests for AI slop and blocks the ones an agent wrote, in the spirit of No Sloptober. Use when the user runs /no-slop-pr, or asks to check, gate, block, flag or reject AI generated, LLM written, agent authored or sloppy pull requests.
- License 许可
- Unlicense
- 最近更新
- 2026-11-07
- Stars
- ★ 21
- Forks
- 9
01 前言 Front Matter
- name
- no-slop-pr
- description
- Scores GitHub pull requests for AI slop and blocks the ones an agent wrote, in the spirit of No Sloptober. Use when the user runs /no-slop-pr, or asks to check, gate, block, flag or reject AI generated, LLM written, agent authored or sloppy pull requests.
- allowed-tools
- [ "Bash", "Read", "AskUserQuestion" ]
02 资源文件 15
- 参考文档references/commands-(you-run-these).md1.3 KB
- 参考文档references/creative-freedom.md1.7 KB
- 参考文档references/errors.md984 B
- 参考文档references/examples.md3.9 KB
- 参考文档references/first-contact.md1.6 KB
- 参考文档references/interaction-style.md1.9 KB
- 参考文档references/system-readiness-checklist.md2.3 KB
- 参考文档rules.json1.4 KB
- 脚本slop_check.py3.3 KB
- 其他tests/fixtures/human.diff225 B
- 参考文档tests/fixtures/human.txt184 B
- 其他tests/fixtures/slop.diff294 B
- 参考文档tests/fixtures/slop.txt570 B
- 参考文档tests/fixtures/suspect.txt179 B
- 脚本tests/test_slop_check.py2.2 KB
03 SKILL.md 正文
No Slop PR
No Sloptober asks for one month without LLM tools. This skill guards the other side of the door: pull requests written by an agent do not get merged.
Inputs
- A PR number or URL:
python3 .claude/skills/no-slop-pr/slop_check.py 42 - A PR from another repo:
python3 .claude/skills/no-slop-pr/slop_check.py 42 --repo owner/name - All open PRs: loop over
gh pr list --state open --json number --jq '.[].number' - Local files, no GitHub:
python3 .claude/skills/no-slop-pr/slop_check.py --text body.txt --diff change.diff
Add --json for machine output. The script exits 1 on BLOCK and 0 otherwise, so it can gate CI.
Signals
Every signal, weight and threshold lives in rules.json. Read it, never guess.
| Signal | Why it matters |
|---|---|
| AI co-author trailer | The commit itself admits an agent wrote it |
| Generated-with footer | Same admission, in the PR body |
| LLM tell phrases | delve, robust, seamless, comprehensive, this PR introduces |
| Emoji bullets and headings | Checkmark and rocket bullet lists are an agent template |
| Em dash storm | Humans rarely type the long dash, models love it |
| Boilerplate section headings | Summary, Key Changes, Test Plan scaffolding |
| Comment cruft in added code | Onarheim: agents add comments that explain nothing |
Score is capped at 100. BLOCK at block_at, SUSPECT at suspect_at, PASS below.
Steps
- Run the script for every PR the user named.
- Print one line per PR: number, verdict, score, the top reasons.
- For
SUSPECT, quote the lines that matched so a human decides. Never block onSUSPECTalone. - For
BLOCK, ask the user before touching GitHub. Only after a yes rungh pr review <n> --request-changes --body "<reasons>". Never close, merge or push. - The review body lists the reasons from the script and one line:
No Sloptober: please rewrite this PR yourself.
Rules
- The script is a filter, not a judge. Say so when reporting.
- Never write the review body with emojis, em dashes or any phrase from
rules.json. - Run the tests after changing
rules.json:python3 -m unittest discover -s .claude/skills/no-slop-pr/tests.
04 同仓库更多 Skills
word-count
Counts the words, lines and characters of a text or a file.
slugify
Turns a title or a sentence into a URL slug, lowercase words joined by hyphens with accents removed.
json-format
Validates a JSON file and pretty prints it with two space indentation, or reports where the JSON is invalid.
commit-message
Writes a conventional commit message for the staged git changes.
skills-gateway
Gateway and router to a catalog of skills that are not registered directly. Use it before any task a specialized skill could handle, such as text, JSON or git chores. It finds the right skill and loads its instructions.
decision-log
Record, list, show and supersede architecture decisions that persist across sessions in the shared agent infra state store. Use when the user says "record this decision", "log an ADR", "what did we decide about", "list decisions", or "supersede decision".