Changelog
Release notes for the rust-doctor CLI, read directly from the GitHub releases.
0.2.0Feature
Machine-output consumer? Read the Report V1 migration guide.
rust-doctor 0.2.0 is the largest release since the project went public — 31 commits spanning a new autofix engine, a workspace-deadlock fix, sharper diagnostics, and a hardened supply chain. npm packages are now published with Trusted Publishing (OIDC) and signed provenance attestations — no long-lived tokens anywhere in the pipeline.
Highlights
- Autofix.
rust-doctorcan now apply machine-applicable fixes to your source, not just report them — turning diagnostics into one-command cleanups. - Workspace deadlock fixed. Scanning a workspace with more members than CPU cores could deadlock. Scan-root parallelism is now bounded by available OS threads.
- Fewer false positives. The
hardcoded-secretsrule is now gated on value entropy and shape, and skips test code — far less noise on real codebases. - Signed, tokenless publishing. Every npm artifact ships with a provenance attestation minted over OIDC. Nothing in CI holds a publishing credential.
Features
- fixer: apply machine-applicable fixes to source files
- scan: report per-pass timings and tracing-based logging
- output: flag heuristic findings and clarify score / exit-code semantics
- mcp: cancel on timeout, harden scope, and align score config
- cli:
run()extracted frommaininto the library, so the binary's full pipeline is reusable as a crate
Fixes & reliability
- scan: bound scan-root parallelism with OS threads to fix the workspace deadlock
- process: SIGKILL the whole subprocess group on timeout (no orphaned children)
- scan: isolate the analysis target dir to avoid clobbering the project's own build
- suppression: anchor inline suppressions to absolute path identity
- config: reject unknown fields to catch config typos early
- rules: gate
hardcoded-secretson value entropy/shape and skip test code - mcp: add
pub(super)visibility totool_router/prompt_routermacros (
#1) — thanks for the first community contribution
Supply chain & tooling
- ci: npm publishing via Trusted Publishing (OIDC) + provenance, least-privilege workflow permissions, and a tag/crate-version guard
- lints: enforce the panic/unwrap restriction lint set
- Added
rustfmt.toml,.editorconfig, issue/PR templates, security policy, and code of conduct
⚠️ Behavior changes (review before upgrading)
- Exit-code & score semantics were clarified. If you gate CI on rust-doctor's exit code or score, re-check the thresholds against this release.
- Unknown config keys now error. A
rust-doctor.toml(or[package.metadata.rust-doctor]) with typos or stale keys that were previously ignored will now fail fast. Fix or remove unknown fields.
Install
# npm (prebuilt binary, all platforms)
npm i -g rust-doctor
# crates.io
cargo install rust-doctor
# shell installer (Linux / macOS)
curl -sL https://github.com/ArthurDEV44/rust-doctor/releases/latest/download/install.sh | bash
Full changelog: https://github.com/ArthurDEV44/rust-doctor/compare/v0.1.20...v0.2.0
0.1.20Patch
Remediation release: a full audit driven by rust-doctor's own findings took the repo score from 74.9 to 82+.
Code quality & architecture
- Deduplicate six
is_*_available()checks into a sharedprocess::is_cargo_subcommand_available() - Decompose
print_score_boxinto focused render helpers; extract the MCPServerHandlerinto a dedicatedmcp/handler.rsmodule - Enable nursery lints in
Cargo.toml
Performance
- Memoize file reads in the clippy filter (no more re-reading per diagnostic)
- Eliminate double hashing in the cache via an
is_fresh_with_hash/update_with_hashAPI
Security & supply chain
- Add
deny.tomlwith advisory, license, and ban policies (yanked = "deny"), plus acargo deny checkstep in CI - Harden
.gitignorewith secrets/credential patterns
Testing & DX
- Tests for terminal rendering,
main.rsgate functions, and 6 more custom rules in the integration suite - Pre-commit hooks (
cargo fmt+cargo clippy),CONTRIBUTING.md, and a Keep a ChangelogCHANGELOG.md
Docs
- Setup wizard demo video (12s, Remotion) in the README, plus setup docs on the website and FAQ
assets/excluded from the crates.io package
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.19...v0.1.20
0.1.19Patch
Patch Changes
Dogfooding: rust-doctor scanned itself and three warnings got fixed.
- mcp: replace a
diags[0]index withfilter_map+.first() - setup: replace an
agents[i]index withfilter_map+.get(i) - setup: replace
Box<dyn Error>with a typedSetupErrorenum, following the project error convention
Reliability dimension 99 -> 100.
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.18...v0.1.19
0.1.18Patch
Senior Rust reviewer skill
The setup wizard's SKILL.md now turns the agent into a senior Rust code reviewer instead of a linter wrapper. A new "Rust Expert Context" section carries 32 concrete flags across five domains (error handling, security, async/tokio, performance, architecture) that the agent applies while reading each flagged file, catching issues beyond what rust-doctor itself detects.
Sources: Rust API Guidelines, Alice Ryhl (Tokio), Luca Palmieri, RustSec advisories, the Rust Performance Book, Effective Rust, Oxide RFD 400.
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.17...v0.1.18
0.1.17Patch
Deeper skill template
The SKILL.md installed by rust-doctor setup produced shallow scans: agents ran one command and summarized the output. The rewritten template enforces a three-pass pipeline:
- Scan & Capture:
--jsonfor structured data plus--planfor priorities - Triage: P0-P3 classification by severity and category
- Investigate & Fix: mandatory source read before reporting, concrete before/after code for each P0/P1 finding, and a post-fix re-scan
Hard Rules and DO NOT sections explicitly ban shallow-analysis patterns (summary tables without source reads, generic advice without call sites, skipping verification).
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.16...v0.1.17
0.1.16Patch
Setup wizard UX
- Default recommendation is now CLI + Skills rather than MCP Server
- Agent selection offers "All" or a space-to-toggle multi-select for specific agents
- The wizard now asks before overwriting an existing rust-doctor skill or MCP config instead of silently replacing it
- The closing "try asking" message names rust-doctor explicitly so the agent knows which tool to invoke
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.15...v0.1.16
0.1.15Patch
Setup wizard
New rust-doctor setup subcommand: configure rust-doctor for AI coding agents (Claude Code, Cursor, Windsurf) in one interactive run. Two installation modes:
- MCP Server: writes a stdio server entry into the agent's MCP config file (
~/.claude.json,~/.cursor/mcp.json, ...) with crash-safe atomic writes (tempfile + rename) - CLI + Skills: installs a SKILL.md that teaches the agent to drive the CLI directly
The wizard auto-detects installed agents, prompts via dialoguer, and guards against non-TTY environments so it can never hang CI.
Docs
- Fix the score formula, lint count, and library example across README and website
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.14...v0.1.15
0.1.14Patch
Version bump only, cut to get a clean release pipeline run. No code changes over v0.1.13.
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.13...v0.1.14
0.1.13Patch
Restructure
Flat src/*.rs reorganized into domain modules:
src/passes/{security,static_analysis,quality}/for the analysis passessrc/output/{mod,score,terminal}.rsfor renderingsrc/mcp/{mod,tools,prompts,helpers,rules,types}.rsfor the MCP server, with prompt templates extracted into their own module
No behavior change intended; the scan orchestrator gained pipeline documentation.
Cross-tool AI config
The repo now carries first-class configuration for AI coding agents contributing to rust-doctor itself: AGENTS.md, .cursor/rules/rust-doctor.mdc, .github/copilot-instructions.md, .aiexclude for Gemini Code Assist, and recommended hooks in CLAUDE.md.
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.12...v0.1.13
0.1.12Patch
MCP: pure markdown reports
Claude Code renders structuredContent as raw JSON in the expand view, which made the v0.1.11 text+JSON split no better in practice. The scan tool now returns a single markdown report: score, dimensions, diagnostics grouped by severity with rule names, counts, example locations, and fix guidance. No JSON at all.
Report size: ~12K characters, versus ~30K grouped JSON (v0.1.10) and ~489K raw JSON (v0.1.8).
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.11...v0.1.12
0.1.11Patch
Patch Changes
- mcp: the scan tool now returns the markdown summary as a text content block (what the LLM reads first) and the grouped diagnostics as
structuredContent, instead of embedding the summary inside the JSON blob. Same pattern as production MCP servers like PostHog: text for the model, structured data for clients.
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.10...v0.1.11
0.1.10Patch
MCP: scan output built for LLM consumption
The scan tool used to return every individual diagnostic: 1,574 items and ~489K characters on a 201-file project, blowing past Claude Code's context window and forcing manual jq extraction.
- Diagnostics are now grouped by rule (sorted by severity then count) with up to 3 example locations each: ~25K characters for the same project
- A markdown summary (score, dimensions, top issues) rides along in the output
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.9...v0.1.10
0.1.9Patch
MCP improvements
- Complete tool annotations on all 4 tools:
title,readOnlyHint,destructiveHint=false,idempotentHint=true,openWorldHint=false, with a test locking the values in - MCP logging (
notifications/message) during scan and score execution for real-time visibility - Progress notifications on the score tool (previously scan only)
- The
deep-audit/health-checkprompts and the skill now prefer Context7 for documentation lookup and Exa for web research when those MCP tools are available, with graceful fallback to native WebSearch/WebFetch
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.8...v0.1.9
0.1.8Patch
Claude Code skill
- New
/rust-doctorslash command as a skill-based alternative to the MCP server:skills/rust-doctor/ships a SKILL.md with a 4-step pipeline (scope, scan, interpret, guide) plus reference docs for the rules, score interpretation, and suppression syntax. Installable vianpx skills addor manual copy.
Rules
- New
high-cyclomatic-complexityrule (Architecture category), bringing the custom rule count to 19 - Fix pre-existing severity mismatches between docs and source:
blocking-in-async: Warning -> Errortokio-spawn-without-move: Warning -> Erroractix-blocking-handler: Error -> Warningstring-from-literal: Warning -> Info
MCP
- New
deep-auditprompt: a 6-phase expert Rust audit workflow
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.7...v0.1.8
0.1.7Patch
Patch Changes
- packaging: exclude the Remotion video project (
rust-doctor-video/) from the crates.io package. No code changes.
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.6...v0.1.7
0.1.6Patch
Version bump only: the v0.1.5 npm publish partially succeeded, so 0.1.6 re-publishes all packages cleanly. No code changes.
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.5...v0.1.6
0.1.5Patch
Features
- cli: new
--install-depsflag: checks the six external tools rust-doctor drives (clippy, cargo-deny, cargo-audit, cargo-geiger, cargo-machete, cargo-semver-checks) and installs the missing ones (clippy via rustup, the rest via cargo install) - output: skipped passes now show up in the terminal score box with an install hint, and
--scorewarns when the score is incomplete because tools are missing - clippy: a missing tool is now reported as
Skippedinstead ofFailed
Also in the repo
- Project website (Next.js) with dark/light/system themes and SEO structured data, plus a Remotion project generating the README demo video
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.4...v0.1.5
0.1.4Patch
Patch Changes
- output: compute the score box width from unicode display width instead of
charcount, fixing misaligned box borders when the content contains wide glyphs - tests: the discovery test now reads
CARGO_PKG_VERSIONinstead of a hardcoded version string, so it no longer breaks on every release bump
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.3...v0.1.4
0.1.3Patch
Patch Changes
- process: drain subprocess stderr on a background thread. A tool writing enough stderr to fill the pipe buffer could deadlock the whole scan; this was the cause of MCP scans hanging indefinitely.
- geiger: send cargo-geiger stderr to null instead of piping it
- mcp: add an absolute 5-minute timeout to the scan and score tools. A stuck subprocess now returns a clear error instead of hanging the agent session.
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.2...v0.1.3
0.1.2Patch
Patch Changes
- npm: remove the
binfield from the five@rust-doctor/*platform packages. It conflicted with the main package's bin symlink at install time; the main package'sinstall.jspostinstall resolves the platform binary itself.
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.1...v0.1.2
0.1.1Patch
Patch Changes
- npm: fix the publish pipeline:
publish.shnow creates each platform package'sbin/directory before extracting the binary (git does not track empty directories), so the@rust-doctor/*platform packages actually ship their binaries - npm: pin the main package's
optionalDependenciesto the matching platform-package version
Full Changelog: https://github.com/arthjean/rust-doctor/compare/v0.1.0...v0.1.1
0.1.0Feature
Initial public release of rust-doctor: scan, score, and fix your Rust codebase with one command.
What's in the box
- Unified scanning: 700+ clippy lints with severity overrides and category mapping, plus 18 custom AST rules (via syn) covering error handling, performance, security, async anti-patterns, and framework-specific issues (tokio, axum, actix-web)
- Dependency auditing: CVE detection via cargo-audit, supply-chain policy via cargo-deny, unused dependencies via cargo-machete, unsafe-code metrics via cargo-geiger, API breakage via cargo-semver-checks
- Health score: 0-100 with per-dimension breakdown and the ASCII doctor face
- MCP server: plug into Claude Code, Cursor, or any MCP-compatible agent with
npx rust-doctor --mcp - Diff mode: scan only changed files for fast CI feedback
- Workspace support: scan all crates or select specific members
- Inline suppression:
// rust-doctor-disable-next-line <rule> - Output modes: terminal,
--json,--score, NO_COLOR respected - Library crate: drive rust-doctor programmatically via
lib.rs
Install
- npm:
npm install -g rust-doctor(prebuilt native binary, no Rust toolchain required) - crates.io:
cargo install rust-doctororcargo binstall rust-doctor - Shell installer (Linux/macOS) and PowerShell installer (Windows) attached below
Full Changelog: https://github.com/arthjean/rust-doctor/commits/v0.1.0