install-anti-slop

Installs and configures anti-slop Oxlint plugins in TypeScript or JavaScript repositories.

Updated Jun 28, 2026
One-click install
npx skills add https://github.com/AO-HyS/aohys.com --skill install-anti-slop-ao-hys
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: install-anti-slop
Source: https://github.com/AO-HyS/aohys.com/tree/main/.agents/skills/install-anti-slop
Command: npx skills add https://github.com/AO-HyS/aohys.com --skill install-anti-slop-ao-hys

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires oxlint, @oxlint/plugins, and includes scripts (resource) and assets (resource) components.

What problem does it solve? Setting up opinionated Oxlint rules that reject low-evidence TypeScript patterns (chained assertions, unknown parameters, module mocking, unsafe dictionaries) requires copying a plugin, pinning matching dependency versions, and merging configuration without clobbering existing lint setup. This Skill automates that installation safely. ## Core Features & Use Cases - Contained plugin installation: Copies the vendored anti-slop Oxlint plugin into the repository through a hardened installer that refuses absolute paths, symlink traversal, and unverified file trees. - Configuration merging: Registers the plugin in oxlint.config.ts, .oxlintrc.json, or Vite+ configs, merging ignore patterns and enabling all generic rules at error severity without replacing existing settings. - Optional Effect rules: Registers the anti-slop-effect plugin with the no-service-constructor-imports rule when the repository directly depends on Effect. - Use Case: A team wants to enforce stricter TypeScript hygiene in an existing repo. The Skill inspects the package manager and lockfile, installs oxlint and @oxlint/plugins at matching pinned versions, copies the plugin to tools/oxlint/anti-slop, merges the config, and runs lint and typecheck to report findings. ## Quick Start Ask the assistant to install and configure the anti-slop Oxlint plugin in this repository, then run the lint command to review any findings.

Frequently Asked Questions about install-anti-slop

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I add anti-slop Oxlint rules to my TypeScript project?▼

Run the skill's installer with node scripts/install.mjs from the repository root, which copies the plugin to tools/oxlint/anti-slop. Then merge the jsPlugins entry and enable the anti-slop rules at error severity in your oxlint.config.ts or .oxlintrc.json.

What rules does the anti-slop Oxlint plugin enforce?▼

It bans chained type assertions, conditional empty-object spreads, known-value widening, module mocking, object and unknown parameters, Reflect.apply and Reflect.get, runtime typeof checks, unsafe dictionary types, and the substring "shape" in symbol names. It also requires safety comments for type assertions.

Does the anti-slop plugin work with Vite+ projects?▼

Yes. For Vite+, add the ignore patterns and jsPlugins entries to the lint config, and merge the same patterns into fmt.ignorePatterns so vp check does not reformat the vendored plugin or installed agent assets.

When should I enable the anti-slop-effect plugin?▼

Enable it only when the repository declares effect as a direct dependency in a package manifest or when explicitly requested. It adds the no-service-constructor-imports rule for Effect service and Layer architecture; transitive lockfile appearances do not qualify.

Why does the installer refuse to copy the plugin to my destination?▼

The installer refuses absolute paths, backslash or dot/parent segments, symlink ancestors or destinations, and working directories reached through symlinks. It also refuses to overwrite an existing destination unless you pass --force after reviewing the files.

What are the limitations of the Effect service import rule?▼

The no-service-constructor-imports rule covers relative project imports only. Package-alias imports are not enforced and should be reported as a known limitation rather than assumed to be covered.