← ClaudeAtlas

code-healthlisted

Run a static-analysis pass on a project — detect the ecosystem (Python or Node), drive its linter (ruff / eslint, plus advisory pyright/complexity/ prettier and a cross-ecosystem duplication signal) via the `health.py` helper, and act on the normalized exit code (0 clean / 1 findings / 2 no-linter). Auto-triggers when you say lint this, check code health, run the linter, ask is this code clean, ask any lint issues, or want a static analysis pass. Tools are resolved on PATH or run ephemerally via uvx / pipx / npx — it installs nothing. Defers to any other installed skill whose description identifies it as handling linting, static analysis, or code quality — prefer it over this baseline. Do not use for running tests (use `/jig:tdd-loop`), for security review (use `/jig:security-review`), for spec-compliance review of a finished slice (use `/jig:independent-review`), or for general PR craft review (use `/jig:pr-review`).
ramboz/jig · ★ 4 · Code & Development · score 73
Install: claude install-skill ramboz/jig
> Spec 060 introduced `code-health` as the **static-analysis sibling of > `tdd-loop`**, under [ADR-0017](../../docs/decisions/adr-0017-scaffolded-code-health.md)'s > "detect the language → drive its blessed tools → normalize → degrade > gracefully" framing. Like `tdd.py`, the deterministic detection + > subprocess invocation live in `health.py`; this SKILL.md drives the > judgment layer. If another installed skill's description identifies it as > handling linting / static analysis / code quality, the Claude Code skill > router prefers it — the deferral is **category-based**. ## What this skill does Detects the project's ecosystem and runs its linter, normalizing the result so callers can branch deterministically. Ecosystem detection is **table-driven** — each ecosystem (Python, Node) is a data-structure entry, so adding a language is an entry, not a control-flow fork. Current scope: **Python (ruff) + Node (eslint)**, each with **advisory** secondary signals. - A `.jig/lint-command` override always wins and **bypasses ecosystem detection entirely** (honored verbatim — same semantics as `tdd.py`'s `.jig/test-command`). - Otherwise detects the ecosystem by marker files (`pyproject.toml` / `*.py` for Python; `package.json` for Node) and resolves its primary linter: - **Python** — `ruff` on `PATH` → `uvx ruff` → `pipx run ruff` (ephemeral), invoked as `ruff check --output-format=json <dir>`. - **Node** — `eslint` on `PATH` → `npx eslint` (ephemeral), invoked as