# Kaniscope > A self-hosted AI pull-request reviewer. One static binary, no runtime. It reads a pull request, posts inline comments anchored to the exact lines and, when one is safe to suggest, a fix that can be committed from the PR. Reviews GitHub, GitLab and Bitbucket. Engine: pr-review-core v0.40.0, MIT / Apache-2.0. Kaniscope is advisory: it comments, and never blocks a merge, pushes a commit, or approves on your behalf. It is self-hosted by default — the diff goes to the model endpoint you configure (OpenRouter, Ollama, vLLM, or anything OpenAI-compatible) and to no server of ours. There are no seats; you pay your model provider for tokens. ## Pages - [Home](https://kaniscope.nvnv.app/): what it does, how to install it, and what a review looks like. - [Evidence](https://kaniscope.nvnv.app/evidence): the graded scoreboard — 59 confirmed findings, 14 false positives, 81% precision over 37 human-graded rounds, and why there is no recall figure. - [Compare](https://kaniscope.nvnv.app/compare): an honest comparison with CodeRabbit, including what they do that Kaniscope does not, and the per-seat versus per-review arithmetic. - [Playground](https://kaniscope.nvnv.app/playground): paste a diff or a GitHub PR URL and get a review. ## Install - npm: `npm install -g kaniscope` - pip: `pip install kaniscope` - cargo: `cargo install pr-review-core --features cli` - GitHub Actions: `uses: nhatvu148/kaniscope-action@v1` ## Use it from an agent - MCP: `kaniscope mcp` serves seven tools over stdio — `review_local`, `review_pr`, `review_file`, `get_rules`, `get_findings`, `resolve_findings`, `explain_finding`. They are read-only: nothing is posted or edited, and `resolve_findings` only packages findings for an agent to investigate — it does not resolve PR threads. Configure it per project, in `.mcp.json`: `{"mcpServers": {"kaniscope": {"command": "kaniscope", "args": ["mcp"]}}}`. The review tools use your model key (`OPENROUTER_API_KEY`) or, with no key set and a client that supports MCP sampling, the calling agent's own model; `get_rules`, `get_findings` and `resolve_findings` make no model call. - JSON: every subcommand except `mcp` (`kaniscope review-local`, `review-pr`, …) prints one JSON document on stdout by default (`review-local`, `review-pr` and `review-file` take `--human` for the readable block instead), diagnostics on stderr. `kaniscope schema ` prints its JSON Schema. The flat PR mode takes `--json` for the same. - CI gate: `--fail-on advisories` exits 3 when the PR adds a dependency version with a known advisory, and 1 when the scan could not verify; the review still prints and posts. A local review runs no dependency scan, so the gate is refused with `--local`. ## Known limitations - No memory between reviews; per-repo rules live in a `.prbot.toml`. - Reviews the diff, not the whole repository. No continuous security monitoring, and the CVE scan does not check whether a vulnerable dependency path is reachable. - No Jira, Linear or Slack integrations, and no SSO, RBAC, audit logging or SLA. - Recall is unmeasured. A previously published figure turned out to be an artefact and was withdrawn rather than restated. ## Source - Engine: https://github.com/nhatvu148/pr-review-core - Crate: https://crates.io/crates/pr-review-core