plankton-code-quality/SKILL.md
Write-time code quality enforcement using Plankton — auto-formatting, linting, and agent-powered fixes on every file edit via hooks.
npx skillsauth add lidge-jun/cli-jaw-skills plankton-code-qualityInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Integration reference for Plankton (credit: @alxfazio), a write-time code quality enforcement system. Plankton runs formatters and linters on every file edit via PostToolUse hooks, then spawns agent subprocesses to fix violations.
Every time an agent 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 subprocess with violations JSON
├─ Routes to model tier based on violation complexity:
│ ├─ Light: formatting, imports, style — 120s timeout
│ ├─ Standard: complexity, refactoring — 300s timeout
│ └─ Advanced: type system, deep reasoning — 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 |
Most quality problems are resolved transparently.
Agents may modify linter configs to disable rules rather than fix code. Plankton blocks this with:
protect_linter_configs.sh blocks edits to 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, etc.A 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 publish# Clone Plankton (credit: @alxfazio)
git clone https://github.com/alexfazio/plankton.git
cd plankton
# Install core dependencies
brew install jaq ruff uv
# Install Python linters
uv sync --all-extras
Hooks in .claude/settings.json activate automatically.
.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, semgrep, knip (dead exports) |
| Shell | shellcheck, shfmt | — |
| YAML | yamllint | — |
| Markdown | markdownlint-cli2 | — |
| Dockerfile | hadolint (≥ 2.12.0) | — |
| TOML | taplo | — |
| JSON | jaq | — |
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": {
"light": { "timeout": 120, "max_turns": 10 },
"standard": { "timeout": 300, "max_turns": 10 },
"advanced": { "timeout": 600, "max_turns": 15 }
},
"volume_threshold": 5
}
}
Key settings:
volume_threshold — violations above this count auto-escalate to a higher model tiersubprocess_delegation: false — skip Phase 3, 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 |
tools
Use only on the Codex CLI for native image generation or image editing without an API key. Save final PNG files under ~/.cli-jaw/uploads, report web-ready absolute-path markdown, and send to Telegram or Discord only when explicitly requested.
tools
Ranked repository structure map via `cli-jaw map`. Use for codebase overview, structure map, symbol overview, unfamiliar codebase exploration, architecture orientation. Triggers: repo map, structure map, codebase overview, 와꾸, project structure, unfamiliar code.
tools
cli-jaw Design workspace: create, preview, run, and export design pages from the right sidebar. Covers panel UX, direct-write workflow, artifact lifecycle, wireframe generation, design system, and Open Design adapter.
development
MUST USE for infrastructure and delivery work — container builds, deploy pipelines, Kubernetes, Infrastructure as Code, SRE foundations, edge/serverless, ML infrastructure. Triggers: Dockerfile, K8s manifests, CI/CD pipeline, Terraform/IaC, release/deploy, devops/infra/deploy or release_cd task_tags.