Malware detection engine for agentic skills (SKILL.md)
Project description
Malwar
Static analysis engine purpose-built for detecting malware in agentic AI skill files.
Why
20% of ClawHub's 10,700+ skills are malicious. The ClawHavoc campaign alone trojanized 824+ skills to deliver the AMOS infostealer. These attacks aren't binaries — they're natural language instructions hidden in Markdown files. VirusTotal sees nothing. Code scanners see nothing. Malwar was built to catch them.
How It Works
SKILL.md → Rule Engine → URL Crawler → LLM Analyzer → Threat Intel → Verdict
<50ms 1-5s 2-10s <100ms
| Layer | What it catches |
|---|---|
| Rule Engine | Obfuscated commands, prompt injection, credential exposure, exfiltration patterns (26 rules) |
| URL Crawler | Malicious URLs, domain reputation, redirect chains to C2 infrastructure |
| LLM Analyzer | Social engineering, hidden intent, context-dependent attacks invisible to regex |
| Threat Intel | Known IOCs, campaign attribution, threat actor fingerprints |
Full pipeline details: Architecture
Quick Start
pip install malwar
malwar db init
For development:
git clone https://github.com/Ap6pack/malwar.git && cd malwar
pip install -e ".[dev]"
malwar db init
malwar scan SKILL.md # scan a file
malwar scan skills/ # scan a directory
malwar scan SKILL.md --format sarif # CI/CD output
malwar scan SKILL.md --no-llm # skip LLM (fast + free)
malwar crawl scan beszel-check # scan a ClawHub skill by slug
malwar crawl url https://example.com/SKILL.md # scan any remote SKILL.md
$ malwar scan suspicious-skill.md
MALICIOUS Risk: 95/100 Findings: 4
MALWAR-OBF-001 Base64-encoded command execution critical L14
MALWAR-CMD-001 Remote script piped to shell critical L22
MALWAR-EXFIL-001 Agent memory/identity file access critical L31
MALWAR-MAL-001 ClawHavoc campaign indicator critical L14
Scan completed in 42ms (rule_engine, threat_intel)
Full command reference: CLI Guide
API
malwar serve # http://localhost:8000
curl -X POST http://localhost:8000/api/v1/scan \
-H "Content-Type: application/json" \
-d '{"content": "...", "file_name": "SKILL.md"}'
30+ endpoints covering scan submission, results, SARIF export, signatures CRUD, campaigns, reports, dashboard analytics, audit logs, and RBAC. Auth via X-API-Key header.
Full endpoint reference: API Docs
Web Dashboard
Built-in browser UI at http://localhost:8000 when running the API server.
React 19 · TypeScript · Vite · Tailwind CSS 4 · Recharts
Docker
docker compose up -d # API + Dashboard at http://localhost:8000
Multi-stage build: Node.js compiles the frontend, Python 3.13-slim runs the backend.
Full deployment guide: Deployment
Configuration
All settings via environment variables with MALWAR_ prefix or .env file. Key settings:
| Variable | Default | Description |
|---|---|---|
MALWAR_API_KEYS |
(empty) | API keys (empty = auth disabled) |
MALWAR_ANTHROPIC_API_KEY |
(empty) | Anthropic key for LLM layer |
MALWAR_DB_PATH |
malwar.db |
SQLite database path |
All 40+ configuration options →
Development
pytest # 1,504 tests
ruff check src/ tests/ # lint
mypy src/ # type check
37 test fixtures: 5 benign, 10 malicious (synthetic), 22 real-world samples from ClawHub and Snyk research.
Full dev guide: Development
Documentation
| Architecture | Pipeline design, scoring logic, storage layer |
| API Reference | All 30+ endpoints with schemas and examples |
| Detection Rules | All 26 rules with patterns and false positive guidance |
| Threat Campaigns | Campaign tracking, ClawHavoc case study |
| CLI Reference | Every command with flags and examples |
| Deployment | pip, Docker, nginx, production config |
| Development | Adding rules, endpoints, testing, conventions |
What's New in v0.3.0
Extensibility — YAML DSL for custom rules, rule testing framework, plugin system, ML-based risk scoring.
Infrastructure — PostgreSQL backend support, Redis caching layer, GitLab CI and Azure DevOps templates.
Security & Compliance — Immutable audit logging, role-based access control (RBAC), CI security scanning with SBOM.
Operations — Scheduled background scanning, multi-channel notifications (Slack, email, webhooks), git diff scanning.
User Experience — Dashboard analytics with trend charts, Rich TUI for interactive terminal usage.
Registry Integration — malwar crawl command to browse, search, and scan skills directly from ClawHub. Also supports scanning any remote SKILL.md by URL.
1,504 tests | 26 detection rules | 82% coverage
BSL-1.1 — Copyright (c) 2026 Veritas Aequitas Holdings LLC. All rights reserved.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file malwar-0.3.1.tar.gz.
File metadata
- Download URL: malwar-0.3.1.tar.gz
- Upload date:
- Size: 1.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fdd573f904822b4050f9db8ba3876900c7cd57cec56ea9b334890ae1487df244
|
|
| MD5 |
3bf2dea541c160667307c925d724d5b6
|
|
| BLAKE2b-256 |
7e0501dcba4f1d7e109f938446f7347215321a3a56b76d808c312bd63bb1344a
|
Provenance
The following attestation bundles were made for malwar-0.3.1.tar.gz:
Publisher:
publish-pypi.yml on Ap6pack/malwar
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
malwar-0.3.1.tar.gz -
Subject digest:
fdd573f904822b4050f9db8ba3876900c7cd57cec56ea9b334890ae1487df244 - Sigstore transparency entry: 984644260
- Sigstore integration time:
-
Permalink:
Ap6pack/malwar@76e188ca7e880d50fba00ab7652097af621e10db -
Branch / Tag:
refs/tags/v0.3.1 - Owner: https://github.com/Ap6pack
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@76e188ca7e880d50fba00ab7652097af621e10db -
Trigger Event:
release
-
Statement type:
File details
Details for the file malwar-0.3.1-py3-none-any.whl.
File metadata
- Download URL: malwar-0.3.1-py3-none-any.whl
- Upload date:
- Size: 266.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8beac5e1e5db1e88190d0127a15d72a164631262e83b77fee4da0d5c3498bd36
|
|
| MD5 |
85c73273b3d44f310affd31c6df991ab
|
|
| BLAKE2b-256 |
0a889ec062dbde902d720a010b44b4cc7db5434e154ed66a29e4d72ed1ec262e
|
Provenance
The following attestation bundles were made for malwar-0.3.1-py3-none-any.whl:
Publisher:
publish-pypi.yml on Ap6pack/malwar
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
malwar-0.3.1-py3-none-any.whl -
Subject digest:
8beac5e1e5db1e88190d0127a15d72a164631262e83b77fee4da0d5c3498bd36 - Sigstore transparency entry: 984644262
- Sigstore integration time:
-
Permalink:
Ap6pack/malwar@76e188ca7e880d50fba00ab7652097af621e10db -
Branch / Tag:
refs/tags/v0.3.1 - Owner: https://github.com/Ap6pack
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@76e188ca7e880d50fba00ab7652097af621e10db -
Trigger Event:
release
-
Statement type: