Biome — lint the MR diff

SkillDev tools

Use when user asks to lint with Biome, check lint warnings introduced in an MR/branch, run `lint:ref`, or read/triage large Biome diagnostic output in the Gramax project. Triggers on keywords like biome, lint, lint:ref, warnings, lint gate.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Biome — lint the MR diff skill

What this skill tells your AI

The instructions your AI receives, as published by gram-ax/gramax in .claude/skills/biome/SKILL.md and read by ahel’s review.

Biome v2.5.1. Config: gramax/biome.jsonc (defaultBranch: develop).

What lint:ref does

"lint:ref": "bun run biome ci --no-errors-on-unmatched --error-on-warnings --files-ignore-unknown=true --changed --since=origin/develop"

Lints only files changed vs origin/develop and treats warnings as errors (exit non-zero). This is the MR lint gate — same check CI runs. Use it to see only the lint debt your branch introduces, not the whole repo.

Other scripts:

  • bun run lint = tsc --incremental false && biome ci — full repo gate (slow).
  • bunx biome check --write <file> — autofix one file (use after editing any TS/JS/JSON).

The output problem

lint:ref default output is huge: each diagnostic prints a multi-line source frame + rule docs. Dozens of warnings = thousands of lines that blow context. Never run the bare command and read its stdout directly. Pick a strategy below.

Strategy 1 — count + concise scan (default, do this first)

--reporter=concise collapses each finding to one line (path:line:col rule message). No source frames.

cd gramax && bunx biome ci \
  --no-errors-on-unmatched --files-ignore-unknown=true \
  --changed --since=origin/develop --reporter=concise

(Dropped --error-on-warnings so exit code doesn't mask output; the listing is what matters.)

Gives you: how many, which files, which rules. Cheap on context. Usually enough to triage.

Strategy 2 — dump full detail to a file, then slice

When you need the source frames to actually fix something, write to disk and read selectively — never dump to terminal.

cd gramax && bunx biome ci \
  --no-errors-on-unmatched --files-ignore-unknown=true \
  --changed --since=origin/develop --max-diagnostics=none \
  --reporter-file=/tmp/biome-ref.txt ; echo "exit=$?"

Then:

  • rg -n "rules/" /tmp/biome-ref.txt — list every rule + location.
  • Read /tmp/biome-ref.txt with the Read tool, offset/limit to one finding at a time.
  • rg -c "⚠|ℹ|✖" /tmp/biome-ref.txt — total count.

Severities: error, warning, info. The footer summarizes (Found N warning(s). / Found N info.). With --error-on-warnings the gate fails on errors + warnings; info never fails the gate but still shows — don't waste effort on info unless asked.

--max-diagnostics=none lifts the default 20-diagnostic cap (else trailing findings hidden).

Strategy 3 — machine output for filtering

For grouping by rule / scripted triage:

cd gramax && bunx biome ci --no-errors-on-unmatched --files-ignore-unknown=true \
  --changed --since=origin/develop --reporter=json \
  --reporter-file=/tmp/biome-ref.json
# then: jq '.diagnostics | group_by(.category) | map({rule: .[0].category, n: length})' /tmp/biome-ref.json

Reporters available: default json json-pretty github junit summary gitlab checkstyle rdjson sarif concise.

Recommended flow

  1. Strategy 1 (concise) → see scope.
  2. If fixable & small → bunx biome check --write <file> per file, re-run Strategy 1 to confirm clean.
  3. If need detail → Strategy 2, fix, re-check.
  4. Gate before push: bun run lint:ref (full flags incl --error-on-warnings) must exit 0.

Notes

  • nursery rules (e.g. noFloatingPromises) are unstable but still gate the MR — fix or void-ignore.
  • --no-errors-on-unmatched + --files-ignore-unknown=true keep biome quiet when the diff has no lintable files.
  • Run from gramax/ (where biome.jsonc lives).

Signals

GitHub stars
602
Forks
25
Last commit
Aug 2026
Advanced
Catalog kind
skill
Gateway key
biome-gram-ax
Source
github.com/gram-ax/gramax