anti-slop: Opinionated Oxlint rules Developer Dillon Mulroy released anti-slop, an open-source (MIT) plugin of opinionated Oxlint rules that reject low-evidence and low-signal TypeScript and JavaScript patterns, distributed via source and an npx skill installer. The plugin ships 10 rules including no-chained-type-assertions, no-conditional-empty-object-spread, and no-unknown-parameters, and is configured through oxlint.config.ts with jsPlugins. An npm release is planned, and the skill copies the plugin, installs current Oxlint dependencies, merges the plugin into existing lint configuration, enables every rule, and validates the result. 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