1---2name: dotnet-biome3description: Use Biome in .NET repositories that ship Node-based frontend assets and want a fast combined formatter-linter-import organizer for JavaScript, TypeScript, CSS, JSON, GraphQL, or HTML. Use when a repo prefers a modern all-in-one CLI over a larger ESLint plus Prettier style stack.4---56# Biome for Frontend Assets in .NET Repositories78## Trigger On910- the repo has `biome.json`, `@biomejs/biome`, or the user asks for a faster all-in-one frontend formatter-linter stack11- the repo wants one tool for formatting, linting, and import organization across JS, TS, CSS, JSON, GraphQL, or HTML12- the team is comparing Biome against ESLint plus Prettier or wants to simplify the current stack1314## Do Not Use For1516- repos that rely on ESLint plugins or framework-specific rules Biome does not cover yet17- runtime site audits such as headers, accessibility, and SEO; route that to `dotnet-webhint`18- cases where a dedicated CSS or HTML tool is still the deliberate owner and no migration is requested1920## Inputs2122- the nearest `AGENTS.md`23- `package.json`24- `biome.json` or `biome.jsonc`25- current ownership across ESLint, Prettier, Stylelint, and import ordering2627## Workflow28291. Decide ownership first:30 - Biome as the main formatter and linter31 - Biome only for formatting32 - Biome in coexistence with ESLint for plugin gaps332. Prefer a repo-local pinned install so CI and developer machines use the same version.343. Generate `biome.json` only after confirming what the repo wants Biome to own.354. Add repeatable scripts to `package.json`, for example:36 - `biome check .`37 - `biome check . --write`385. Keep file ownership explicit:39 - Biome can own formatting, linting, and import sorting40 - webhint still owns site-runtime audits41 - ESLint may stay for plugin-heavy cases the repo intentionally keeps426. Start migrations with `check` and bounded folders before flipping the whole repo to `--write`.437. Re-run the frontend build and tests after broad formatting or lint-fix passes.4445## Bootstrap When Missing46471. Detect current state:48 - `rg --files -g 'package.json' -g 'biome.json*'`49 - `rg -n '"@biomejs/biome"|"eslint"|"prettier"|"stylelint"' --glob 'package.json' .`502. Prefer a repo-local pinned install:51 - `npm i -D -E @biomejs/biome`523. Create config deliberately:53 - `npx @biomejs/biome init`544. Add repeatable commands to `AGENTS.md` and `package.json`, then verify with:55 - `npx @biomejs/biome check .`56 - `npx @biomejs/biome check . --write`575. Return `status: configured` if Biome is now wired with explicit ownership, or `status: improved` if the existing setup was tightened.586. Return `status: not_applicable` when the repo intentionally stays on ESLint-centered ownership and no migration or comparison was requested.5960## Handle Failures6162- Missing-rule parity with specialized ESLint plugins is an ownership problem; keep ESLint for those files until the gap is intentionally closed.63- Overly broad `--write` runs can cause large churn; start with bounded folders or changed files first.64- Generated assets or vendored code should be excluded in `biome.json` before trusting the signal.65- If developers complain that Biome and ESLint disagree, define file ownership instead of running both broadly on the same surface by accident.6667## Deliver6869- explicit Biome ownership and version pinning70- checked-in config and repeatable `check` commands71- a migration or coexistence plan versus ESLint and other frontend tools7273## Validate7475- the chosen ownership model is documented76- CI and local runs use the same Biome version77- the target globs exclude generated and vendored assets78- downstream build or test flows still pass after `--write` runs7980## Ralph Loop81821. Plan: analyze current state, target outcome, constraints, and risks.832. Execute one step and produce a concrete delta.843. Review the result and capture findings.854. Apply fixes in small batches and rerun checks.865. Update the plan after each iteration.876. Repeat until outcomes are acceptable.887. If a dependency is missing, bootstrap it or return `status: not_applicable` with a reason.8990### Required Result Format9192- `status`: `complete` | `clean` | `improved` | `configured` | `not_applicable` | `blocked`93- `plan`: concise plan and current step94- `actions_taken`: concrete changes made95- `verification`: commands, checks, or review evidence96- `remaining`: unresolved items or `none`9798## Example Requests99100- "Replace Prettier and basic linting with Biome in this repo."101- "Add Biome to the frontend under ClientApp."102- "Explain whether we should keep ESLint after adding Biome."