hunter-party-py/slop-hunter-py/SKILL.md
Audit Python code for AI-generated noise — redundant comments, verbose documentation, style drift from project conventions, and trivially dead code. Surface-level hygiene pass; defaults to branch diff but supports any scope. Use when: reviewing AI-assisted Python code before merge, cleaning up generated code, enforcing project style on new contributions, or reducing review noise.
npx skillsauth add skyosev/agent-skills slop-hunter-pyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Audit code for AI-generated noise — comments that narrate the obvious, documentation that restates code, style choices that break project conventions, and dead code that slipped in. The goal: the code reads like a human wrote it, following existing project idioms.
Default to the diff. When scoped to a branch diff, only flag patterns introduced in this branch — pre-existing issues are out of scope. When scoped to a path or codebase, flag all matching patterns in the resolved surface.
Comments explain why, not what. A comment that restates the code ("increment counter") is noise. A comment that explains intent, constraints, or non-obvious decisions ("rate limit: 3rd-party API allows 100 req/min") is valuable.
Style is not cosmetic. Drift from project conventions increases cognitive load for every future reader. New code must conform to existing patterns, not introduce alternatives.
Less is more. AI tends to over-document, over-explain, and over-hedge. Strip to the minimum that preserves clarity.
Comments that narrate obvious behavior, restate function/variable names, or explain standard language constructs.
Signals:
# Initialize the list above items = []# Return the result above return result# ---- Helper Functions ----) in small files# Loop through items above for item in items:Action: Delete. If the code needs explanation, it should be rewritten for clarity first.
Over-documentation that adds noise without insight — typically AI-generated docstrings on every function including trivial private helpers.
Signals:
:param name: descriptions that repeat the parameter name ("name: the name"):returns: that restates the return type annotation__init__ that just list the parameters being assigned to selfAction: Keep docstrings only on public API. Strip params/returns that add nothing beyond the type annotation.
Patterns that diverge from the project's established conventions in naming, formatting, structure, or idioms.
Signals:
.format() (or vice versa)pathlib vs os.path inconsistency with project conventionAction: Conform to existing project conventions. Cite the existing pattern as evidence.
Unused imports, unused variables, commented-out code blocks, and placeholder TODOs.
Signals:
import X where X is never used in the filex = ... where x is never referenced# old_result = ...)# TODO: implement or # FIXME without actionable contextpass in non-empty functions/methods (leftover placeholder)Action: Delete unused imports/variables. Delete commented-out code. Convert vague TODOs to actionable tickets or delete.
Hedging language, apologetic comments, and over-explanation typical of AI-generated code.
Signals:
# This is a workaround for... without specifying the issue# Note: this might need to be updated if... (speculative)# For safety, we also check... (unnecessary hedging)# New, improved version.. (references old code)logger.debug('entering function X'))# Handle the case where... before a trivial None checkAction: Delete hedging and narration. Keep only comments that document concrete constraints or known issues with references.
main/master)BASE=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@' || echo main)
SCOPE=$(git diff --name-only $(git merge-base HEAD $BASE)...HEAD)
Constrain all subsequent scans to the resolved surface.In diff mode, focus on added lines to isolate new noise from pre-existing patterns:
# Added comments
git diff $(git merge-base HEAD $BASE)...HEAD | rg '^\+.*#'
# Added docstrings
git diff $(git merge-base HEAD $BASE)...HEAD | rg '^\+.*("""|:param|:returns|Args:|Returns:)'
In path/codebase mode, scan the resolved surface directly:
EXCLUDE='--glob !**/venv/** --glob !**/.venv/** --glob !**/dist/**'
# Comments (then classify manually)
rg '^\s*#' --type py $EXCLUDE -- $SCOPE
# Docstring blocks
rg '"""' --type py $EXCLUDE -- $SCOPE
In all modes:
# TODO/FIXME markers
rg 'TODO|FIXME|HACK|XXX' -- $SCOPE
# Print/logging statements that narrate flow
rg 'print\(|logger\.(debug|info)' -- $SCOPE
For each finding, determine:
Save as YYYY-MM-DD-slop-hunter-audit-{$LLM-name}.md in the project's docs folder (or project root if no docs folder
exists).
# Slop Hunter Audit — {date}
## Scope
- Surface: {diff / path / codebase}
- Files: {count or list}
- Exclusions: {list}
## Findings
### Redundant Comments
| # | Location | Comment | Action |
| - | -------- | ------- | ------ |
| 1 | file:line | `# Initialize the list` | Delete |
### Verbose Documentation
| # | Location | Pattern | Action |
| - | -------- | ------- | ------ |
| 1 | file:line | Docstring on private helper with obvious behavior | Strip |
### Style Drift
| # | Location | Pattern | Project Convention | Action |
| - | -------- | ------- | ------------------ | ------ |
| 1 | file:line | `camelCase` variable | Project uses `snake_case` | Rename |
### Dead Code
| # | Location | Code | Action |
| - | -------- | ---- | ------ |
| 1 | file:line | Unused import `X` | Delete |
### AI Verbal Patterns
| # | Location | Pattern | Action |
| - | -------- | ------- | ------ |
| 1 | file:line | `# This is a workaround for...` | Delete or add specific issue reference |
## Recommendations (Priority Order)
1. **Must-fix**: {style drift that breaks project conventions}
2. **Should-fix**: {redundant comments, dead code}
3. **Consider**: {verbose docs, AI verbal patterns}
file/path.py:line with the exact code.development
Transforms vague feature ideas into precise, codebase-grounded technical requirements. Use when requirements are ambiguous/incomplete, the user struggles to describe behavior, terminology is unclear, or multiple concepts are mixed. Output is a requirements spec—NOT an implementation plan.
tools
Audit TypeScript type definitions for design debt — duplicated shapes, missing derivations, over-engineered generics, under-constrained type parameters, reinvented utility types, and disorganized type architecture. Type structure and maintainability, not type enforcement. Use when: reviewing type definitions for maintainability, reducing type duplication, simplifying over-engineered type-level logic, or reorganizing type architecture after growth.
development
Audit TypeScript test code for quality gaps — missing coverage on critical paths, brittle tests coupled to implementation, over-mocking, assertion-free tests, missing edge cases, and duplicated test setup. Focuses on test effectiveness, not production code structure. Use when: reviewing TypeScript test suites for reliability, reducing false-positive test failures, improving coverage of critical business logic, or cleaning up test debt.
tools
Audit TypeScript class and interface design for SOLID violations — god classes, rigid extension points, broken substitutability, fat interfaces, and concrete dependency chains. Focuses on responsibility assignment and abstraction fitness. Use when: reviewing class hierarchies, preparing for extension with new variants, reducing coupling between services, or improving testability of class-heavy code.