# anti-slop: Opinionated Oxlint rules

> Source: <https://github.com/dmmulroy/anti-slop>
> Published: 2026-08-12 14:07:47+00:00

Opinionated Oxlint rules that reject low-evidence and low-signal TypeScript and JavaScript patterns.

The plugin is source-distributed for now. An npm release is planned; until then, use the bundled agent skill to copy and configure it in another repository.

```
npx skills add dmmulroy/anti-slop --skill install-anti-slop
```

Then ask your coding agent to install or configure anti-slop in the current repository. The skill copies the plugin, installs current Oxlint dependencies, merges the plugin into the existing lint configuration, enables every rule, and validates the result.

To inspect available skills first:

```
npx skills add dmmulroy/anti-slop --list
```

Copy `src/`

into the target repository, for example at `tools/oxlint/anti-slop/`

, and install matching current versions of `oxlint`

and `@oxlint/plugins`

.

Register the copied entry point in `oxlint.config.ts`

:

``` js
import { defineConfig } from "oxlint";

export default defineConfig({
  jsPlugins: [
    { name: "anti-slop", specifier: "./tools/oxlint/anti-slop/index.ts" },
  ],
  rules: {
    "anti-slop/no-chained-type-assertions": "error",
    "anti-slop/no-conditional-empty-object-spread": "error",
    "anti-slop/no-known-value-widening": "error",
    "anti-slop/no-object-parameters": "error",
    "anti-slop/no-runtime-typeof": "error",
    "anti-slop/no-shape-in-symbol-names": "error",
    "anti-slop/no-unknown-parameters": "error",
    "anti-slop/no-unknown-type-aliases": "error",
    "anti-slop/no-unsafe-dictionary-type": "error",
    "anti-slop/no-widen-then-assert": "error"
  }
});
```

The same `jsPlugins`

entry and rules work under `lint`

in a Vite+ config.

`no-chained-type-assertions`

— rejects nested type assertions that fabricate evidence.`no-conditional-empty-object-spread`

— rejects conditional spreads that use`{}`

to omit fields.`no-known-value-widening`

— rejects explicit broad target types that discard known value evidence.`no-object-parameters`

— rejects the broad`object`

type on function inputs.`no-runtime-typeof`

— requires boundary parsing instead of ad hoc`typeof`

narrowing.`no-shape-in-symbol-names`

— rejects`shape`

in symbol names.`no-unknown-parameters`

— rejects`unknown`

inputs except the explicit`cause`

convention.`no-unknown-type-aliases`

— rejects aliases that merely conceal`unknown`

.`no-unsafe-dictionary-type`

— rejects dictionary value contracts based on`unknown`

,`any`

,`object`

,`{}`

, and semantic equivalents.`no-widen-then-assert`

— rejects local flows that widen known values and later assert them back.

```
pnpm install
pnpm check
```

`src/`

is canonical. After changing production source, run `pnpm sync:skill-assets`

; CI checks that the skill's bundled copy remains identical.

MIT
