Skip to main content

Unified code quality for every language

Stop shipping code
that just compiles.

One CLI to scan, score, and fix code quality across your entire stack. Catches the patterns linters miss and AI generators leave behind.

$ npx aislop scan scan
$ npx aislop fix auto-fix
$ npx aislop ci --fail-below 70 ci gate

Click any command to copy

~/my-project
$ npx aislop scan
+ src/api/auth.ts
! src/utils/helpers.ts:14 trivial-comment
x src/services/data.py:28 swallowed-exception
! src/handlers/process.go:45 unused-import
+ src/lib/transform.rs
! src/models/user.ts:7 as-any-assertion
Files 23 Errors 1 Warnings 3 87/100 Healthy

One tool, not five

Replace the patchwork of linters, formatters, and scanners with a single CLI.

ESLint Prettier Ruff Biome aislop
JS/TS Linting
Formatting
Python
Go
Rust
Ruby / PHP
Pattern Detection
Unified Score
Auto-fix
One Command

See the full picture

Verbose mode breaks down findings by language, with file paths, line numbers, and rule names.

npx aislop scan --verbose
$ npx aislop scan --verbose
aislop v1.x -- Scanning 47 files across 4 languages
TypeScript (18 files)
x src/api/handler.ts:23 error Swallowed exception in catch block
! src/api/handler.ts:45 warn Trivial comment restates code
! src/utils/convert.ts:12 warn Type assertion with `as any`
! src/index.ts:3 warn Unused import: lodash
Python (14 files)
x app/services/data.py:67 error Bare except clause
! app/models/user.py:15 warn Generic variable name: data2
Go (10 files)
! pkg/handler/router.go:34 warn Unused import: fmt
Rust (5 files)
All checks passed
Files 47 Languages 4 Errors 2 Warnings 5 Score: 87/100 Healthy
Run aislop fix to auto-resolve 4 issues

Catches what linters miss

AI generators write code that compiles but ships with patterns no engineer would write.

Trivial Comments

Comments that restate code

// Set the name to value
user.name = value;
// Normalize for i18n
user.name = normalizeForLocale(value);

Swallowed Exceptions

Empty catch blocks

try 
  await fetchData();
 catch (e) 
  // TODO: handle
try 
  await fetchData();
 catch (e) 
  logger.error('Fetch failed');

Generic Naming

Meaningless variable names

const data2 = getData();
const helper_1 = process(data2);
const metrics = getData();
const report = format(metrics);

Unsafe Assertions

as any type bypasses

const r = res as any;
const el = n as unknown as El;
const r = parse(res);
const el = isEl(n) ? n : null;

Also catches: unused imports, console.log leftovers, dead code, and 20+ more patterns.

Every language, one config

First-class support for the languages your team actually uses. Consistent rules everywhere.

TypeScript

45+ rules

JavaScript

45+ rules

Python

30+ rules

Go

20+ rules

Rust

15+ rules

Ruby

20+ rules

PHP

15+ rules

Expo / React Native

10+ rules

Built for teams that ship

Everything you need to maintain code quality at scale, without the tool sprawl.

Unified Scanning

One command scans TypeScript, Python, Go, Rust, Ruby, PHP, and more. No separate configs.

Quality Score

A single 0-100 score you can track over time, gate in CI, and compare across teams.

Pattern Detection

Finds what linters miss: trivial comments, swallowed exceptions, generic naming, type abuse.

Auto-fix

One command to format, lint-fix, remove dead imports, and clean up generated code.

CI/CD Integration

Add to any pipeline. Set a threshold, fail the build. Works with GitHub Actions, GitLab, and more.

Zero Config

Useful output from the first run. Customize with .aisloprc when you need to.

Open source, MIT licensed

Free to use, modify, and distribute. Built in the open.