AI-native code review skill — deterministic analyzer layer
Project description
polyreview
Deterministic code-review skill: runs Semgrep, Radon, Bandit and friends across a diff and emits consolidated SARIF + per-finding sdlc_severity.
Status
Alpha. No API stability guarantees before 1.0. Expect breaking changes to CLI flags, config schema, and SARIF property names. The canonical version lives in pyproject.toml; check the installed version with polyreview --version once the flag lands or python -c "import code_review; print(code_review.__version__)".
Renamed from claude-code-review. Early development used the working name claude-code-review; the PyPI distribution is polyreview (it was renamed before its first release, so there is no claude-code-review package to migrate from). The rename drops the vendor prefix because the tool is agent-agnostic — its Agent Skill bundle is read by GitHub Copilot, Cursor, Codex, and other agents, not just Claude — and polyreview reads as a multi-language, multi-tool reviewer rather than an Anthropic-only one. The Python import name stays code_review.
Install
pip install polyreview
pipx install polyreview
uv tool install polyreview
The PyPI distribution and console-script binary are both polyreview; the Python import name stays code_review (PEP-423 allows the distribution name to differ from the import name).
0.1.0is the first GA release to PyPI. It was staged as0.1.0rc1on TestPyPI first; seesdlc/docs/runbooks/release.mdfor the release process.
Analyzer prerequisites
pip install polyreview ships the Python analyzers — Semgrep, Bandit, Radon, Vulture, pydeps, cohesion, Schemathesis — ready to run. The other analyzers depend on external tooling that pip can't bundle:
- JavaScript/TypeScript (ESLint, knip, jscpd, dependency-cruiser) need a vendored
node_modules. - Secret & dependency scanning (gitleaks, Trivy) are standalone binaries that must be on your
PATH.
Run polyreview run --capabilities and read analyzers[] to see which are active: each reports status: available or unavailable with the reason. To provision the full set from a source checkout, run ./scripts/setup.sh (Node tooling + offline caches) and install gitleaks/Trivy via your package manager. Analyzers that aren't available are skipped silently — so a finding-free run on a stack you expected coverage for may just mean the analyzer wasn't installed.
Use as an Agent Skill
polyreview is also an Agent Skill bundle: agents (Claude Code, Codex, GitHub Copilot, Gemini CLI, …) discover it from their user-level skills directory. After installing the package, place the bundle where your agents look — polyreview install is agent-independent, idempotent, and creates missing directories:
polyreview install # neutral ~/.agents/skills/ + every agent home present
polyreview install --agent claude # one target: agents | claude | copilot | gemini
polyreview install --all # every known agent location
polyreview install --force # refresh an already-installed bundle in place
Install places the skill (SKILL.md, the config example, the vendored Semgrep rules) for discovery; it does not fetch the analyzer caches (node_modules, Trivy DB) — run ./scripts/setup.sh for the full toolchain. Remove it with the same target scoping:
polyreview uninstall # mirrors install's default + --agent/--all scoping
Uninstall is marker-guarded: it removes only a directory that is verifiably the polyreview bundle, and never touches a sibling skill, an agent's own files (e.g. Claude's agents/reviewer.md), or the skills directory itself.
Quick start
polyreview run --review security --depth quick --diff HEAD~1..HEAD --output review.json
Returns a SARIF document at review.json containing findings from every analyzer in the security/quick set, each annotated with an sdlc_severity reflecting how the SDLC treats it (Critical / Important / Minor / Nit).
What it does
- Deterministic analyzer layer — Semgrep, Bandit, Radon, and other rule-based scanners.
- Emits SARIF with an
sdlc_severityextension so downstream tools can gate on real severity, not analyzer-native rankings. - Runs under
/sandbox— analyzers are isolated from the host filesystem and network.
What it doesn't do
- LLM-based code review — that's the sibling
intent-reviewproject. - Cross-skill aggregation — one diff, one analyzer set, one SARIF.
- CI orchestration — invoke it from your existing pipeline; it doesn't replace one.
Full reference
Complete review-set taxonomy, CLI resolution rules, and configuration knobs: .claude/skills/code-review/SKILL.md.
Development
git clone https://github.com/jiludvik2/agentic-skills
cd agentic-skills/code-review
./scripts/setup.sh
uv run pytest
License
MIT.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file polyreview-0.1.0.tar.gz.
File metadata
- Download URL: polyreview-0.1.0.tar.gz
- Upload date:
- Size: 552.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d180993a3e97b806936e5e5567f20092ede9215446e483ce74218545cfcbe69
|
|
| MD5 |
fea340f1efa519d61de272b06e8cb19c
|
|
| BLAKE2b-256 |
1dd3c0b8df6c28031c3119e222a4a7f829ccdb6dd36196481b539b92e6b543b7
|
Provenance
The following attestation bundles were made for polyreview-0.1.0.tar.gz:
Publisher:
release.yml on jiludvik2/agentic-skills
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
polyreview-0.1.0.tar.gz -
Subject digest:
6d180993a3e97b806936e5e5567f20092ede9215446e483ce74218545cfcbe69 - Sigstore transparency entry: 1675521300
- Sigstore integration time:
-
Permalink:
jiludvik2/agentic-skills@f8e29211a37d80fa6e926859ae8ae374781bd8fb -
Branch / Tag:
refs/tags/code-review-v0.1.0 - Owner: https://github.com/jiludvik2
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f8e29211a37d80fa6e926859ae8ae374781bd8fb -
Trigger Event:
push
-
Statement type:
File details
Details for the file polyreview-0.1.0-py3-none-any.whl.
File metadata
- Download URL: polyreview-0.1.0-py3-none-any.whl
- Upload date:
- Size: 125.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a5bea95a9accf08a73e1c3394c9d4287dd82f5f92134749b59d0ecf3dac06319
|
|
| MD5 |
7e337bd7c2609d61bf9056407e97a4c2
|
|
| BLAKE2b-256 |
6cd6c240d64416971acf24ffefe3a540e4b6e445dcc620ac0fc0ef12dbd4018f
|
Provenance
The following attestation bundles were made for polyreview-0.1.0-py3-none-any.whl:
Publisher:
release.yml on jiludvik2/agentic-skills
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
polyreview-0.1.0-py3-none-any.whl -
Subject digest:
a5bea95a9accf08a73e1c3394c9d4287dd82f5f92134749b59d0ecf3dac06319 - Sigstore transparency entry: 1675521316
- Sigstore integration time:
-
Permalink:
jiludvik2/agentic-skills@f8e29211a37d80fa6e926859ae8ae374781bd8fb -
Branch / Tag:
refs/tags/code-review-v0.1.0 - Owner: https://github.com/jiludvik2
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f8e29211a37d80fa6e926859ae8ae374781bd8fb -
Trigger Event:
push
-
Statement type: