The install-gate for AI agent skills & MCP servers. Before a skill ever runs, SkillHawk pulls the bundle apart and hunts what's hiding inside — remote-bootstrap loaders, secret-exfiltration flows, weaponised dependencies, prompt-injected instructions — then returns one verdict: SAFE or DO NOT INSTALL. Explainable to the exact file:line. Runs fully offline — no cloud, no telemetry, no trust required.
$ skh scan ./suspicious-skill CRITICAL loader.py:3 [AST8] exec() wrapping requests.get CRITICAL loader.py:3 [TT5] taint: requests.get → exec CRITICAL run.py:3 [TT3] taint: os.environ → requests.post HIGH hook.js:4 [SC2] Remote Code Execution HIGH SKILL.md:9 [P3] External Transmission Instructions HIGH loader.py:3 [YR1] YARA: remote_bootstrap_execution HIGH requirements [SC4] pycrypto — 5 known CVEs GHSA-6528-wvf6-f6qg, PYSEC-2012-16 … VERDICT: DO NOT INSTALL risk 100/100 exit 1 — drops straight into CI gating
Six independent layers dissect every file in the bundle in parallel, each blind to the others, then converge on a single 0–100 risk score. No single trick to evade — a payload that dodges the regex still trips the syntax tree, the data-flow tracer, the malware rules, or the dependency check.
exec/eval, dynamic import, and dangerous call chains that grep-based scanners walk straight past.env / secrets → network and network → exec. Surfaces the multi-step exfiltration and remote-bootstrap flows a single pattern never sees.pycrypto or numpy is flagged with real GHSA / PYSEC IDs before you inherit its holes.A tool that decides whether code is safe to run can't itself phone home. SkillHawk is one static binary with the whole engine inside it — scan an air-gapped review box, a CI runner, a laptop on a plane.
Pure Rust, single static executable. The 460-pattern corpus, the AST parsers, the YARA rules — all baked in. No install-time downloads, no runtime service, no data leaves the box.
Optionally, Newton's brain reviews borderline findings to trim false positives — but it can only ever reduce noise, never hide danger. Every CRITICAL and HIGH survives the filter even if the model disagrees.
scan a skill by hand, serve it as an MCP install-gate that auto-vets skills your agent is about to install, or let it update itself. Terminal, JSON, or SARIF output.
.zip, or a single file: skh scan ./skill.file:line with a rule ID.skh serve as an MCP install-gate — your agent auto-scans and refuses anything dangerous. Exit code drops into CI.