The six engines
Each engine targets a distinct category of problem. They all run concurrently, which is how aislop completes a full scan in sub-second time.Formatting
Enforces consistent code style using the canonical formatter for each language, including Biome, ruff, gofmt, cargo fmt, rubocop, php-cs-fixer, dotnet format, and clang-format.
Linting
Catches language-specific bugs and bad practices via oxlint, ruff, golangci-lint, clippy, rubocop, expo-doctor, Roslynator, InspectCode, cppcheck, and clang-tidy.
Code Quality
Measures structural complexity and finds dead code: oversized functions and files, deep nesting, too many parameters, duplicate blocks, unused declarations, and unused dependencies via knip (JS/TS).
AI Slop
The engine unique to aislop. Catches the patterns AI coding agents leave behind: narrative and trivial comments, swallowed exceptions,
as any casts, TODO stubs, hallucinated imports, unreachable code, and more.Security
Finds hardcoded secrets, unsafe constructs (
eval, innerHTML, SQL/shell injection), and vulnerable dependencies via npm, pip, cargo, and govulncheck audits.Architecture
Opt-in structural rules you define in
.aislop/rules.yml: ban specific imports project-wide, enforce layer boundaries, or require certain patterns in specific file paths.Parallel execution and sub-second results
All six engines start at the same time. aislop does not wait for one engine to finish before launching the next. On most projects you get a complete scan (formatting, linting, complexity, AI slop, security, and architecture) in well under a second.Supported languages
aislop supports 10 language targets. The table below shows which engines apply to each one.If your repository is primarily written in an unsupported language such as Swift or Kotlin, aislop withholds the score rather than printing a number based on a handful of incidental files. The CLI explains why and
--json output returns "score": null along with "scoreable": false and a coverage breakdown.