kaniscope
AI pull-request reviewer: fetches a PR's diff, reviews it, and posts line-anchored inline comments plus a summary. Works with GitHub, GitLab and Bitbucket.
The wheel carries a native binary, not an extension module — so it is independent of your Python version, needs no compiler, and adds no runtime dependencies. Same arrangement uv and ruff use.
pip install kaniscope # or: uv tool install kaniscope
kaniscope --provider github --repo me/app --pr 12 --dry-run
As a library
Build a bot in Python and drive the engine from it:
from kaniscope import review
out = review(
provider="github",
repo="me/app",
pr=12,
dry_run=True,
env={"OPENROUTER_API_KEY": key, "GH_TOKEN": token, "MODEL": "anthropic/claude-sonnet-5"},
)
print(out["recommendation"], out["findings"], "finding(s)")
for f in out.get("findingsDetail", []):
print(f"{f['severity']} {f['file']}:{f.get('line', '-')} — {f['body']}")
A review takes minutes, so inside a webhook handler use the async form, which also streams the engine's progress:
from kaniscope import review_async
out = await review_async(
provider="github", repo="me/app", pr=12,
on_log=lambda line: log.info(line),
)
Both raise KaniscopeError when the engine exits non-zero, carrying exit_code and the full stderr.
Configuration
Everything beyond these arguments — the model, provider tokens, file globs, confidence floors, bot identity — is engine configuration. Pass it typed:
out = review(
provider="github", repo=repo, pr=pr,
config={"openrouter_model": "anthropic/claude-sonnet-5", "min_confidence": 70, "agentic": True},
)
ReviewConfig is a TypedDict generated from the engine's own spec — every option with its type, default and documentation — so it cannot drift from what the binary actually reads.
env still takes raw strings and is applied after config, so it wins. That is deliberate: it stays the escape hatch for anything the typed layer does not model.
The essentials: OPENROUTER_API_KEY, plus GH_TOKEN / GITLAB_TOKEN / Bitbucket credentials for the provider you use. See the engine README for the full list, and .prbot.toml for per-repo settings.
API
| Function | What it does |
|---|---|
review(**kwargs) |
Review a PR, or a local diff with local=True. |
review_async(**kwargs) |
The same, without blocking the event loop. |
schema() |
The JSON Schema of a review result. No key, no network. |
version() |
The engine version this wheel's binary was built from. |
binary_path() |
Absolute path to the installed binary. |
RunReviewOutput, Finding, InlineComment and Usage are TypedDicts generated from the binary's own --schema, so they cannot drift from what the engine actually emits.
Reviewing without a PR
kaniscope --local --base main # the working tree against a ref
git diff --staged | kaniscope --local # any diff, from anywhere
Through the API, base picks the ref and diff is the stdin form:
review(local=True, base="main")
review(local=True, diff=pathlib.Path("change.patch").read_text())
Same reviewer, same prompts, same anchoring — it just has nowhere to post.
Why a binary and not a pyo3 extension
The engine takes five scalars, reads its configuration from the environment, and returns one JSON document after minutes of network and git work. Binding that through an extension module would buy nothing a pipe does not already give, and would cost a wheel per interpreter ABI plus a second declaration of every wire type. This way there is one artifact per platform, valid for every Python that can install it.
License
MIT OR Apache-2.0. Source: nhatvu148/pr-review-core.
Metadata
Release files for kaniscope 0.32.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| kaniscope-0.32.0-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| kaniscope-0.32.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| kaniscope-0.32.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details |
| kaniscope-0.32.0-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
| kaniscope-0.32.0-py3-none-macosx_10_12_x86_64.whl | Python 3 | none | macOS 10.12+ x86-64 | Details |
Total release size: 23.6 MB
Release files / kaniscope-0.32.0-py3-none-win_amd64.whl
| Download URL | kaniscope-0.32.0-py3-none-win_amd64.whl |
|---|---|
| Size | 4.8 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
60d55390da4d30beca6459adcf6772735c25a173fecd3d812ee7bd7685e7e5c9
|
|
BLAKE2b-256 checksum How to use checksums |
9f2b0f99426e54a11180628997069f96529992b0f2efe4b0ac8fd34951582bea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / kaniscope-0.32.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | kaniscope-0.32.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
c5d4fe0be81bc64d6f0ff92ac1e810fee80b22afaf132bde25db0bc92252c8df
|
|
BLAKE2b-256 checksum How to use checksums |
4a87d10999f0eb3e6b081d2804611c55ac1af5607d73c5320ad47073046d3da6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / kaniscope-0.32.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | kaniscope-0.32.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 4.6 MB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
8ed66b69788b6ead9b71c9de0a84fa54d9730fea26f01886cab58fdc31a7e9c1
|
|
BLAKE2b-256 checksum How to use checksums |
2f58434168f2033adce443bc133cafef6b034160942e41a85f4dbbe29d5de0fc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / kaniscope-0.32.0-py3-none-macosx_11_0_arm64.whl
| Download URL | kaniscope-0.32.0-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 4.6 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0881359afb01e48143a3dbd0d8c0463b70dfba79669ab5e479bd582397e8760f
|
|
BLAKE2b-256 checksum How to use checksums |
2f3b4591d89da923a0f73036d707115b35dc34da969290f68de2782520e5130c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / kaniscope-0.32.0-py3-none-macosx_10_12_x86_64.whl
| Download URL | kaniscope-0.32.0-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.7 MB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
39bdc1dba13aa6cb9b14f39d501fdf974c1af78737e852e6573e9883f9240e4e
|
|
BLAKE2b-256 checksum How to use checksums |
9e58945300f8dbcd8ea5fe25e1ce2596a0241d66260df47420e1e45d70bc8124
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency log