---
changelog:
  category: Release
  version: ultracite@8.0.1
date: '2026-10-14T00:48:45Z'
seo:
  description: >-
    ultracite fix --claude and --codex hand agents better information and report
    results more accurately:Rule names reach the agent as they're written in
    the…
title: ultracite@8.0.1
type: changelog
---
## Patch Changes

- 40d646a: `ultracite fix --claude` and `--codex` hand agents better information and report results more accurately:
  
  - Rule names reach the agent as they're written in the config, such as `no-unused-vars` and `typescript/no-explicit-any`, instead of Oxlint's `eslint(no-unused-vars)`.
  - ESLint diagnostics now carry the rule's description and documentation URL, read with the `json-with-metadata` formatter. Biome diagnostics carry the rule's documentation URL and its description from `biome explain`, since Biome's JSON reporter includes no help text.
  - The prompt tells the agent that the run is non-interactive, so it explains a decision it can't make in its final message instead of asking a question and waiting for an answer that can't come.
  - Files are handed over in path order, so the same project gets its fix in the same file on every run. Before each file after the first, Ultracite lints it again: an earlier file's fix can clear its issues (breaking an import cycle fixes both files), and the agent was being handed diagnostics that no longer applied. A file with nothing left is skipped.
  - A file the agent deleted, or one that no longer parses, now counts as unfixed. Before, its issues could disappear from the report and show as fixed.
- 2543859: Update the vendored `anti-slop` Oxlint plugin to upstream commit `13909c9` and enable its three new rules in the `ultracite/oxlint/anti-slop` preset. `require-readable-spacing` restores blank lines around structural boundaries — top-level declarations, multiline bindings, control flow, returns, and blocks — a pattern AI-generated code tends to pack together, while consecutive single-line bindings stay grouped at any scope ([dmmulroy/anti-slop#45](https://github.com/dmmulroy/anti-slop/pull/45)). Its autofix only inserts whitespace and never removes existing blank lines, so `ultracite fix` restores the spacing without fighting the formatter. `no-array-filter-map` rejects adjacent eager `filter`/`map` passes over arrays, and `no-reduce-accumulator-copy` rejects reducers that copy their accumulator on every iteration. Expect a one-time whitespace-only diff from `ultracite fix` after upgrading if you extend the preset (#803).
- 0a671cc: On the ESLint toolchain, `ultracite fix --hook` no longer deletes an import an agent has just added. A post-edit hook runs between the agent's edits, so the import is unused until the code that uses it lands, and `unused-imports/no-unused-imports` removed it first. The hook run now turns that rule off, as the Biome hook already skips `noUnusedImports` (#483). `no-unused-vars` still reports the import if it stays unused.
- de08bd3: The ESLint core preset no longer configures a `node` resolver for `import-x`, which needed `eslint-import-resolver-node`, a package `init` never installed. The TypeScript resolver it keeps resolves JavaScript files too.
- c13e042: `react/jsx-no-target-blank` now checks forms as well as links (`forms: true`) in the Oxlint and ESLint React presets, as Biome's `noBlankTarget` already does. The rules file `init` writes for agents now says to add `rel="noopener noreferrer"` to `target="_blank"` links instead of `rel="noopener"`, which Oxlint and ESLint report because it still sends the referrer. It also says to avoid import cycles again, which the Oxlint and ESLint core presets report.
- 9853406: The `oxlint.config.ts` that `ultracite init` writes now sets `env: core.env`. Oxlint doesn't carry `env` through `extends`, so the browser globals the core preset declares never reached projects, and rules that depend on them stayed quiet: `no-implied-eval` didn't report `setTimeout("…")` or `setInterval("…")`, and `no-eval` didn't report `window.eval(…)`. Workspace configs written by `init` now repeat `env: root.env` alongside `ignorePatterns` and `settings`, and an `.oxlintrc.json` that `init` migrates keeps its `env` on top of core's. Re-run `ultracite init` to update an existing config, or add `env: core.env` to it yourself.
- 7984c6e: The Oxlint `js-plugins` preset now enables the 32 SonarJS rules that the ESLint core preset already runs without type information, including the security rules `sonarjs/slow-regex`, `sonarjs/sql-queries`, `sonarjs/disabled-auto-escaping` and `sonarjs/dompurify-unsafe-config`. SonarJS marks these rules `requiresTypeChecking`, but they also check the syntax tree, so they work through Oxlint's JS plugin bridge. The preset had left out every marked rule.
