Install Anti-Slop Oxlint Rules
dmmulroy/anti-slop
Installs, updates or migrates the vendored anti-slop Oxlint plugin in a repository, keeping local rule changes and the plugin's license and provenance files.
Write-time code quality enforcement using Plankton — auto-formatting, linting, and Claude-powered fixes on every file edit via hooks.
$ npx skills add affaan-m/ECC --skill plankton-code-quality -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install affaan-m/ECC plankton-code-quality --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/plankton-code-quality .claude/skills/plankton-code-quality && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "plankton-code-quality" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/plankton-code-quality into .claude/skills/plankton-code-quality/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plankton-code-quality", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/affaan-m/ECC/tree/main/skills/plankton-code-qualityType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add affaan-m/ECC --skill plankton-code-quality -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install affaan-m/ECC plankton-code-quality --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/plankton-code-quality .agents/skills/plankton-code-quality && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "plankton-code-quality" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/plankton-code-quality into .agents/skills/plankton-code-quality/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plankton-code-quality", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add affaan-m/ECC --skill plankton-code-quality -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install affaan-m/ECC plankton-code-quality --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/plankton-code-quality .cursor/skills/plankton-code-quality && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "plankton-code-quality" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/plankton-code-quality into .cursor/skills/plankton-code-quality/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plankton-code-quality", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/affaan-m/ECC.git --path skills/plankton-code-quality--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add affaan-m/ECC --skill plankton-code-quality -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install affaan-m/ECC plankton-code-quality --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/plankton-code-quality .gemini/skills/plankton-code-quality && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "plankton-code-quality" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/plankton-code-quality into .gemini/skills/plankton-code-quality/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plankton-code-quality", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install affaan-m/ECC plankton-code-qualityInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add affaan-m/ECC --skill plankton-code-quality -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/plankton-code-quality .github/skills/plankton-code-quality && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "plankton-code-quality" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/plankton-code-quality into .github/skills/plankton-code-quality/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plankton-code-quality", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add affaan-m/ECC --skill plankton-code-quality -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install affaan-m/ECC plankton-code-quality --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/plankton-code-quality .opencode/skills/plankton-code-quality && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "plankton-code-quality" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/plankton-code-quality into .opencode/skills/plankton-code-quality/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plankton-code-quality", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
plankton-code-qualityWrite-time code quality enforcement using Plankton — auto-formatting, linting, and Claude-powered fixes on every file edit via hooks.
Plankton Code Quality is an agent skill from affaan-m/ECC. Write-time code quality enforcement using Plankton — auto-formatting, linting, and Claude-powered fixes on every file edit via hooks. Use when setting up write-time formatting, linting, or auto-fix hooks on file edits.
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Code quality and Linting and formatting. It works with npm. The repository describes itself as: The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit ef648e0. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmbrewuvclaudegitFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
oxc.rsgithub.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Plankton Code Quality loads about 3.2k tokens when it runs. Until then it costs about 60 tokens; SKILL.md has 1,424 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from affaan-m/ECC at commit ef648e0, republished under its MIT licence (© affaan-m). 1,424 words, ~3,197 tokens.
.claude/skills/plankton-code-quality/SKILL.md (or your agent's skills folder).Integration reference for Plankton (credit: @alxfazio), a write-time code quality enforcement system for Claude Code. Plankton runs formatters and linters on every file edit via PostToolUse hooks, then spawns Claude subprocesses to fix violations the agent didn't catch.
Every time Claude Code edits or writes a file, Plankton's multi_linter.sh PostToolUse hook runs:
Phase 1: Auto-Format (Silent)
├─ Runs formatters (ruff format, biome, shfmt, taplo, markdownlint)
├─ Fixes 40-50% of issues silently
└─ No output to main agent
Phase 2: Collect Violations (JSON)
├─ Runs linters and collects unfixable violations
├─ Returns structured JSON: {line, column, code, message, linter}
└─ Still no output to main agent
Phase 3: Delegate + Verify
├─ Spawns claude -p subprocess with violations JSON
├─ Routes to model tier based on violation complexity:
│ ├─ Haiku: formatting, imports, style (E/W/F codes) — 120s timeout
│ ├─ Sonnet: complexity, refactoring (C901, PLR codes, oxlint complexity) — 300s timeout
│ └─ Opus: type system, deep reasoning (unresolved-attribute) — 600s timeout
├─ Re-runs Phase 1+2 to verify fixes
└─ Exit 0 if clean, Exit 2 if violations remain (reported to main agent)| Scenario | Agent sees | Hook exit |
|---|---|---|
| No violations | Nothing | 0 |
| All fixed by subprocess | Nothing | 0 |
| Violations remain after subprocess | [hook] N violation(s) remain | 2 |
| Advisory (duplicates, old tooling) | [hook:advisory] ... | 0 |
The main agent only sees issues the subprocess couldn't fix. Most quality problems are resolved transparently.
LLMs will modify .ruff.toml or biome.json to disable rules rather than fix code. Plankton blocks this with three layers:
protect_linter_configs.sh blocks edits to all linter configs before they happenstop_config_guardian.sh detects config changes via git diff at session end.ruff.toml, biome.json, .shellcheckrc, .yamllint, .hadolint.yaml, and moreA PreToolUse hook on Bash blocks legacy package managers:
pip, pip3, poetry, pipenv → Blocked (use uv)npm, yarn, pnpm → Blocked (use bun)npm audit, npm view, npm publishNote: Plankton requires manual installation from its repository. Review the code before installing.
# Install core dependencies
brew install jaq ruff uv
# Install Python linters
uv sync --all-extras
# Start Claude Code — hooks activate automatically
claudeNo install command, no plugin config. The hooks in .claude/settings.json are picked up automatically when you run Claude Code in the Plankton directory.
To use Plankton hooks in your own project:
.claude/hooks/ directory to your project.claude/settings.json hook configuration.ruff.toml, biome.json, etc.)| Language | Required | Optional |
|---|---|---|
| Python | ruff, uv | ty (types), vulture (dead code), bandit (security) |
| TypeScript/JS | biome; oxlint (>= 1.37.0) when using complexity | semgrep, knip (dead exports) |
| Shell | shellcheck, shfmt | — |
| YAML | yamllint | — |
| Markdown | markdownlint-cli2 | — |
| Dockerfile | hadolint (>= 2.12.0) | — |
| TOML | taplo | — |
| JSON | jaq | — |
| Concern | ECC | Plankton |
|---|---|---|
| Code quality enforcement | PostToolUse hooks (Prettier, tsc) | PostToolUse hooks (20+ linters + subprocess fixes) |
| Security scanning | AgentShield, security-reviewer agent | Bandit (Python), Semgrep (TypeScript) |
| Config protection | — | PreToolUse blocks + Stop hook detection |
| Package manager | Detection + setup | Enforcement (blocks legacy PMs) |
| CI integration | — | Pre-commit hooks for git |
| Model routing | Manual (/model opus) | Automatic (violation complexity → tier) |
If running both ECC and Plankton hooks:
Plankton's .claude/hooks/config.json controls all behavior:
{
"languages": {
"python": true,
"shell": true,
"yaml": true,
"json": true,
"toml": true,
"dockerfile": true,
"markdown": true,
"typescript": {
"enabled": true,
"js_runtime": "auto",
"biome_nursery": "warn",
"semgrep": true
}
},
"phases": {
"auto_format": true,
"subprocess_delegation": true
},
"subprocess": {
"tiers": {
"haiku": { "timeout": 120, "max_turns": 10 },
"sonnet": { "timeout": 300, "max_turns": 10 },
"opus": { "timeout": 600, "max_turns": 15 }
},
"volume_threshold": 5
}
}Key settings:
volume_threshold — violations > this count auto-escalate to a higher model tiersubprocess_delegation: false — skip Phase 3 entirely (just report violations)| Variable | Purpose |
|---|---|
HOOK_SKIP_SUBPROCESS=1 | Skip Phase 3, report violations directly |
HOOK_SUBPROCESS_TIMEOUT=N | Override tier timeout |
HOOK_DEBUG_MODEL=1 | Log model selection decisions |
HOOK_SKIP_PM=1 | Bypass package manager enforcement |
Set strict quality behavior:
export ECC_HOOK_PROFILE=strict
export ECC_QUALITY_GATE_FIX=true
export ECC_QUALITY_GATE_STRICT=trueDuring quality enforcement, flag changes to config files in same iteration:
biome.json, .eslintrc*, prettier.config*, tsconfig.json, pyproject.tomlIf config is changed to suppress violations, require explicit review before merge.
Use the same commands in CI as local hooks:
Track:
Closes the JS/TS gap in the model-routing table above. Python complexity (ruff C901, PLR) already routes to Sonnet. JS/TS had no equivalent rule turned on by default.
complexity rule when using itoxlint's complexity rule (source: eslint's complexity rule, ported) lives in the
"restriction" category, which oxlint does not enable by default. It must be turned on
by hand. Verified against Oxlint's complexity rule
(2026-08-27): default option is max: 20. The rule is available in oxlint >= 1.37.0.
The skill's Language-Specific Dependencies table keeps oxlint optional for TypeScript/JS
generally. When adopting the complexity rule, use oxlint >= 1.37.0 and treat it as a
required dependency. Add the rule to the supported oxlint configuration the project already
uses (.oxlintrc.json, .oxlintrc.jsonc, oxlint.config.ts, or oxlint.config.mts). If
none exists, create one; do not create a second configuration file in the same directory.
Measure the codebase's current worst complexity score before choosing the initial enforced
ceiling. The template below is intentionally incomplete: replace <MEASURED_CEILING> with
that score, optionally plus a small amount of headroom, before committing the "error" gate.
Oxlint's default of 20 is a long-term target, not a safe universal starting ceiling.
{
"rules": {
"complexity": ["error", { "max": "<MEASURED_CEILING>" }]
}
}Replace the placeholder before running oxlint; it is not a valid numeric threshold until the repository has been measured. See the ratchet section below for how the ceiling gets set on a real codebase.
Add oxlint complexity violations to the same row as the existing Python entry in the
Phase 3 subprocess table:
├─ Sonnet: complexity, refactoring (C901, PLR codes, oxlint complexity), 300s timeoutSame tier as Python's C901/PLR. A complexity violation is a refactoring job either way, language does not change the model tier.
Source: Hunk PR #861 (merged 2026-08-26, verified against
the PR's own diff and description via the GitHub API, not paraphrased from memory). Hunk
turned on oxlint's complexity rule with "error", { "max": 80 } in .oxlintrc.json.
Their own worst score at the time was 78 (App), next was 76
(validateFileViewLayout). From the PR body: "This is intentionally an initial
regression ceiling rather than the long-term target... so 80 adds enforcement without
grandfathering or suppressions. The ceiling can be ratcheted downward as existing
hotspots are simplified." And: "A global ceiling does not prevent a function below 80
from growing toward it."
The technique, as actually run in that PR:
"error", wired into the existing lint CI step. This is a real gate
from the first commit, not a suggestion.One caveat, stated plainly: the PR itself went straight from "rule off" to "error"
enforcement in one commit. It did not stage through a report-only or warn-only phase
first. Starting with the rule set to "warn" for one CI run before flipping it to
"error" is a reasonable staging step if a team has never measured its own worst score
and does not want a surprise CI failure, but that staging step is Gabe's own prudent
practice, not something verified in hunk's PR. Say so if you use it, do not attribute it
to the source.
© affaan-m, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/plankton-code-quality of affaan-m/ECC.
Open the folder on GitHubat commit ef648e0
We found 10 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 5 other GitHub owners. This page covers the copy in affaan-m/ECC, which our catalogue first saw on October 7, 2026.
Plankton Code Quality next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Plankton Code Quality this skillaffaan-m/ECC | 274k | 5 repos | ~3.2k | Automated safety check: Pass | MIT | |
| Install Anti-Slop Oxlint Rulesdmmulroy/anti-slop | 5.2k | — | ~2.2k | Automated safety check: Pass | MIT | |
| DevAutomattic/wordpress-activitypub | 582 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Plankton Code Qualityxu-xiang/everything-claude-code-zh | 2k | — | ~1.2k | Automated safety check: Pass | MIT | |
| Add Opik Code Quality Hookcomet-ml/opik | 22k | — | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| LobeHub Alint Rule Set Maintenancelobehub/lobehub | 83k | — | ~1.9k | Automated safety check: Pass | Custom licence |
dmmulroy/anti-slop
Installs, updates or migrates the vendored anti-slop Oxlint plugin in a repository, keeping local rule changes and the plugin's license and provenance files.
Automattic/wordpress-activitypub
Development workflows for WordPress ActivityPub plugin including wp-env setup, testing commands, linting, and build processes.
xu-xiang/everything-claude-code-zh
使用 Plankton 实现编写时代码质量强制执行 —— 通过钩子在每次文件编辑时进行自动格式化、代码检查,并由 Claude 驱动自动修复。
comet-ml/opik
Checklist for wiring a new linter into Opik's Code Quality pipeline: the four files to edit, the silent-failure gotchas and the pass/fail verification loop.
lobehub/lobehub
Maintains LobeHub's model-backed alint rule set: writing rules, removing false positives against real code, deciding warn versus error and tracking token cost.
fengshao1227/ccg-workflow
Scans code for complexity, long functions, duplicated blocks, naming problems and code smells with a Node script, then reports and suggests refactors.
affaan-m/ECC
Audits your installed Claude skills and commands for quality, with a quick mode for recently changed skills and a full mode that evaluates all of them through subagents.
affaan-m/ECC
Ingest, index, search, edit, and monitor video and audio with the VideoDB Python SDK — upload from files, URLs, or RTSP feeds, build spoken and scene indexes with timestamped search and playable…
affaan-m/ECC
Scans installed skills for principles that recur across them and proposes rule-file changes: append, revise, add a section, create a file or leave as covered.
affaan-m/ECC
Builds DRAFT counterparty agreements from one markdown template and a small JSON spec per party, with clauses picked by the party's role.
affaan-m/ECC
Measures whether agents actually follow a skill, rule or agent definition by generating scenarios at three strictness levels and scoring tool-call traces.
affaan-m/ECC
Instinct-based learning system that observes sessions via hooks, creates atomic instincts with confidence scoring, and evolves them into skills/commands/agents.
Works with
Categories
Write-time code quality enforcement using Plankton — auto-formatting, linting, and Claude-powered fixes on every file edit via hooks. Plankton Code Quality is an agent skill from affaan-m/ECC. Write-time code quality enforcement using Plankton — auto-formatting, linting, and Claude-powered fixes on every file edit via hooks.
Plankton Code Quality fits situations like: setting up write-time formatting; auto-fix hooks on file edits.
Run `npx skills add affaan-m/ECC --skill plankton-code-quality -a claude-code`. Or copy the skill folder (skills/plankton-code-quality in affaan-m/ECC) into .claude/skills/plankton-code-quality in your project. Claude Code loads it when a task matches its description.
Run `npx skills add affaan-m/ECC --skill plankton-code-quality -a codex`. Or copy the skill folder (skills/plankton-code-quality in affaan-m/ECC) into .agents/skills/plankton-code-quality in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add affaan-m/ECC --skill plankton-code-quality -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/plankton-code-quality, .gemini/skills/plankton-code-quality, .github/skills/plankton-code-quality and .opencode/skills/plankton-code-quality in your project.
Going by SKILL.md and its folder, Plankton Code Quality needs the command-line tools its instructions call (npm, brew, uv, claude and git). Our summary lists: Python 3.
SKILL.md names 2 domains. As links in the text: oxc.rs and github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Plankton Code Quality is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Plankton Code Quality: Install Anti-Slop Oxlint Rules (dmmulroy/anti-slop, 5.2k stars), Dev (Automattic/wordpress-activitypub, 582 stars), Plankton Code Quality (xu-xiang/everything-claude-code-zh, 2k stars) and Add Opik Code Quality Hook (comet-ml/opik, 22k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
affaan-m (a GitHub user) maintains it in affaan-m/ECC, which has 274,360 GitHub stars. The repository holds 657 skills in this directory. The repository was last updated on October 5, 2026.
Source: affaan-m/ECC on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.