scrutin
A Unified Dashboard and Orchestrator for Quality Checks¶
Unit tests · Data validation · Linting · Spelling
Run every quality check on your project using a single command: unit tests, data validation, linters, spell checkers. Scrutin watches for edits, figures out which checks are affected, and re-runs them in parallel. Drill into a failure to see the expected and actual values, as well as the relevant source code. Use quick keystrokes to fix linting and spelling issues, or to open files in your editor of choice. Hand any failure off to an AI coding agent with a single keystroke: Scrutin ships its own Agent Skill and is built for non-interactive use by agents too.
See everything in one place¶
Pick where to see your results: a live terminal UI, a browser dashboard, or embedded inside your editor (VS Code, Positron, or RStudio). Scrutin can also emit JUnit XML for CI platforms, GitHub Actions annotations for pull-request comments, or plain text for shell pipelines.
Tools¶
-
Unit tests
Run your test suites in isolated workers with live result streaming. Supports pytest, testthat, and tinytest.
-
Data validation
Data quality checks run alongside code quality checks with the same outcome taxonomy (pass/fail/warn/skip/error) and rerun logic. Supports pointblank (R), validate (R), and Great Expectations (Python).
-
Linters
Lint diagnostics map to warnings in the same dashboard; fix actions appear as numbered chips in the Detail view so
1,2,3invokes them directly. Supports jarl (R) and ruff (Python). -
Spell checks
Prose, docs, and comments go through the same engine. Misspellings render with ranked suggestions as chips: press
1-9to replace or0to add the word to a committable project dictionary. Supports skyspell and typos.
Fast, focused, and flexible¶
Re-run only what changed. Scrutin watches your project for file changes and uses dependency mapping to figure out which checks are affected. Edit a source file, and only the tests that depend on it re-run.
Parallel execution. Within each tool, files run concurrently across isolated workers; one crash never takes down the rest. Opt in to automatic retries (run.reruns) and failing-but-passes-on-retry files get flagged as flaky.
Any mix of tools, side by side. Test and data-validation tools auto-detect from marker files (DESCRIPTION, pyproject.toml, ...) the moment you run Scrutin. Linters and spell checkers opt in through a one-line [[suite]] entry. Every active tool streams into the same dashboard.
In the terminal or in your favorite editor¶
Ship it!¶
-
Easy to install
Install a single binary. Works on macOS, Linux, and Windows. The tools Scrutin orchestrates are installed separately, through whatever package manager they normally ship with.
-
Continuous integration
JUnit XML output for CI platforms. Exit code 0 or 1 for scripts. GitHub Actions annotations for inline comments on pull requests.
-
Run history
Every run is saved to a local SQLite database. Track flaky tests, spot regressions, and compare run times across commits.
Etymology¶
Scrutin is French for a ballot or vote: polling individual verdicts into a collective result, much like this tool polls tests, expectations, linters, and validators. It comes from the Latin scrutinium (a careful examination), from scrutari, "to sift through the rubbish pile".



