Skip to main content

Coverage-driven review gauntlet for agentic code reviews

Project description

Review Gauntlet

Coverage-driven review orchestration for agentic code reviews.

The goal is not to pretend an LLM can guarantee bug-free code. The goal is to guarantee that a defined review surface was inspected, with evidence, before a project is called reviewed.

Commands

uv sync
make check

Run the published CLI without installing it permanently:

uvx review-gauntlet --help

Install the local CLI as the canonical review-gauntlet command when you want to run it outside uv run:

make install
review-gauntlet --help

Shell completion

The installed review-gauntlet command can generate completion scripts for common interactive shells. Evaluate the script for the current session, or write it to the location your shell startup files load.

Bash:

source <(review-gauntlet completion bash)

Zsh:

review-gauntlet completion zsh > "${fpath[1]}/_review-gauntlet"
autoload -Uz compinit && compinit

Fish:

review-gauntlet completion fish > ~/.config/fish/completions/review-gauntlet.fish

Start normal use by initializing a review session, then run exactly one review step with a configured external CLI adapter:

uv run review-gauntlet init
uv run review-gauntlet review --config review-gauntlet.jsonc

Target selection happens on init; review only advances the active session once. A bare init now uses .review-gauntlet/checkpoints/latest/status.json when a complete usable checkpoint exists, reviewing from its review_base_commit to HEAD. If no checkpoint exists, bare init reviews all eligible files. Scripts that need the previous workspace-diff default must pass --worktree explicitly. OCR-compatible target mappings are:

# Default review: latest finalized checkpoint -> HEAD, or all files for first review.
uv run review-gauntlet init

# OCR workspace diff review: staged, unstaged, and untracked non-ignored files.
uv run review-gauntlet init --worktree

# OCR branch/range review: files changed between two refs.
uv run review-gauntlet init --from main --to HEAD

# OCR single-commit review: files changed by one commit.
uv run review-gauntlet init --commit <commit-oid>

# review-gauntlet-only full repository review: every eligible inventory file.
uv run review-gauntlet init --all

# Execute exactly one review step for the initialized session.
uv run review-gauntlet review --config review-gauntlet.jsonc

# Select at most 20 cells for this run and execute up to 4 adapter calls at once.
uv run review-gauntlet review --budget 20 --concurrency 4

After a review step, inspect session state and findings, optionally record human finding decisions, and finalize only when both coverage and findings are closed:

uv run review-gauntlet status
uv run review-gauntlet findings
uv run review-gauntlet mark <finding-id> fixed --reason "fixed in follow-up"
uv run review-gauntlet verify-fixes --config review-gauntlet.jsonc
uv run review-gauntlet finalize
# Finalize writes Git-reviewable JSON/Markdown snapshots atomically.
git add .review-gauntlet/checkpoints/latest

Successful finalize requires both coverage and live findings to be closed and review-universe files to match HEAD; dirty tracked, staged, unstaged, or untracked eligible files block checkpoint creation. It writes .review-gauntlet/checkpoints/latest/status.json, findings.json, events.json, and summary.md, then clears the active session so the next command is review-gauntlet init. There is intentionally no separate checkpoint command.

review --concurrency defaults to 8 and must be a positive integer. --budget still caps the total cells selected for one review run; --concurrency only limits how many of those selected adapter invocations run at the same time. It does not automatically pass a concurrency flag through to the nested external adapter command.

Diagnostic and legacy planning commands

The inventory, plan, and report commands remain available for compatibility and inspection. Use them to inspect file discovery, review slicing, and report rendering; they are not the normal day-to-day review lifecycle.

Inspect the current repository inventory and classification:

uv run review-gauntlet inventory

Inspect the legacy review plan with slices and required checks:

uv run review-gauntlet plan

Render the legacy markdown matrix report:

uv run review-gauntlet report

Default file filtering

Inventory discovery keeps Git behavior intact: Git-backed repositories still use git ls-files --cached --others --exclude-standard with the existing bounded subprocess timeout, so .gitignore and other exclude-standard rules apply before review-gauntlet's built-in filters.

The built-in artifact filter removes generated or dependency paths from both full inventory and target-scoped inventory. This includes Python/editor/cache outputs such as .review-gauntlet/, __pycache__/, .ruff_cache/, build/, dist/, wheels/, htmlcov/, and OCR-inspired dependency/build staging paths such as vendor/, node_modules/, target/, .happypack/, .cachefile/, _packages/, rpm/, pkgs/, and oh_modules/.

Review sessions apply an additional default review-path filter when creating cells and digests. Files can remain classifiable in general inventory, but init omits openspec/, tests/, and docs/ by default, as well as common OCR-style test or generated paths such as __tests__/, *_test.go, *Test.java, *Test.kt, *.spec.ts, *.test.tsx, test_*.py, *_spec.rb, *.spec.ets, and *.test.ets. Review cells and target digests also omit common package manifests and lock files such as uv.lock, poetry.lock, requirements*.txt, package.json, package-lock.json, yarn.lock, pnpm-lock.yaml, Cargo.toml, Cargo.lock, go.mod, go.sum, pom.xml, Gemfile.lock, composer.lock, Package.resolved, pubspec.lock, mix.lock, vcpkg.json, flake.lock, stack.yaml.lock, Manifest.toml, and renv.lock. These package files are not removed from general inventory unless another artifact or Git ignore rule excludes them. Normal source files and package-adjacent executable logic files such as setup.py, build.gradle, mix.exs, and build.zig remain eligible for review cells.

review discovers configuration in this order: explicit --config, .review-gauntlet/config.jsonc, .review-gauntlet/config.json, review-gauntlet.jsonc, review-gauntlet.json, $XDG_CONFIG_HOME/review-gauntlet/config.jsonc, then $XDG_CONFIG_HOME/review-gauntlet/config.json. When XDG_CONFIG_HOME is unset or empty, the global fallback base is ~/.config, so the JSONC fallback path is ~/.config/review-gauntlet/config.jsonc. Repository-local configuration always wins over global XDG configuration, and discovery only reads existing files; it never creates global config directories or files. The command adapter uses argv arrays and never shell strings; provider login, model choice, and secrets stay inside the external CLI configuration.

Minimal JSONC configuration for opencode file-json verdicts:

{
  "adapter": {
    "type": "command",
    "command": "opencode",
    "args": ["run", "--dangerously-skip-permissions", "{prompt}"],
    "output": {"mode": "file-json", "path": "{output_file}"}
  }
}

The generated OCR prompt is expanded into {prompt} as one argv element. Prompt artifacts are still written for audit evidence, but prompt-file transport is not part of the command adapter contract. cwd, env, and timeout_seconds are optional escape hatches: omitted cwd inherits the caller's current working directory, omitted env inherits the parent environment without fixed automatic variables, explicit env values override that inherited environment, and omitted timeout_seconds defaults to 600 seconds.

The verdict must be JSON with OCR-style comments:

{"comments":[{"path":"src/app.py","content":"Issue","start_line":1,"end_line":1}]}

Supported template variables include {repo_root}, {state_dir}, {run_id}, {run_dir}, {cell_id}, {cell_dir}, {prompt}, {output_file}, {file_path}, and {rule_id}.

Developer Workflow

make format
make lint
make typecheck
make test
make coverage

Design

Review Gauntlet treats review as a stateful coverage workflow:

  • initialize a session from an explicit target set
  • classify eligible files into review slices and coverage cells
  • run exactly one review step at a time through an external command adapter
  • record prompts, outputs, findings, and coverage state as audit evidence
  • finalize only after required coverage and live findings are closed

External review tools are integrated through the command adapter rather than hard-coded runners. The adapter accepts argv arrays, expands review artifacts into safe template variables, and supports JSON verdicts written to stdout or files so CLIs such as opencode, Codex-style tools, static analyzers, or custom wrappers can participate without review-gauntlet owning provider login or secret management.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

review_gauntlet-0.1.0.tar.gz (39.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

review_gauntlet-0.1.0-py3-none-any.whl (52.8 kB view details)

Uploaded Python 3

File details

Details for the file review_gauntlet-0.1.0.tar.gz.

File metadata

  • Download URL: review_gauntlet-0.1.0.tar.gz
  • Upload date:
  • Size: 39.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for review_gauntlet-0.1.0.tar.gz
Algorithm Hash digest
SHA256 13bb2b3d5a38e3fab2296e5f04e49ad709f78233cd1e0410bf1a7f412425d1bd
MD5 321c10fd631f89d3a9ae5cc87376d94c
BLAKE2b-256 d894309a74ef6bcbb2d252c2c181406524dd78b81bbf04bc369f45a69a36f23f

See more details on using hashes here.

File details

Details for the file review_gauntlet-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: review_gauntlet-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 52.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for review_gauntlet-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2be3109ab395b87a1a9641fa872ad29bc13e6634da8b2e335bf75056a040faca
MD5 2091d4a0a7d33c4ac8d97651a08347da
BLAKE2b-256 b1a18cbf00e0ea4bfd31d25bf438994d60062729040993945f2b4ec8dc0fd2e2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page