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.1
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.1.tar.gz | 77.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| modvet-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 142.8 kB
Release files / modvet-0.2.1.tar.gz
| Download URL | modvet-0.2.1.tar.gz |
|---|---|
| Size | 77.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
04b2beb9b82c1005b1b25a4510bdeda88f6eae05e0aafb1584b0e5338e61fcb7
|
|
BLAKE2b-256 checksum How to use checksums |
bda2d2ec11c9c1554b1034630584b45b66cd0e194f3b6f52dd6551b916d9ebc6
|
| 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.1-py3-none-any.whl
| Download URL | modvet-0.2.1-py3-none-any.whl |
|---|---|
| Size | 65.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3d4b8963060e6cc8c1b9db21d32dc475a283f46e8d157e9e034d6fb6a36c6873
|
|
BLAKE2b-256 checksum How to use checksums |
f9f184ca6270dce43af1c72d267a9256a832a4a536262570ae70421401d7bf7a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|