ModVet
Vet your Claude Code mods before you install them — deterministic, offline, in milliseconds.
Mods run unsandboxed inside the agent process with your full permissions. ModVet scans a mod directory for prompt-injection patterns, dangerous capabilities (shell exec, exfiltration, env/file access, permission-lift hooks, update trojans) and hardcoded secrets — no cloud, no LLM, no account. Findings with file:line, OWASP MCP Top 10 mapping, JSON/SARIF/human output, CI-ready exit codes.
modvet scan ./my-mod # Pre-Install-Check (human output)
modvet scan ./my-mod --json # machine-readable report
modvet scan ./my-mod --format sarif # GitHub Code Scanning kompatibel
modvet badge --input report.json # Status-Badge als SVG
modvet snapshot ./my-mod # Baseline nach sauberer Installation
modvet diff ./my-mod --against .modvet-snapshot.json # "The update is the attack"
Exit codes: 0 clean · 1 findings ≥ --fail-on (default HIGH) · 2 usage error.
Install (dev)
uv pip install -e .
# oder: python -m modvet.cli scan ./some-mod
What it checks
- Prompt Injection / Instruction Override (EN + DE, ~400 deterministische Pattern inkl. Homoglyph-/Leet-/Base64-/Zero-Width-/Reverse-Normalisierung)
- Capability-Kombinationslogik: Einzel-Capabilities (fetch, process.env, fs) sind normale Mod-Arbeit — erst KOMBINATIONEN im selben Ausdruck (Env-Read + POST, Exec + Fetch) werden gemeldet. Plus Angriffsprimitive: Shell-Pipe-Downloads, Base64-Exec, Reverse Shells, Hook-Permission-Lift, Config-Rewrite, Committed-Env-Files, npm-Lifecycle-Skripte.
- Mod-spezifische Detektoren (v0.2): Prompt-Compose-Rewrite, PreToolUse-Argument-Rewrite, Update-Delta-Trojan.
- OWASP MCP Top 10 Mapping: jedes Finding trägt seine MCP01–MCP10-Referenz (JSON-Feld
owasp_mcp). - Update-Drift:
snapshot+diff— re-audits nur das Delta nach jedem Mod-Update. Der Update-Mechanismus selbst ist ein Angriffspfad: „the update is the attack".
Vergleichstabelle (Stand 10/2026)
| ModVet | Snyk (MCP/Skills-Scan) | mcp-triage | |
|---|---|---|---|
| Fokus | Claude-Code-Mods (+ Skills) | MCP-Server/Skills, breites DevSecOps | MCP-Server-Review |
| Betrieb | lokal & offline, 0 €, kein Konto | Cloud-Konto, SaaS-Pricing | lokal/Repos |
| Verfahren | deterministisch, keine LLM-Entscheidungen | Hybrid (inkl. proprietäre Analyse) | Review-basiert |
| Update-Delta | snapshot/diff re-auditiert nur Deltas |
Neuer Voll-Scan je Version | — |
| OWASP-Mapping | MCP Top 10 im Finding-Feld | vorhanden | — |
| Output | JSON, SARIF, Badge-SVG | SaaS-UI/API | Markdown |
| Transparenz | jede Regel im Open Source einsehbar | teilweise proprietär | Open Source |
Benchmark
12 echte Mod-Repos (awesome-claude-code-Katalog): FP-Reduktion von 1.815 auf <300 Findings (−85 %) seit der v0.1-Engine — Details in specs/benchmark-results.md und specs/pattern-audit.md.
Status
v0.2 — Phase 1 abgeschlossen (FP-Reduktion, Kontext-Engine), Phase 2 (Outputs/Verteilung) im Bau. PyPI-Publish folgt auf Jörg-GO.
(C) 2026 Jörg Michno. Engine portiert aus ClawGuard v0.5.0.
Metadata
Release files for modvet 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| modvet-0.2.0.tar.gz | 77.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| modvet-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 142.8 kB
Release files / modvet-0.2.0.tar.gz
| Download URL | modvet-0.2.0.tar.gz |
|---|---|
| Size | 77.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
376777d9d3fcf237b20e5d91d032175646e967230d1e88d496257cc0e5fe0fd5
|
|
BLAKE2b-256 checksum How to use checksums |
0e6cd02e901c4912c2416a8b707353ac6fed766fda61181c8578c2e607007293
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|
Release files / modvet-0.2.0-py3-none-any.whl
| Download URL | modvet-0.2.0-py3-none-any.whl |
|---|---|
| Size | 65.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8ca0064b755c43aea84bfa020f2420f428fc62ef0d7bf64882e730ffbab102c5
|
|
BLAKE2b-256 checksum How to use checksums |
8179d90dd30566c3834cd5de9c9d7ce139429bfba778970b125b587b1a6091f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|