plankton-code-quality
Helps your agent keep code organized and error-free. It automatically formats and fixes code as you type.
What it does
Plankton is a system that automatically checks and fixes your code quality as you type. It formats code, finds errors, and uses AI to fix them, ensuring your code is always clean and working well.
When to use it
- ✓When setting up automatic code formatting.
- ✓When you want code errors to be fixed on the spot.
- ✓To ensure AI doesn't disable quality rules to 'fix' code.
Example of what to ask your AI
“Set up Plankton to automatically format and fix my Python and TypeScript code.”
Want more? Open the sections below.
How to use
The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.
Skill link
Ready-to-paste message
How it works
When you edit a file, Plankton first tries to format the code itself. If there are still issues, it identifies the errors and asks the AI (Claude) to fix them, then checks if the fix worked.
Installation
Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.
In the terminal (Claude Code, Codex, Cursor), in your project folder:
npx skills add affaan-m/ECC --skill plankton-code-qualityOr download just the file:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/skills/plankton-code-quality/SKILL.md -o SKILL.mdTechnical content (original SKILL.md)
Original text by the author, straight from GitHub.
Plankton Code Quality Skill
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.
When to Use
- You want automatic formatting and linting on every file edit (not just at commit time)
- You need defense against agents modifying linter configs to pass instead of fixing code
- You want tiered model routing for fixes (Haiku for simple style, Sonnet for logic, Opus for types)
- You work with multiple languages (Python, TypeScript, Shell, YAML, JSON, TOML, Markdown, Dockerfile)
How It Works
Three-Phase Architecture
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)
What the Main Agent Sees
| 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.
Config Protection (Defense Against Rule-Gaming)
LLMs will modify .ruff.toml or biome.json to disable rules rather than fix code. Plankton blocks this with three layers:
- PreToolUse hook —
protect_linter_configs.shblocks edits to all linter configs before they happen - Stop hook —
stop_config_guardian.shdetects config changes viagit diffat session end - Protected files list —
.ruff.toml,biome.json,.shellcheckrc,.yamllint,.hadolint.yaml, and more
Package Manager Enforcement
A PreToolUse hook on Bash blocks legacy package managers:
pip,pip3,poetry,pipenv→ Blocked (useuv)npm,yarn,pnpm→ Blocked (usebun)- Allowed exceptions:
npm audit,npm view,npm publish
Setup
Quick Start
Note: 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
claude
No install command, no plugin config. The hooks in .claude/settings.json are picked up automatically when you run Claude Code in the Plankton directory.
Per-Project Integration
To use Plankton hooks in your own project:
- Copy
.claude/hooks/directory to your project - Copy
.claude/settings.jsonhook configuration - Copy linter config files (
.ruff.toml,biome.json, etc.) - Install the linters for your languages
Language-Specific Dependencies
| 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 |
— |
Pairing with ECC
Complementary, Not Overlapping
| 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) |
…
FAQ
What are 'hooks'?
They are connection points that allow a program (like Plankton) to automatically run tasks at specific times, such as when a file is saved.
How does Plankton prevent AI from 'cheating' on quality rules?
It has mechanisms that block the AI from changing code-checking rules so that the code appears correct without actually being fixed.
Do I need to install anything to use Plankton?
Yes, Plankton needs to be installed manually on your computer. After that, it works automatically with Claude Code.
Details
Original description by the author
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.
repo: affaan-m/ECC
Popularity
- GitHub stars
- 280k
- Ranking position
- #256
- License
- MIT
- Updated
- 10/15/2026
Comments
- …
More skills from this repository
accessibility
Helps your agent create interfaces that everyone can use. Ensures websites and apps work well for people with disabilities, like those who are blind or have reduced mobility.
affaan-m/ECC
agent-architecture-audit
Makes your agent check if everything is working correctly. It finds and fixes problems in AI systems, ensuring they perform as expected.
affaan-m/ECC
agent-eval
Helps your agent compare different AI coding tools. It measures which one is faster, cheaper, and more reliable for specific tasks.
affaan-m/ECC
agent-harness-construction
Makes your agent better understand how to perform tasks. It optimizes the tools and instructions the agent uses to increase its chances of success.
affaan-m/ECC
Similar skills
git-workflow-and-versioning
Organizes code work using Git. Helps save progress, manage different versions, and avoid conflicts when working in a team.
addyosmani/agent-skills
observability-and-instrumentation
Adds tools to monitor what the code does in production. Helps understand if something went wrong and why, making fixes easier.
addyosmani/agent-skills
github-pr-workflow
Prepares GitHub pull requests, ensuring code quality and documentation.
paperclipai/paperclip