repovet reads a GitHub repository or a local folder as plain data and shows what could
run on your machine or steer your AI agent before you open, install or hand it over – it
never runs anything from it. To check changes later, repovet diff compares two
revisions and fails only on new or worse findings, so it can run in CI
(setup).
Why it matters
- Opening it in an editor can run code: VS Code tasks on folder open, dev containers, workspace settings.
- Installing or building it can run code: npm
postinstall,setup.py, build hooks, Makefiles, Git hooks. - Letting an AI agent read it can act on instructions hidden in
CLAUDE.md,AGENTS.mdor rule files.
Quick start
pipx install repovet # own environment, Python 3.12+
pip install repovet # or into the current environment
uv tool install repovet # no Python yet: uv fetches one
Then check a repository (or run repovet alone for a menu):
repovet scan https://github.com/m3xXmo0/repovet-demo
Real output (excerpt) for the demo repository, which is harmless but built on purpose to trigger findings, so the high findings are expected:
repovet 0.5.1 | GitHub repository https://github.com/m3xXmo0/repovet-demo @ main (088b45582bfa) | offline | 16 files | 141 rules
+- SUMMARY -------------------------------------------------------------------+
| Do not install its dependencies or run its install scripts; do not let an |
| AI coding agent work in it until you have read the findings below. |
| |
| 0 critical | 9 high | 5 medium | 1 low | 2 info |
| |
| Look at these first |
| 1. HIGH RC-AGENT-002 AGENTS.md:8 |
| Hidden Unicode tag characters in an AI agent file |
| 2. HIGH RC-BIN-002 assets/logo.png |
| Executable disguised as a document, image or text file |
| 3. HIGH RC-AUTO-016 pyhelper/quicknote.pth:1 |
| .pth file with code |
+-----------------------------------------------------------------------------+
Evidence, in short
These are small gap lists that show where repovet is blind, not detection rates. The reconstructions and variants were built alongside the rules, so they show what the rules are built for, not how well they generalize. The external sets and the benchmark were measured with repovet 0.5.0; the reconstructions are scanned again on every test run.
- Sealed blind list (30 attack variants and 30 harmless cases, sealed before the first evaluation): 13 rated as expected, 2 detected lower or in another area, 15 of 30 missed; 25 of 30 harmless cases stay below medium.
- Older holdout (42 bypass variants and 24 harmless look-alikes written by a third party; partly independent since 0.4.1): 13 rated as expected, 13 detected lower or in another area, 16 missed; 23 of 24 look-alikes stay below medium.
- 16 of 16 reconstructions of documented attacks detected, and 60 of 64 hand-written evasion variants of them.
- 3 of 38 scanned most-starred GitHub repositories had a high or critical finding. These are popular, presumably harmless projects, so every high or critical hit there is a false alarm or worth a manual look.
In every report, read "Not checked" first. Details: docs/evidence.md.
Scope
repovet checks what a repository can do to you before you run it, and how it declares its dependencies: whether a package name is plausible and where a package comes from. It does not check whether a pinned version has known vulnerabilities; for that, use pip-audit, npm audit or OSV-Scanner. The analysis is offline because of this scope: checking a repository must not run anything from it or send anything about it elsewhere. repovet never calls a repository safe; it reports what its rules detect and lists under "Not checked" what it could not look at.
Documentation
- Using repovet: step-by-step start, installation, all options, menu,
clone,diff, CI - Reports and exit codes: sample output, text, HTML, JSON, SARIF
- What is checked and every rule
- Scope and limits: what is not checked
- Trust (GitHub API) · Comparing commits
- Evidence · Security model · FAQ
- Development · Changelog · Security policy
License
MIT, see LICENSE. Copyright (c) 2026 m3xXmo0.
repovet ships two lists of package names as data (see src/repovet/data/SOURCES.md): the
most downloaded PyPI projects from "top-pypi-packages" by Hugo van Kemenade (CC BY 4.0),
and the most downloaded npm packages from npm-high-impact by Titus Wormer (MIT).
Metadata
Release files for repovet 0.5.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| repovet-0.5.2.tar.gz | 1.8 MB | With provenance | Details for repovet-0.5.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| repovet-0.5.2-py3-none-any.whl | Python 3 | none | any | Details for repovet-0.5.2-py3-none-any.whl |
Total release size: 2.3 MB
Release files / repovet-0.5.2.tar.gz
| Download URL | repovet-0.5.2.tar.gz |
|---|---|
| Size | 1.8 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f26cfd83a496a4fe010969a20eda74d965378280b1b109f0c015261afafa8cfd
|
|
BLAKE2b-256 checksum How to use checksums |
db0ff85fdeac783e3647b808d9e844edceabebd1051ae967deb7d70f75a9bc1b
|
| 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 Nov 2, 2026.
Transparency logRelease files / repovet-0.5.2-py3-none-any.whl
| Download URL | repovet-0.5.2-py3-none-any.whl |
|---|---|
| Size | 446.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d0a63e2a03fd9644b1898ac43755ee7fe6c587eb84ceca0566dc32685dda2a48
|
|
BLAKE2b-256 checksum How to use checksums |
251b260f760663c33fe2b1f7b459978981489340f0ccafce05035ed213bee0e8
|
| 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 Nov 2, 2026.
Transparency logSecurity for repovet 0.5.2
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.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for repovet-0.5.2.tar.gz
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 Nov 2, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.