Official agent skill

Lint Rule Development

by biomejs in biomejs/biome

A skill your agent uses when creating or modifying Biome lint rules or assists, including analyzer queries, semantic bindings, rule state, code actions, fix safety, options, registration, and…

OfficialApache-2.0Auto-check passedDevelopment

Install Lint Rule Development

skills CLI
$ npx skills add biomejs/biome --skill lint-rule-development -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install biomejs/biome lint-rule-development --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/biomejs/biome.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/lint-rule-development .claude/skills/lint-rule-development && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
lint-rule-development
GitHub stars
26k
Token cost
~1.6k tokens
SKILL.md length
776 words
Files
1
Skills in repo
12
Repo updated
First seen
Licence
Apache-2.0

At a glance

A skill your agent uses when creating or modifying Biome lint rules or assists, including analyzer queries, semantic bindings, rule state, code actions, fix safety, options, registration, and…

  • Works in 6 steps: Find two or three current rules in the… → Generate the matching lint-rule or… → Implement the narrowest query and state… → …
  • Modifying Biome lint rules
  • SKILL.md covers Workflow, Query and State, Diagnostics and Actions, plus 5 more sections
  • Calls just

What it does

Lint Rule Development is an agent skill from biomejs/biome, published by the product's own GitHub organization. Use this skill when creating or modifying Biome lint rules or assists, including analyzer queries, semantic bindings, rule state, code actions, fix safety, options, registration, and end-user rule rustdoc. Also load diagnostics-development for substantial message/advice design and testing-codegen for fixture or snapshot mechanics.

Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: Designed for coding agents working on the Biome codebase (github.com/biomejs/biome).

It sits in Development, covering Linting and formatting and Project scaffolding. The repository describes itself as: A toolchain for web projects, aimed to provide functionalities to maintain them. Biome offers formatter and linter, usable via CLI and LSP. The licence is Apache-2.0.

When your agent uses it

  • Modifying Biome lint rules
  • Including analyzer queries
  • Semantic bindings
  • End-user rule rustdoc

Example prompts

  • “/lint-rule-development”

Requirements

  • Compatibility (from SKILL.md): Designed for coding agents working on the Biome codebase (github.com/biomejs/biome).

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Find two or three current rules in the same language and group with a similar query or action.
  2. Generate the matching lint-rule or assist scaffolding when adding analyzer behavior.
  3. Implement the narrowest query and state needed to decide whether to signal.
  4. Add a diagnostic and, when safe, an action.
  5. Add focused valid and invalid fixtures, then inspect snapshots.
  6. Run required analyzer codegen and the narrowest tests.

What it can do on your machine

Read from SKILL.md and the folder at commit 4d056a5. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • just

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Designed for coding agents working on the Biome codebase (github.com/biomejs/biome).

    From compatibility in the SKILL.md frontmatter.

Context cost

Lint Rule Development loads about 1.6k tokens when it runs. Until then it costs about 89 tokens; SKILL.md has 776 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~89
When it runs · the whole SKILL.md, loaded when a task matches
~1.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from biomejs/biome at commit 4d056a5, republished under its Apache-2.0 licence (© biomejs). 776 words, ~1,629 tokens.

Download SKILL.mdSave it as .claude/skills/lint-rule-development/SKILL.md (or your agent's skills folder).
name
lint-rule-development
description
Use this skill when creating or modifying Biome lint rules or assists, including analyzer queries, semantic bindings, rule state, code actions, fix safety, options, registration, and end-user rule rustdoc. Also load diagnostics-development for substantial message/advice design and testing-codegen for fixture or snapshot mechanics.
compatibility
Designed for coding agents working on the Biome codebase (github.com/biomejs/biome).

Lint Rule Development

Follow the current analyzer architecture in crates/biome_analyze/CONTRIBUTING.md. Read only the sections relevant to the rule rather than loading the entire guide by default.

Workflow

  1. Find two or three current rules in the same language and group with a similar query or action.
  2. Generate the matching lint-rule or assist scaffolding when adding analyzer behavior.
  3. Implement the narrowest query and state needed to decide whether to signal.
  4. Add a diagnostic and, when safe, an action.
  5. Add focused valid and invalid fixtures, then inspect snapshots.
  6. Run required analyzer codegen and the narrowest tests.

Scaffolding commands:

shell
just new-js-lintrule useMyRule
just new-css-lintrule useMyRule
just new-json-lintrule useMyRule
just new-graphql-lintrule useMyRule

New lint rules start in nursery. They are patch changes targeting main, because nursery rules do not follow normal feature versioning. Load changeset for the release entry.

For a new assist, use the language's new-*-assistrule recipe, for example:

shell
just new-js-assistrule useMyAction
just new-json-assistrule useMyAction

The generator places assists under src/assist/source/; they do not use lint groups or the nursery policy. A new assist is a user-facing feature and normally requires a minor changeset targeting next. A bug fix to an existing assist follows normal bug-fix policy. Check justfile for the languages with assist scaffolding.

Query and State

Choose the least expensive query that answers the rule:

  • Ast<Node> for syntax-local checks;
  • Semantic<Node> when bindings, references, scopes, or globals are required;
  • a service query only when the fact is owned by that service;
  • type inference only when syntax and the semantic model cannot answer the question.

The analyzer guide's query and service sections are canonical for available APIs.

run() should decide whether to emit a signal. Keep action-only work in action() so it is not performed for every candidate node.

Prefer ranges, syntax nodes, tokens, and compact enums in State. A String, Box<str>, or collection built from syntax text often indicates avoidable allocation; load syntax-text-handling before owning source text.

For rules matching a global identifier, prove the reference resolves to the global rather than a local shadow. Cover every relevant member of node unions and framework-specific syntax families.

Diagnostics

Every diagnostic answers three separate questions:

  1. What condition was found?
  2. Why is it a problem?
  3. What should the user do?

The message answers the first question. Advice answers the second and, when no action exists, the third. A code action and its label normally answer the third when an automated fix exists.

Load diagnostics-development for message structure, markup, details, advice, categories, and standalone Diagnostic types. Do not duplicate its guidance in the rule implementation.

Actions

Build mutations in action(). Set FixKind::Safe only when no reachable input changes behavior. If safety depends on assumptions the rule cannot prove, use Unsafe.

Test that applying the action:

  • produces valid syntax;
  • preserves comments and trivia;
  • does not trigger the same rule again;
  • preserves semantics for a safe fix;
  • handles every syntax variant accepted by run().

Use existing rules with the same mutation shape as API examples.

Show full SKILL.md (299 more words)Show less

Options

Add options only for a real semantic mode or established conflicting preference. Do not add speculative flexibility.

Use the rule's generated or existing file under crates/biome_rule_options/src/ as the source of truth. Follow the analyzer guide sections Rule Options, Merge, and Documenting Options for current derives, merge behavior, configuration examples, and rustdoc requirements.

Check these integration points:

  • the rule's type Options;
  • defaults preserve behavior when the option is absent;
  • extended configurations merge according to the option type's contract;
  • fixture directories with options.json cover each behavior;
  • rule rustdoc states every option's default and shows it in use;
  • just gen-rules and just gen-configuration update registrations and configuration.

If the source ESLint rule has options that biome migrate eslint should preserve, load eslint-migrate-options.

Rule Documentation

Rustdoc inside declare_lint_rule! and declare_assist_rule! is end-user website content, not internal API documentation.

  • Start with a single-line behavior summary.
  • Explain why the reported pattern is problematic.
  • Put ### Invalid examples before ### Valid examples.
  • Mark examples according to the current rules-check syntax.
  • For every option, state the default, show configuration, and show an applied example.
  • Do not use ignore merely to avoid validation.

Inspect neighboring rule documentation and the analyzer guide before writing examples.

Testing and Generation

Load testing-codegen for fixture naming, expectation comments, .jsonc cases, snapshot review, and pruning.

Typical focused commands:

shell
just test-lintrule useMyRule
just gen-rules
just gen-configuration

Run just f and just l as required by AGENTS.md.

Review Checklist

  • The query is no broader than needed.
  • Globals and shadowing are handled through the semantic model.
  • State avoids unnecessary owned source text.
  • Action-only work is deferred to action().
  • Safe fixes preserve semantics.
  • Defaults preserve existing behavior.
  • Valid, invalid, option, suppression, and fix cases cover the changed branches.
  • Required generated artifacts are present.
  • User-facing diagnostics and rustdoc explain behavior rather than implementation.

References

  • Analyzer guide: crates/biome_analyze/CONTRIBUTING.md
  • Rule implementations: crates/biome_*_analyze/src/lint/
  • Rule options: crates/biome_rule_options/src/
  • Test fixtures: crates/biome_*_analyze/tests/specs/

© biomejs, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/lint-rule-development of biomejs/biome.

Open the folder on GitHubat commit 4d056a5

Compare with similar skills

Lint Rule Development next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Lint Rule Development compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Lint Rule Development this skillbiomejs/biome26k—~1.6kAutomated safety check: PassApache-2.0
Unslop CodeJCarterJohnson/vibecoded-design-tells513—~2.5kAutomated safety check: PassCustom licence
Rust Hygiene Audittsz-org/tsz577—~1.5kAutomated safety check: PassApache-2.0
Qwen Agentthananon/9arm-skills3.2k—~1.5kAutomated safety check: PassNone
Create Saleor Packagesaleor/apps162—~608Automated safety check: PassCustom licence
Deno Runtime and Package Managerdenoland/skills100—~2.7kAutomated safety check: PassMIT

Similar skills

  • Unslop Code

    JCarterJohnson/vibecoded-design-tells

    Strips the tells that make source code read as AI-generated and forces code that fits the project instead of the model's default average.

    513 GitHub stars~2.5k tokensUpdated 3 mo ago
    DevelopmentAuto-check passed
  • Run a deep DRY + code-hygiene audit of the Rust workspace and turn the findings into verified, deduplicated, hierarchical GitHub tech-debt issues.

    577 GitHub stars~1.5k tokensUpdated 29 days ago
    DevelopmentAuto-check passed
  • Qwen Agent

    thananon/9arm-skills

    Delegate menial, well-scoped coding tasks to a cheap Qwen-backed subagent via the claude-9arm command instead of burning Claude tokens/quota.

    3.2k GitHub stars~1.5k tokensUpdated 3 mo ago
    DevelopmentAuto-check passed
  • Scaffold a new shared package in the saleor-apps monorepo under ./packages/.

    162 GitHub stars~608 tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Official

    Guides writing, running and configuring Deno 2.9+ projects: installing npm and JSR dependencies, permissions, config file precedence and the built-in fmt, lint, test and compile toolchain.

    100 GitHub stars~2.7k tokensUpdated 2 mo ago
    DevelopmentAuto-check passed
  • Bmad Builder

    aj-geddes/claude-code-bmad-skills

    Meta-skill for scaffolding and validating custom PLANNING/ORCHESTRATION skills within the BMAD Planning & Orchestrator plugin.

    488 GitHub stars~1.9k tokensUpdated 3 mo ago
    DevelopmentAuto-check: notes

More from biomejs/biome

All 12 skills in this repo
  • Changeset

    biomejs/biome

    Official

    A skill your agent uses when a Biome change may affect users and you must decide whether it needs a changeset, choose the release level, or create and edit .changeset/.md release-note text.

    26k GitHub stars~839 tokensUpdated today
    Auto-check passed
  • Doc Comments

    biomejs/biome

    Official

    A skill your agent uses whenever writing or editing Rust //, ///, or //!

    26k GitHub stars~3k tokensUpdated today
    Auto-check passed
  • Official

    A skill your agent uses when biome migrate eslint must preserve configurable ESLint rule options through source-option models, Biome conversions, typed rule variants, and migration fixtures.

    26k GitHub stars~1.4k tokensUpdated today
    Auto-check passed
  • Official

    A skill your agent uses whenever implementing or debugging Biome formatter behavior, IR composition, node rules, layout selection, source-comment handling, verbatim formatting, idempotency, internal…

    26k GitHub stars~2.1k tokensUpdated today
    Auto-check passed
  • Parser Development

    biomejs/biome

    Official

    A skill your agent uses when implementing or modifying Biome parser behavior, including .ungram grammars, lexers, token sources, parse rules, separated lists, error recovery, and parser fixtures.

    26k GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Promote Lint Rules

    biomejs/biome

    Official

    A skill your agent uses when promoting one or more Biome lint rules from nursery to stable groups, including promotion plans from GitHub issues, metadata changes, rule renames, generated…

    26k GitHub stars~948 tokensUpdated today
    Auto-check passed

Categories

Questions about Lint Rule Development

What does Lint Rule Development do?

A skill your agent uses when creating or modifying Biome lint rules or assists, including analyzer queries, semantic bindings, rule state, code actions, fix safety, options, registration, and…. Lint Rule Development is an agent skill from biomejs/biome, published by the product's own GitHub organization. Use this skill when creating or modifying Biome lint rules or assists, including analyzer queries, semantic bindings, rule state, code actions, fix safety, options, registration, and end-user rule rustdoc.

When should I use Lint Rule Development?

Lint Rule Development fits situations like: modifying Biome lint rules; including analyzer queries; semantic bindings; end-user rule rustdoc.

How do I install Lint Rule Development in Claude Code?

Run `npx skills add biomejs/biome --skill lint-rule-development -a claude-code`. Or copy the skill folder (.agents/skills/lint-rule-development in biomejs/biome) into .claude/skills/lint-rule-development in your project. Claude Code loads it when a task matches its description.

How do I install Lint Rule Development in Codex?

Run `npx skills add biomejs/biome --skill lint-rule-development -a codex`. Or copy the skill folder (.agents/skills/lint-rule-development in biomejs/biome) into .agents/skills/lint-rule-development in your project. Codex loads it when a task matches its description.

Can I use Lint Rule Development in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add biomejs/biome --skill lint-rule-development -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/lint-rule-development, .gemini/skills/lint-rule-development, .github/skills/lint-rule-development and .opencode/skills/lint-rule-development in your project.

What does Lint Rule Development need to run?

Going by SKILL.md and its folder, Lint Rule Development needs the command-line tools its instructions call (just). Compatibility (from SKILL.md): Designed for coding agents working on the Biome codebase (github.com/biomejs/biome)..

Does Lint Rule Development access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Lint Rule Development safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Lint Rule Development use?

Lint Rule Development is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Lint Rule Development use?

About 1.6k tokens (SKILL.md is roughly 6.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Lint Rule Development?

Skills that share tags, products or a category with Lint Rule Development: Unslop Code (JCarterJohnson/vibecoded-design-tells, 513 stars), Rust Hygiene Audit (tsz-org/tsz, 577 stars), Qwen Agent (thananon/9arm-skills, 3.2k stars) and Create Saleor Package (saleor/apps, 162 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Lint Rule Development?

biomejs (a GitHub organization, an official publisher) maintains it in biomejs/biome, which has 25,911 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on October 9, 2026.

Source: biomejs/biome on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.