Ruff 0.16.0 expands default lint rules 7× — and Astral's new OpenAI home makes it a natural AI-agent pairing
Astral shipped Ruff v0.16.0 on July 23rd, bumping the default-enabled ruleset from 59 rules to 413 — a 7× jump that hadn't changed since v0.1.0. The total rule library also grew from 708 to 968. Teams with unpinned ruff dev dependencies are already seeing CI pipelines fail on previously-ignored issues: Simon Willison reported 1,618 violations in sqlite-utils alone on first run, covering categories like bare-except catches, timezone-naive datetime calls, and useless attribute accesses.
The expansion is deliberately agent-friendly. Astral — now operating under OpenAI — structures each diagnostic with enough context (rule code, file path, line range, plain-English fix hint) that AI coding tools can consume and remediate the output directly. Willison used OpenAI Codex (GPT-5.6 Sol) on LLM and sqlite-utils and Claude Code (Opus 5) on Datasette to bulk-apply fixes, with the command `uvx ruff@latest check . --fix --unsafe-fixes` handling the majority of mechanical changes automatically.
Other notable additions in v0.16: Ruff can now format Python code blocks embedded in Markdown files (relevant for README examples and Quarto notebooks); a new `ruff: ignore` comment syntax supplements the older `# noqa` style with range and file-level suppression; and the `check` and `format --check` commands now render fix diffs inline rather than requiring a separate `--diff` flag. Teams that want to preserve the old behavior can pin back with `select = ["E4", "E7", "E9", "F"]` in their Ruff config.
Sources
- Primary source
- Ruff v0.16.0 — Astral official release notes
“Ruff now enables 413 rules by default, up from 59 in previous versions. Since Ruff's default rule set was last modified in v0.1.0, the number of rules in Ruff has grown from 708 to 968.”