Spirolo

Commands

Every subcommand, in one place.

Most commands take the project root as their last argument; impact and flake ingest take --root <root> instead. The root defaults to the current directory. spirolo <command> --help prints the full options.

CommandWhat it does
spirolo checkBuilds the graph once and runs every rule.
spirolo auditOnly the Weak tests rules.
spirolo gateOnly the Merge gate rules.
spirolo hygieneOnly the Unused tests rules.
spirolo flakeOnly the Flaky rules. flake ingest reads runner reports into the run ledger; flake quarantine adds the observed flakes to .spirolo/quarantine.json (nothing is applied to the runner).
spirolo impact <files>The test files a change reaches, ranked, each with its evidence. --print prints them as runner arguments; --hotspots ranks source modules instead.
spirolo explain <rule or id>What a rule claims and its measured status, or one finding by the id the JSON output prints.
spirolo listThe test files and cases the graph can see.
spirolo ratchetRecords today's findings as .spirolo/baseline.json.
spirolo initWrites a commented .spirolorc.jsonc.
spirolo rule-statusThe built-in measurement table, as JSON.
spirolo lspA language server over stdio. See Editor.
spirolo mcpAn MCP server over stdio. See Agents (MCP).

Options of check and the family commands

OptionEffect
--format <format>human (default), json, sarif, agent, markdown or github-annotations.
--agentShort for --format agent: tab-separated rows, no decoration.
--allShow every rule's findings, each section labelled with its tier. With --rule, also lift the display caps.
--rule <rule>Run one rule.
--config <file>Read another config file.
--churn <file>Read churn from a git log --numstat file, or - for stdin.
--proposecheck and hygiene only: add a merge, delete or keep proposal to each Unused tests finding. Nothing is written to your files.
--fail-on-stale-baselineExit non-zero when a quarter or more of the baseline matches nothing.

Exit codes

CodeWhen
0No decided finding at warn or error outside the baseline. With no config every finding is info, so check exits 0.
1A decided finding at warn or error is not in the baseline, or --fail-on-stale-baseline found a quarter or more of the baseline matching nothing.
2The command could not run as asked: a config that does not parse, an error severity on an Unused tests rule, or an unknown --rule.

On this page