/biome
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 FOR: biome.json or @biomejs/biome setup; fast frontend formatting and linting; replacing
$ npx -y skills add managedcode/dotnet-skills --skill biome --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/biome
Context preview
The summary Claude sees to decide when to auto-load this skill.
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 FOR: biome.json or @biomejs/biome setup; fast frontend formatting and linting; replacing
SKILL.md
biome.SKILL.mdname: biome
description: "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 FOR: biome.json or @biomejs/biome setup; fast frontend formatting and linting; replacing overlapping frontend style tools deliberately. DO NOT USE FOR: ESLint-only plugin coverage; runtime site audits such as headers, accessibility, or browser behavior. INVOKES: inspect the repository context, edit targeted files, and run relevant build, test, lint, or validation commands when changes are made."
compatibility: "Requires a .NET repository with frontend assets managed through Node or a standalone Biome binary workflow; keep ownership explicit versus ESLint, Stylelint, and webhint."
Biome for Frontend Assets in .NET Repositories
Trigger On
- the repo has `biome.json`, `@biomejs/biome`, or the user asks for a faster all-in-one frontend formatter-linter stack
- the repo wants one tool for formatting, linting, and import organization across JS, TS, CSS, JSON, GraphQL, or HTML
- the team is comparing Biome against ESLint plus Prettier or wants to simplify the current stack
Do Not Use For
- repos that rely on ESLint plugins or framework-specific rules Biome does not cover yet
- runtime site audits such as headers, accessibility, and SEO; route that to `webhint`
- cases where a dedicated CSS or HTML tool is still the deliberate owner and no migration is requested
Inputs
- the nearest `AGENTS.md`
- `package.json`
- `biome.json` or `biome.jsonc`
- current ownership across ESLint, Prettier, Stylelint, and import ordering
Workflow
1. Decide ownership first:
- Biome as the main formatter and linter
- Biome only for formatting
- Biome in coexistence with ESLint for plugin gaps
2. Prefer a repo-local pinned install so CI and developer machines use the same version. 3. Generate `biome.json` only after confirming what the repo wants Biome to own. 4. Add repeatable scripts to `package.json`, for example:
- `biome check .`
- `biome check . --write`
5. Keep file ownership explicit:
- Biome can own formatting, linting, and import sorting
- webhint still owns site-runtime audits
- ESLint may stay for plugin-heavy cases the repo intentionally keeps
6. Start migrations with `check` and bounded folders before flipping the whole repo to `--write`. 7. Re-run the frontend build and tests after broad formatting or lint-fix passes.
Current Upstream Notes
- Biome CLI `2.5.7` adds `ignoreIfStatements` to `useNullishCoalescing`, the nursery rules `noExtendNative` and `noTailwindArbitraryValue`, and broader HTML/CSS graph and formatter support.
- The release fixes nested-config lookup for stdin paths, Vue and Svelte reference analysis, type-aware `noUnnecessaryConditions` and `noFloatingPromises` cases, HTML/Vue/Svelte parsing, accessibility suppressions, and several CSS and HTML formatting regressions. Re-run the repo's existing `biome check` command before removing suppressions or accepting formatter churn.
- When `--stdin-file-path` is used, verify that the intended nested `biome.json` is selected and that ignored input produces the expected warning. Keep fixtures for Vue custom blocks, Svelte attachments, Tailwind class sorting, and non-ASCII diagnostic spans when those surfaces matter.
- Recent Biome changes also continue expanding CSS/SCSS, HTML accessibility, import sorting, watch mode, and upgrade-command surfaces; verify actual CLI ownership before replacing ESLint or Stylelint.
Bootstrap When Missing
1. Detect current state:
- `rg --files -g 'package.json' -g 'biome.json*'`
- `rg -n '"@biomejs/biome"|"eslint"|"prettier"|"stylelint"' --glob 'package.json' .`
2. Prefer a repo-local pinned install:
- `npm i -D -E @biomejs/biome`
3. Create config deliberately:
- `npx @biomejs/biome init`
4. Add repeatable commands to `AGENTS.md` and `package.json`, then verify with:
- `npx @biomejs/biome check .`
- `npx @biomejs/biome check . --write`
5. Return `status: configured` if Biome is now wired with explicit ownership, or `status: improved` if the existing setup was tightened. 6. Return `status: not_applicable` when the repo intentionally stays on ESLint-centered ownership and no migration or comparison was requested.
Handle Failures
- Missing-rule parity with specialized ESLint plugins is an ownership problem; keep ESLint for those files until the gap is intentionally closed.
- Overly broad `--write` runs can cause large churn; start with bounded folders or changed files first.
- Generated assets or vendored code should be excluded in `biome.json` before trusting the signal.
- If developers complain that Biome and ESLint disagree, define file ownership instead of running both broadly on the same surface by accident.
Deliver
- explicit Biome ownership and version pinning
- checked-in config and repeatable `check` commands
- a migration or coexistence plan versus ESLint and other frontend tools
Validate
- the chosen ownership model is documented
- CI and local runs use the same Biome version
- the target globs exclude generated and vendored assets
- downstream build or test flows still pass after `--write` runs
Ralph Loop
1. Plan: analyze current state, target outcome, constraints, and risks. 2. Execute one step and produce a concrete delta. 3. Review the result and capture findings. 4. Apply fixes in small batches and rerun checks. 5. Update the plan after each iteration. 6. Repeat until outcomes are acceptable. 7. If a dependency is missing, bootstrap it or return `status: not_applicable` with a reason.
Required Result Format
- `status`: `complete` | `clean` | `improved` | `configured` | `not_applicable` | `blocked`
- `plan`: concise plan and current step
- `actions_taken`: concrete changes made
- `verification`: commands, checks, or review evidence
- `remaining`: unresolved items or `none`
Example Req
Read more
name: biome description: "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 FOR: biome.json or @biomejs/biome setup; fast frontend formatting and linting; replacing overlapping frontend style tools deliberately. DO NOT USE FOR: ESLint-only plugin coverage; runtime site audits such as headers, accessibility, or browser behavior. INVOKES: inspect the repository context, edit targeted files, and run relevant build, test, lint, or validation commands when changes are made." compatibility: "Requires a .NET repository with frontend assets managed through Node or a standalone Biome binary workflow; keep ownership explicit versus ESLint, Stylelint, and webhint."
Biome for Frontend Assets in .NET Repositories
Trigger On
- the repo has `biome.json`, `@biomejs/biome`, or the user asks for a faster all-in-one frontend formatter-linter stack
- the repo wants one tool for formatting, linting, and import organization across JS, TS, CSS, JSON, GraphQL, or HTML
- the team is comparing Biome against ESLint plus Prettier or wants to simplify the current stack
Do Not Use For
- repos that rely on ESLint plugins or framework-specific rules Biome does not cover yet
- runtime site audits such as headers, accessibility, and SEO; route that to `webhint`
- cases where a dedicated CSS or HTML tool is still the deliberate owner and no migration is requested
Inputs
- the nearest `AGENTS.md`
- `package.json`
- `biome.json` or `biome.jsonc`
- current ownership across ESLint, Prettier, Stylelint, and import ordering
Workflow
1. Decide ownership first:
- Biome as the main formatter and linter
- Biome only for formatting
- Biome in coexistence with ESLint for plugin gaps
2. Prefer a repo-local pinned install so CI and developer machines use the same version. 3. Generate `biome.json` only after confirming what the repo wants Biome to own. 4. Add repeatable scripts to `package.json`, for example:
- `biome check .`
- `biome check . --write`
5. Keep file ownership explicit:
- Biome can own formatting, linting, and import sorting
- webhint still owns site-runtime audits
- ESLint may stay for plugin-heavy cases the repo intentionally keeps
6. Start migrations with `check` and bounded folders before flipping the whole repo to `--write`. 7. Re-run the frontend build and tests after broad formatting or lint-fix passes.
Current Upstream Notes
- Biome CLI `2.5.7` adds `ignoreIfStatements` to `useNullishCoalescing`, the nursery rules `noExtendNative` and `noTailwindArbitraryValue`, and broader HTML/CSS graph and formatter support.
- The release fixes nested-config lookup for stdin paths, Vue and Svelte reference analysis, type-aware `noUnnecessaryConditions` and `noFloatingPromises` cases, HTML/Vue/Svelte parsing, accessibility suppressions, and several CSS and HTML formatting regressions. Re-run the repo's existing `biome check` command before removing suppressions or accepting formatter churn.
- When `--stdin-file-path` is used, verify that the intended nested `biome.json` is selected and that ignored input produces the expected warning. Keep fixtures for Vue custom blocks, Svelte attachments, Tailwind class sorting, and non-ASCII diagnostic spans when those surfaces matter.
- Recent Biome changes also continue expanding CSS/SCSS, HTML accessibility, import sorting, watch mode, and upgrade-command surfaces; verify actual CLI ownership before replacing ESLint or Stylelint.
Bootstrap When Missing
1. Detect current state:
- `rg --files -g 'package.json' -g 'biome.json*'`
- `rg -n '"@biomejs/biome"|"eslint"|"prettier"|"stylelint"' --glob 'package.json' .`
2. Prefer a repo-local pinned install:
- `npm i -D -E @biomejs/biome`
3. Create config deliberately:
- `npx @biomejs/biome init`
4. Add repeatable commands to `AGENTS.md` and `package.json`, then verify with:
- `npx @biomejs/biome check .`
- `npx @biomejs/biome check . --write`
5. Return `status: configured` if Biome is now wired with explicit ownership, or `status: improved` if the existing setup was tightened. 6. Return `status: not_applicable` when the repo intentionally stays on ESLint-centered ownership and no migration or comparison was requested.
Handle Failures
- Missing-rule parity with specialized ESLint plugins is an ownership problem; keep ESLint for those files until the gap is intentionally closed.
- Overly broad `--write` runs can cause large churn; start with bounded folders or changed files first.
- Generated assets or vendored code should be excluded in `biome.json` before trusting the signal.
- If developers complain that Biome and ESLint disagree, define file ownership instead of running both broadly on the same surface by accident.
Deliver
- explicit Biome ownership and version pinning
- checked-in config and repeatable `check` commands
- a migration or coexistence plan versus ESLint and other frontend tools
Validate
- the chosen ownership model is documented
- CI and local runs use the same Biome version
- the target globs exclude generated and vendored assets
- downstream build or test flows still pass after `--write` runs
Ralph Loop
1. Plan: analyze current state, target outcome, constraints, and risks. 2. Execute one step and produce a concrete delta. 3. Review the result and capture findings. 4. Apply fixes in small batches and rerun checks. 5. Update the plan after each iteration. 6. Repeat until outcomes are acceptable. 7. If a dependency is missing, bootstrap it or return `status: not_applicable` with a reason.
Required Result Format
- `status`: `complete` | `clean` | `improved` | `configured` | `not_applicable` | `blocked`
- `plan`: concise plan and current step
- `actions_taken`: concrete changes made
- `verification`: commands, checks, or review evidence
- `remaining`: unresolved items or `none`
Example Req
Stop explaining .NET to your AI. Start building. We've all been there: asking Claude to use Entity Framework, only to get EF6 patterns in a .NET 8 project. Explaining to Copilot that Blazor Server and Blazor WebAssembly aren't the same thing.
Repo: managedcode/dotnet-skills
Other skills on dotnet-skills.
- /aspnet-core
Build, debug, modernize, or review ASP.NET Core applications with correct hosting, middleware, security, configuration, logging, and deployment patterns on current .NET. USE FOR: working on ASP.NET Core apps, services, or middleware; changing auth, routing, configuration,
Open skill - /aspire
Build, upgrade, and operate Aspire 13.4.x C# or TypeScript application hosts with the current CLI, AppHost, ServiceDefaults, integrations, dashboard, testing, MCP, and deployment patterns for distributed apps. USE FOR: Aspire.AppHost.Sdk, Aspire.Hosting.*,
Open skill - /azure-functions
Build, review, or migrate Azure Functions in .NET with correct execution model, isolated worker setup, bindings, DI, and Durable Functions patterns. USE FOR: working on Azure Functions in .NET; migrating from the in-process model to the isolated worker model; adding Durable
Open skill - /blazor
Build and review Blazor applications across server, WebAssembly, web app, and hybrid scenarios with correct component design, state flow, rendering, and hosting choices. USE FOR: building interactive web UIs with C# instead of JavaScript; choosing between Server, WebAssembly, or
Open skill - /entity-framework6
Maintain or migrate EF6-based applications with realistic guidance on what to keep, what to modernize, and when EF Core is or is not the right next step. USE FOR: EF6 codebases; runtime versus ORM migration decisions; EDMX, code-first, ObjectContext, and legacy data-access
Open skill - /entity-framework-core
Design, tune, or review EF Core data access with proper modeling, migrations, query translation, performance, and lifetime management for modern .NET applications. USE FOR: DbContext, migrations, model configuration, EF queries, tracking, loading, performance, transactions, and
Open skill

