home / skills / gracefullight / stock-checker / biome-validator

biome-validator skill

/.opencode/skills/biome-validator

This skill validates Biome 2.3+ configurations for correctness, updates patterns, and helps audit or prepare for linting.

npx playbooks add skill gracefullight/stock-checker --skill biome-validator

Review the files below or copy the command above to add this skill to your agents.

Files (3)
SKILL.md
6.2 KB
---
name: biome-validator
description: Validate Biome 2.3+ configuration and detect outdated patterns. Ensures proper schema version, domains, assists, and recommended rules. Use before any linting work or when auditing existing projects.
version: 1.0.0
tags:
  - biome
  - linter
  - formatter
  - validation
  - code-quality
---

# Biome Validator

Validates Biome 2.3+ configuration and prevents outdated patterns. Ensures type-aware linting, domains, and modern Biome features are properly configured.

## When This Activates

- Setting up linting for a new project
- Before any code quality work
- Auditing existing Biome configurations
- After AI generates biome.json
- CI/CD pipeline validation

## Quick Start

```bash
python3 ~/.claude/skills/biome-validator/scripts/validate.py --root .
python3 ~/.claude/skills/biome-validator/scripts/validate.py --root . --strict
```

## What Gets Checked

### 1. Biome Version & Schema

**GOOD - Biome 2.3+:**

```json
{
  "$schema": "https://biomejs.dev/schemas/2.3.11/schema.json"
}
```

**BAD - Old schema:**

```json
{
  "$schema": "https://biomejs.dev/schemas/1.9.0/schema.json"
}
```

### 2. Package Version

```json
// GOOD: v2.3+
"@biomejs/biome": "^2.3.0"

// BAD: v1.x or v2.0-2.2
"@biomejs/biome": "^1.9.0"
```

### 3. Linter Configuration

**GOOD - Biome 2.x:**

```json
{
  "linter": {
    "enabled": true,
    "rules": {
      "recommended": true,
      "suspicious": {
        "noExplicitAny": "warn"
      }
    }
  }
}
```

### 4. Biome Assist (2.0+)

**GOOD - Using assist:**

```json
{
  "assist": {
    "actions": {
      "source": {
        "organizeImports": "on"
      }
    }
  }
}
```

**BAD - Old organizeImports location:**

```json
{
  "organizeImports": {
    "enabled": true
  }
}
```

### 5. Domains (2.0+)

**GOOD - Using domains for framework-specific rules:**

```json
{
  "linter": {
    "domains": {
      "react": "on",
      "next": "on"
    }
  }
}
```

### 6. Suppression Comments

**GOOD - Biome 2.0+ comments:**

```typescript
// biome-ignore lint/suspicious/noExplicitAny: legacy code
// biome-ignore-all lint/style/useConst
// biome-ignore-start lint/complexity
// biome-ignore-end
```

**BAD - Wrong format:**

```typescript
// @ts-ignore  // Not Biome
// eslint-disable  // Wrong tool
```

## Biome 2.3+ Features

### Type-Aware Linting

Biome 2.0+ includes type inference without requiring TypeScript compiler:

```json
{
  "linter": {
    "rules": {
      "correctness": {
        "noUndeclaredVariables": "error",
        "useAwaitThenable": "error"
      }
    }
  }
}
```

### Assist Actions

```json
{
  "assist": {
    "actions": {
      "source": {
        "organizeImports": "on",
        "useSortedKeys": "on"
      }
    }
  }
}
```

### Multi-file Analysis

Lint rules can query information from other files for more powerful analysis.

### Framework Domains

```json
{
  "linter": {
    "domains": {
      "react": "on",       // React-specific rules
      "next": "on",        // Next.js rules
      "test": "on"         // Testing framework rules
    }
  }
}
```

## Recommended Configuration

```json
{
  "$schema": "https://biomejs.dev/schemas/2.3.11/schema.json",
  "assist": {
    "actions": {
      "source": {
        "organizeImports": "on"
      }
    }
  },
  "linter": {
    "enabled": true,
    "rules": {
      "recommended": true,
      "complexity": {
        "noForEach": "off"
      },
      "style": {
        "noNonNullAssertion": "off"
      },
      "suspicious": {
        "noArrayIndexKey": "off",
        "noExplicitAny": "warn"
      },
      "correctness": {
        "useAwaitThenable": "error",
        "noLeakedRender": "error"
      }
    },
    "domains": {
      "react": "on",
      "next": "on"
    }
  },
  "formatter": {
    "enabled": true,
    "indentStyle": "space",
    "indentWidth": 2,
    "lineWidth": 100
  },
  "javascript": {
    "formatter": {
      "quoteStyle": "single",
      "trailingCommas": "es5",
      "semicolons": "always"
    }
  },
  "files": {
    "ignore": [
      "node_modules",
      "dist",
      "build",
      ".next",
      "out",
      ".cache",
      ".turbo",
      "coverage"
    ]
  }
}
```

## Deprecated Patterns

| Deprecated | Replacement (2.3+) |
|------------|-------------------|
| `organizeImports.enabled` | `assist.actions.source.organizeImports` |
| Schema < 2.0 | Schema 2.3.11+ |
| `@biomejs/biome` < 2.3 | `@biomejs/biome@latest` |
| No domains config | Use `linter.domains` for frameworks |

## Validation Output

```
=== Biome 2.3+ Validation Report ===

Package Version: @biomejs/[email protected] ✓

Configuration:
  ✓ Schema version: 2.3.11
  ✓ Linter enabled with recommended rules
  ✓ Using assist.actions for imports
  ✗ No domains configured (consider enabling react, next)
  ✓ Formatter configured

Rules:
  ✓ noExplicitAny: warn
  ✓ useAwaitThenable: error
  ✗ noLeakedRender not enabled (recommended)

Summary: 2 issues found
```

## Migration from ESLint

### Step 1: Install Biome

```bash
bun remove eslint prettier eslint-config-* eslint-plugin-*
bun add -D @biomejs/biome@latest
```

### Step 2: Create biome.json

```bash
bunx biome init
```

### Step 3: Migrate rules

```bash
bunx biome migrate eslint --write
```

### Step 4: Update scripts

```json
{
  "scripts": {
    "lint": "biome lint .",
    "lint:fix": "biome lint --write .",
    "format": "biome format --write .",
    "check": "biome check .",
    "check:fix": "biome check --write ."
  }
}
```

### Step 5: Remove old configs

```bash
rm .eslintrc* .prettierrc* .eslintignore .prettierignore
```

## VS Code Integration

```json
// .vscode/settings.json
{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "biomejs.biome",
  "editor.codeActionsOnSave": {
    "source.organizeImports.biome": "explicit",
    "quickfix.biome": "explicit"
  }
}
```

## CI/CD Integration

```yaml
# .github/workflows/lint.yml
- name: Validate Biome Config
  run: |
    python3 ~/.claude/skills/biome-validator/scripts/validate.py \
      --root . \
      --strict \
      --ci

- name: Lint
  run: bunx biome check --error-on-warnings .
```

## Integration

- `linter-formatter-init` - Sets up Biome from scratch
- `nextjs-validator` - Validates Next.js (enable next domain)
- `bun-validator` - Validates Bun workspace

Overview

This skill validates Biome 2.3+ configuration files and detects outdated patterns that break modern Biome behavior. It helps ensure the correct schema, package version, linter settings, assist actions, domains, and recommended rules are present. Use it to catch migration gaps before linting or CI runs.

How this skill works

The validator scans biome.json (and related config) to confirm the $schema matches Biome 2.3+ and that @biomejs/biome is a compatible version. It checks linter.enabled, recommended rule sets, type-aware correctness rules, assist.actions for source actions, domains for framework-specific rules, formatter options, and suppression comment formats. The tool reports issues, explains deprecated patterns, and suggests concrete replacements.

When to use it

  • Setting up linting for a new project to ensure Biome is configured correctly
  • Before running lint/format tasks or fixing lint issues to avoid false negatives
  • Auditing existing projects to detect legacy schema, packages, or rule locations
  • After AI or automated tools generate a biome.json to validate modern conventions
  • As a CI step to enforce Biome 2.3+ requirements and block regressions

Best practices

  • Require $schema pointing to a 2.3.x+ schema URL and keep @biomejs/biome at v2.3+
  • Enable linter.enabled and include recommended rules before adding custom rules
  • Use assist.actions.source.organizeImports instead of the deprecated organizeImports.enabled
  • Enable linter.domains for frameworks used (react, next, test) to unlock domain rules
  • Prefer Biome suppression comments (biome-ignore) instead of @ts-ignore or eslint-disable

Example use cases

  • Validate a repository before switching CI to run biome check and biome format
  • Audit a large codebase to find old schema or package versions before migration
  • Run during pre-commit or pre-merge to ensure assist actions and formatter are configured
  • Check AI-generated biome.json files for missing domains, rules, or deprecated fields
  • Integrate into migration scripts that replace ESLint/Prettier with Biome

FAQ

What does the validator check first?

It first verifies the $schema and @biomejs/biome package version to ensure Biome 2.3+ compatibility.

Will it auto-fix deprecated fields?

The primary output is a report with recommended replacements; some integrations can offer automated migrations, but manual review is advised.