sloplint
Theme preset

Linter · design systems · agent briefs

Find the tells of generated code before your users do.

sloplint is a zero-dependency linter for the patterns AI assistants leave behind: purple gradients, swallowed errors, fallback secrets, mock data, invented proof and tests that assert nothing. It also gives each project its own design system, so agents stop converging on one look.

npx @sloplint/cli check .
sloplint check src/server/api.ts
Loading real output…

Live grader

Paste a component, route handler, stylesheet, test or README. It runs in your browser on the same engine as the CLI, so nothing leaves this page.

Load a sample

A design system for every project

sloplint init writes a DESIGN.md generated from a seed and a one-line brief: a typeface trio, a palette solved for contrast, shape, motion and a layout to follow. The same input always gives the same system, and two rules keep the code on it.

npx @sloplint/cli init

Rule catalog

Each rule names a pattern, explains why it hurts, and shows the slop and the fix side by side. Select one to see its example rendered.

    Four curated presets

    Prefer a hand-tuned system? sloplint init --preset writes one of these to DESIGN.md instead. Each card below renders in its own preset; the switcher in the header restyles this whole page.

    Command line

    Node 20 or newer, no install step, no dependencies. Exit codes are designed for CI.

    sloplint check [paths…]
    Lints JS, TS, JSX, HTML, Vue, Svelte, CSS, Python and Markdown. Prints compiler-style frames with a fix for each finding and a weighted Slop Score, or one line per finding when piped. --fix applies safe autofixes, --changed checks only what changed since the last commit, --format json feeds other tools, --max-score 0 fails the build on any slop.
    sloplint init [--brief text] [--hooks]
    Generates DESIGN.md for the project and syncs the rules it needs into CLAUDE.md, GEMINI.md, AGENTS.md and .cursor/rules/sloplint.mdc. --hooks makes Claude Code lint every file it writes. Your own content in those files is left alone.
    sloplint style [--seed text]
    Previews the system init would generate, as text, JSON or a specimen page, without writing anything else.
    sloplint explain [RULE]
    Prints the rationale and a side-by-side slop and craft diff in the terminal. Without an argument it lists every rule.
    Suppressing a finding
    Add sloplint-disable-next-line UI-007 in a comment, or list paths in .sloplintignore. Suppressions only count inside comments.
    .github/workflows/sloplint.yml
    name: sloplint
    on: [push, pull_request]
    jobs:
      slop:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
          - uses: actions/setup-node@v4
            with:
              node-version: 22
          - run: npx @sloplint/cli check . --max-score 0

    Brief pack for agents

    Token-dense briefs you can drop into a system prompt, one per specialist. They cite the same rule IDs the linter enforces, so the reviewer and the author agree on what done means.

    1. rules/ui.mdVisual design, motion and UX writing for frontend agents.UI · COPY
    2. rules/backend.mdErrors, data access, network calls and API design.BE
    3. rules/security.mdSecrets, CORS, injection, server-side auth and webhooks.SEC
    4. rules/testing.mdAssertions, waits, focused tests and READMEs.TEST
    5. rules/motion.mdMotion, pacing and sound for videos written as code.MOTION
    6. scripts/verify-dom.spec.tsPlaywright checks against the rendered page: computed transitions, gradients, radii, layout shift and visible copy.DOM