Manages zero-config linting and formatting for JS/TS projects using Ultracite (Biome, ESLint, or Oxlint). Includes init, check, fix, doctor commands.
How this skill is triggered — by the user, by Claude, or both
Slash command
/haydenbleasel-ultracite:ultraciteThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Zero-config linting and formatting for JS/TS projects. Supports three linter backends: **Biome** (recommended), **ESLint** + Prettier + Stylelint, and **Oxlint** + Oxfmt.
Zero-config linting and formatting for JS/TS projects. Supports three linter backends: Biome (recommended), ESLint + Prettier + Stylelint, and Oxlint + Oxfmt.
Check if ultracite is in package.json dependencies or devDependencies. Detect the active linter by looking for (searching upward from the current directory):
biome.json / biome.jsonc → Biomeeslint.config.* (.mjs, .js, .cjs, .ts, .mts, .cts) → ESLint (with Prettier for formatting)oxlint.config.ts → Oxlint (with oxfmt.config.ts for formatting)# Check for issues (read-only)
bunx ultracite check
# Auto-fix issues
bunx ultracite fix
# Diagnose setup problems
bunx ultracite doctor
# Initialize in a new project
bunx ultracite init
Replace bunx with npx, pnpx, or yarn dlx depending on the package manager.
check and fix accept optional file paths: bunx ultracite check src/index.ts. Unknown options are passed through to the underlying linter (e.g. bunx ultracite check --max-warnings 0).
bunx ultracite init runs an interactive setup. For non-interactive (CI) use, pass flags:
bunx ultracite init \
--pm bun \
--linter biome \
--editors universal \
--agents claude copilot \
--frameworks react next \
--integrations husky lint-staged \
--quiet
Flags:
--pm — npm | yarn | pnpm | bun--linter — biome (recommended) | eslint | oxlint--editors — universal (writes .vscode/settings.json for every VS Code-based editor) | vscode | cursor | windsurf | codebuddy | antigravity | bob | kiro | trae | void | zed--agents — universal (writes AGENTS.md) | claude | codex | copilot | cline | amp | gemini | cursor-cli + 34 more (41 agents supported)--frameworks — react | next | solid | vue | svelte | qwik | remix | tanstack | angular | astro | nestjs | jest | vitest--integrations — husky | lefthook | lint-staged | pre-commit--hooks — Enable auto-fix hooks: claude | copilot | cursor | windsurf | codebuddy--type-aware — Enable type-aware linting (Biome: extends the type-aware preset; Oxlint: installs oxlint-tsgolint)--install-skill — Install the reusable Ultracite skill after setup--skip-install — Skip dependency installation--quiet — Suppress prompts (auto-detected when CI=true)Init creates config that extends Ultracite presets:
// biome.jsonc
{ "extends": ["ultracite/biome/core", "ultracite/biome/react"] }
// eslint.config.mjs — arrays of flat configs, spread together
import core from "ultracite/eslint/core";
import react from "ultracite/eslint/react";
export default [...core, ...react];
// oxlint.config.ts — imports passed to extends
import { defineConfig } from "oxlint";
import core from "ultracite/oxlint/core";
export default defineConfig({
extends: [core],
ignorePatterns: core.ignorePatterns,
});
Presets available per linter (ultracite/<linter>/<preset>): core, react, next, solid, vue, svelte, qwik, remix, tanstack, angular, astro, nestjs, jest, vitest. Biome also has type-aware; Oxlint also has github and sonarjs (ESLint plugins run via oxlint's JS plugin support, included by default on init).
When writing code in a project with Ultracite, follow these standards. For the full rules reference, see references/code-standards.md.
Key rules at a glance:
Formatting is handled by the project's configured linter/formatter. Respect the repository's existing formatter settings instead of forcing one fixed line width, quote style, or trailing comma policy.
Type safety: Use explicit types when they improve clarity. Prefer unknown over any. Use as const for immutable values and rely on type narrowing over blunt assertions.
Modern JavaScript/TypeScript: Prefer const, destructuring, optional chaining, nullish coalescing, template literals, for...of, and concise arrow functions.
Async and correctness: Always await promises in async functions. Prefer async/await over promise chains. Remove console.log, debugger, and alert from production code.
React and accessibility: Use function components, keep hooks top-level with correct deps, avoid nested component definitions, and use semantic HTML with the right labels, headings, alt text, and keyboard affordances.
Organization, security, performance, and testing: Keep functions focused, prefer early returns, avoid dangerouslySetInnerHTML and eval(), prefer specific imports and top-level regex, and keep tests free of .only and .skip.
Run bunx ultracite doctor to diagnose. It checks:
.eslintrc.* files; .prettierrc.*/prettier.config.* when not using the ESLint backend)Common fixes:
.eslintrc.* and .prettierrc.* files after migrating to Ultracitebunx ultracite init again or manually add ultracite to devDependenciesnpx claudepluginhub haydenbleasel/ultraciteConfigures Ultracite multi-provider linting/formatting with Biome, ESLint, Oxlint for JS/TS projects. Handles v6/v7 setup, provider selection, Git hooks, MCP/AI integration, migrations, monorepo configs, type-aware linting errors.
Installs Biome linter with Ultracite preset, creates biome.jsonc config, and sets up a Claude Code Stop hook for auto-fix on changed JS/TS files.
Provides Biome commands for formatting, linting, and organizing imports in JavaScript, TypeScript, JSX/TSX, JSON, CSS projects. Use for zero-config setup, fast CI checks, or ESLint/Prettier migration.