{"slug": "show-hn-modvet-vet-your-claude-code-mods-before-you-install-them", "title": "Show HN: ModVet – vet your Claude Code mods before you install them", "summary": "Jörg Michno released ModVet v0.2.2 on PyPI, a zero-dependency Python tool that scans Claude Code mods offline for prompt-injection patterns, dangerous capability combinations and hardcoded secrets before installation. ModVet reports findings with file:line locations and OWASP MCP Top 10 mappings in JSON, SARIF and human-readable output, and its snapshot/diff commands re-audit only the delta after a mod update; on 12 real mod repos from the awesome-claude-code catalog, false positives fell from 1,815 to under 300 findings (−85%) since the v0.1 engine. The tool matters because mods run unsandboxed inside the agent process with the user's full permissions, and ModVet's deterministic, no-LLM approach contrasts with cloud-based scanners such as Snyk's MCP/Skills scan.", "body_md": "**Vet your Claude Code mods before you install them — deterministic, offline, in milliseconds.**\n\nMods 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.\n\n```\nmodvet scan ./my-mod                    # Pre-Install-Check (human output)\nmodvet scan ./my-mod --json             # machine-readable report\nmodvet scan ./my-mod --format sarif     # GitHub Code Scanning kompatibel\nmodvet badge --input report.json        # Status-Badge als SVG\nmodvet snapshot ./my-mod                # Baseline nach sauberer Installation\nmodvet diff ./my-mod --against .modvet-snapshot.json   # \"The update is the attack\"\n```\n\nExit codes: `0` clean · `1` findings ≥ `--fail-on` (default HIGH) · `2` usage error.\n\n```\npip install modvet\n```\n\nRequires Python ≥ 3.9, zero dependencies. Development: `uv pip install -e .`\n\n- **Prompt Injection / Instruction Override** (EN + DE, ~400 deterministische Pattern inkl. Homoglyph-/Leet-/Base64-/Zero-Width-/Reverse-Normalisierung)\n- **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.\n- **Mod-spezifische Detektoren (v0.2):** Prompt-Compose-Rewrite, PreToolUse-Argument-Rewrite, Update-Delta-Trojan.\n- **OWASP MCP Top 10 Mapping:** jedes Finding trägt seine MCP01–MCP10-Referenz (JSON-Feld`owasp_mcp` ).\n- **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\".\n\n|  | **ModVet** | Snyk (MCP/Skills-Scan) | mcp-triage | \n|---|---|---|---|\n| Fokus | Claude-Code-Mods (+ Skills) | MCP-Server/Skills, breites DevSecOps | MCP-Server-Review | \n| Betrieb | **lokal & offline** , 0 €, kein Konto | Cloud-Konto, SaaS-Pricing | lokal/Repos | \n| Verfahren | deterministisch, keine LLM-Entscheidungen | Hybrid (inkl. proprietäre Analyse) | Review-basiert | \n| Update-Delta | **`snapshot`/` diff` re-auditiert nur Deltas** | Neuer Voll-Scan je Version | — | \n| OWASP-Mapping | MCP Top 10 im Finding-Feld | vorhanden | — | \n| Output | JSON, SARIF, Badge-SVG | SaaS-UI/API | Markdown | \n| Transparenz | jede Regel im Open Source einsehbar | teilweise proprietär | Open Source | \n\n12 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`.\n\nv0.2.2 — live on PyPI (`pip install modvet`). Phase 2 (Outputs/Verteilung) abgeschlossen: SARIF, Badge, OWASP-Mapping. Nächste Schritte: SKILL.md-/MCP-Scanning (Fast-Follow), Pro-/Audit-Angebot nach Traktion.\n\n(C) 2026 Jörg Michno. Engine portiert aus ClawGuard v0.5.0.", "url": "https://wpnews.pro/news/show-hn-modvet-vet-your-claude-code-mods-before-you-install-them", "canonical_source": "https://github.com/joergmichno/modvet", "published_at": "2026-10-20 11:33:06+00:00", "updated_at": "2026-10-20 11:47:00.762528+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "ai-safety", "developer-tools", "ai-products"], "entities": ["ModVet", "Jörg Michno", "Claude Code", "PyPI", "Snyk", "mcp-triage", "ClawGuard", "OWASP MCP Top 10"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-modvet-vet-your-claude-code-mods-before-you-install-them", "markdown": "https://wpnews.pro/news/show-hn-modvet-vet-your-claude-code-mods-before-you-install-them.md", "text": "https://wpnews.pro/news/show-hn-modvet-vet-your-claude-code-mods-before-you-install-them.txt", "jsonld": "https://wpnews.pro/news/show-hn-modvet-vet-your-claude-code-mods-before-you-install-them.jsonld"}}