One deterministic quality loop for every Python PR.
Standardize lint, typecheck, test, coverage, mutation, deps,
architecture, and audit across local edits, hooks, and CI. Stronger evidence
for human- and AI-authored code.
Dispatches every gate through uvx or
uv run --with at pinned versions, so the tool environment
stays isolated from your project resolver.
pipx install interlocks is also supported.
“One command tells every repo where the quality bar is.”
Human review cannot be the quality floor when teams and agents ship code fast.
Deterministic gates catch fake confidence before it reaches CI or customers.
Proof in the terminal
No dashboard fiction. The product surface is the pass/fail
output every repo sees.
local run
il check7.4sPASS
$ il checkinterlocks v0.2.1 · preset=baseline · runner=pytest · invoker=uv── Quality Checks ────────────────────────────────────────── [fix] ruff check --fix ok [format] ruff format ok(2 files reformatted)── Parallel ──────────────────────────────────────────────── [typecheck] basedpyright 0 errors, 0 warnings [test] pytest -q 184 passed in 3.2scoverage 87.4%── Advisory ──────────────────────────────────────────────── [deps] deptry ok [crap] cached (crap_max=30.0) ok · 0 offenders── Suppressions ──────────────────────────────────────────── ruff : noqa 0 basedpyright : ignore 1 interlocks/runner.py:42 pytest.skip 2Completed in 7.4s
failure example
il gate coverage --min=85FAIL
$ il gate coverage --min=85coverage 79.2% < required 85%next: inspect uncovered files$ il trust --refresh --verbose
Operate as an agent
Every workflow command emits machine-readable JSON.
interlocks {check,ci,evaluate,trust,doctor,config} --json writes
one JSON object to stdout. Exit codes are unchanged, and --json
dominates --verbose.
Evaluate first with doctor, then
check.
Adopt permanently with setup only after the gate proves useful; CI and
nightly keep the same evidence running after merge.
After edits
il check
LOCALFAST GATE
Default local loop after file changes.
fix + format
typecheck + test in parallel
deps, cached CRAP, suppressions report
--changed scopes file-level gates to the diff; test,
acceptance, and properties skip with a banner
Before commit
il hook pre-commit
HOOKBLOCKING
Runs on staged changes through git hook.
fix + format staged Python
re-stage formatted files
typecheck + tests when source changed
Pull request
il ci
CIBLOCKING
Required PR gate for repo-wide verification.
lint + format check
complexity, audit, deps, typecheck
coverage, CRAP, arch, acceptance
Scheduled trust
il nightly
CRONSLOW GATE
Long-running confidence check for tests.
coverage first
mutation via mutmut
blocks on mutation_min_score
Setup + maintenance
il setup / il clean
SETUPUTILITY
Wire feedback loops and reset generated state.
install git pre-commit hook
merge Claude Code Stop hook
remove caches, build artifacts, coverage, mutation state
What gets verified
Commands stay small. Stages compose them into local, hook,
CI, and scheduled gates.