Hermes Pentest Lab
Turn any Kali Linux laptop into a production-grade pentesting workstation β with AI agent orchestration, native tooling, VPN OPSEC, encrypted storage, and automated report generation.
β οΈ Requires Kali Linux β tools run natively on the host for raw sockets, SMB, and packet capture. Docker is used only for lab targets and Neo4j.
What It Looks Like
$ hermes
/skill pentest-engage
Agent: Validating scope... β 192.168.1.0/24 authorized
VPN check... β wg0 UP
LUKS check... β /dev/mapper/pentest mounted
Pre-flight checks complete. 7/7 subagents ready.
Agent: OSINT agent β 12 subdomains, 47 email addresses found
Recon agent β 14 live hosts, 3 high-value services
Web agent β SQLi confirmed on /login (CVSS 9.8)
Network agent β Kerberoastable account: svc_sql
Verify agent β 5 DRAFT findings verified: 2 CORROBORATED, 1 GATED
Agent: Building report...
Findings: 2 Critical, 1 High, 4 Medium, 3 Low
Risk level: Critical
Verification: 2 corroborated Β· 1 gated Β· 2 unverified Β· 0 refuted
Report saved: reports/acme-corp-2026-07/report-2026-07-01.pdf
Engagement complete. All actions logged to audit trail.
Architecture
System Architecture β full inventory: subagents, DB schema, OPSEC
Verification Pipeline β verdict router, taxonomy, L1-L6
How It Works
- You tell Hermes what to test (e.g., "Scan 192.168.1.0/24")
- Hermes checks the scope, starts the VPN, and dispatches 7 subagents in parallel
- Each subagent runs tools natively on the Kali host
- Findings flow into a shared SQLite v5 database
- Verify agent independently reproduces every DRAFT finding β benign only
- Report agent generates a professional PDF with verdict badges and confidence tiers
- Audit trail logs every action
π New Capabilities
Four additions layered on the safety-first core β each shipped independently with its own stdlib test suite:
π MCP tool-server β guardrails enforced in code
The toolchain is exposed over the Model Context Protocol so any MCP client (Claude Code / Desktop, Cursor) can drive it. Unlike the skill docs β which ask an agent to check scope and keep rate limits on β every target-touching tool routes through scope-check.py before running and appends to the tamper-evident audit chain after. The scope, VPN, rate-limit, and audit guardrails are enforced in code and cannot be bypassed by the calling agent. Destructive tools (sqlmap/hydra/metasploit/responder) stay operator-run.
make mcp # stdio server β full detail in mcp_server/README.md
π― MITRE ATT&CK + OWASP Top 10 mapping
Findings carry optional attack_technique / owasp_category tags that render a Framework Mapping coverage section in the report, so defenders can align remediation with the frameworks they already track. Delivered as an additive, idempotent DB migration (migrate-add-attack-owasp.py, v4 β v5).
π Reusable findings library
15 pre-approved, generic finding templates (reports/findings-library.json) with {placeholder} text and pre-applied ATT&CK/OWASP tags + CVSS β render one instead of writing a finding from scratch:
python3 scripts/add-finding.py <engagement> sql-injection --set host=10.0.0.5 endpoint=/login parameter=id
π Retest / delta tracking
Mark findings open / fixed / regressed across retest rounds (retest.py); the report renders a Remediation Progress section with the remediation rate and per-finding status. Status is asserted after re-testing β never guessed β and every mark is written to the audit chain.
π Sample Reports
Two reports from live assessments β one vulnerable target, one hardened production site.
Design: Dark gradient cover Β· 4-category scorecards Β· findings heatmap Β· inline evidence screenshots Β· business-first descriptions Β· observed controls with values Β· remediation checklist Β· A4 portrait print-native
Generated by build-report.py v4 β automated CVSS impact generation, per-finding screenshot embedding, findings heatmap, 6-phase methodology (incl. verification pass).
π Quick Start
Three levels, depending on how much you want. Full detail in INSTALL.md.
Reference only β the skills, scope engine, and tests, nothing installed:
git clone https://github.com/jayelbotvibe-web/hermes-pentest-lab.git
cd hermes-pentest-lab
make test # needs only Python 3.8+
Practice lab (~15 min) β bundled vulnerable targets, no VPN or vault. For learning against Juice Shop / DVWA on localhost:
./install.sh --minimal
docker compose -f docker/docker-compose.yml --profile lab up -d # targets
make doctor
Full engagement setup (~30 min) β encrypted vault, VPN OPSEC gate, and the full toolchain (native on Kali, or the kali-* containers elsewhere):
./install.sh # interactive
bash scripts/create-pentest-vault.sh --size 40G # encrypted client-data vault
On Kali, tools run natively β install them once:
sudo apt install -y nmap metasploit-framework ffuf gobuster wpscan sqlmap hydra john enum4linux whatweb responder impacket-scripts evil-winrm seclists wireguard-tools age cryptsetup
pipx install netexec bloodhound certipy-ad theHarvester holehe sherlock
On a non-Kali host, use the tool containers instead:
make images # build kali-web / kali-net / osint-tools
# then set PENTEST_USE_CONTAINERS=true in your config
Stuck at any point:
make doctor # what is missing, and the command that fixes it
Daily use
mount-pentest-vault # open the encrypted vault
bash scripts/init-engagement.sh acme-2026 # start an engagement
bash scripts/preflight.sh acme-2026 # authorization gate (VPN + signed scope)
# ... work ...
bash scripts/build-report.py acme-2026 # PDF report
unmount-pentest-vault # close when done
AI orchestrator
In a Hermes Agent session: /skill pentest-engage, then describe the engagement.
MCP tool-server (any MCP client)
Drive the same toolchain from Claude Code / Desktop or Cursor β with the scope, VPN, rate-limit, and audit guardrails enforced in code, not just documented:
make mcp # launches the stdio server (mcp_server/)
Point a client at scripts/pentest-mcp.sh (see
mcp_server/mcp.json.example). Every
target-touching tool refuses out-of-scope targets, injects the engagement's
rate tier, and appends to the tamper-evident audit chain before it runs.
Destructive tools stay operator-run. Details:
mcp_server/README.md.
π οΈ Tools Included
π» = Native host Β π³ = Docker service Β
:port= web access
Web Application Testing
Network & Active Directory
OSINT & Passive Recon
Infrastructure
Native Tools
π€ AI Subagents
7 specialized agents β each with deep domain knowledge, Pre-flight checks, and rate limiting.
π Report Pipeline
Findings DB (SQLite) β Verify Pass (independent reproduction)
β β
Jinja2 Templates β Verdicts + Confidence
β
WeasyPrint β PDF
β
Pandoc β DOCX (editable reports)
What's in the report
π OPSEC & Encryption
π Repo Structure
hermes-pentest-lab/
βββ README.md
βββ .gitignore
βββ ruff.toml β pinned lint rule set (version-stable CI)
βββ mcp_server/ β π MCP tool-server (scope/rate/audit enforced in code)
β βββ server.py β FastMCP tools (scan, osint, findings, retest, report)
β βββ enforce.py β the gates: scope Β· VPN Β· rate Β· audit
β βββ catalog.py β rate-limit lookups from tool-catalog.yaml
β βββ requirements.txt / mcp.json.example β venv deps + example client config
β βββ README.md
βββ docs/
β βββ index.html β GitHub Pages landing page
β βββ pentest-architecture-complete.html β interactive system diagram
β βββ pentest-architecture.html
β βββ pentest-ops-architecture.html
β βββ verification-pass-architecture.html β π verification pass system diagram
β βββ pentest-reference.html β π complete production reference
β βββ TROUBLESHOOTING.md
β βββ WORKFLOW.md
β βββ reports/samples/
β βββ juice-shop-benchmark-report.{html,pdf} β 14 findings, 38/100
β βββ zerodaybrief-report.{html,pdf} β 1 finding, 94/100
β βββ report-preview.png
β βββ screenshots/ β evidence screenshots (F-XXX-*.png)
βββ docker/
β βββ docker-compose.yml β 4 services, 3 profiles (lab, sandbox, neo4j)
β βββ Dockerfile.kali-web β (deprecated β tools now native)
β βββ Dockerfile.kali-net β (deprecated β tools now native)
β βββ Dockerfile.osint-tools β (deprecated β tools now native)
βββ scripts/
β βββ pentest-canary.sh β validates all tools before session
β βββ pentest-up.sh β starts containers + LUKS mount
β βββ pentest-down.sh β graceful shutdown + cleanup
β βββ pentest-verify.sh β post-startup verification
β βββ init-engagement.sh β creates forensics-style engagement dir
β βββ init-engagement-db.py β SQLite schema (6 tables, v5 + verdict/ATT&CK/OWASP/retest)
β βββ build-report.py β findings β Jinja2 β HTML + PDF (verdict + framework + retest aware)
β βββ verify-findings.py β π independent finding reproduction engine
β βββ migrate-add-verification.py β π additive, idempotent DB migration (v3βv4)
β βββ migrate-add-attack-owasp.py β π additive, idempotent DB migration (v4βv5)
β βββ framework_map.py β π ATT&CK + OWASP lookups + report coverage
β βββ findings_library.py / add-finding.py β π reusable finding templates (module + CLI)
β βββ retest.py β π open/fixed/regressed lifecycle + progress
β βββ report_verification.py β π partition (body/ruled-out), verdictβconfidence
β βββ pentest-mcp.sh β π launches the MCP tool-server (venv, stdio)
β βββ audit-log.sh β scope-validated audit entries
β βββ preflight.sh β VPN + LUKS + DNS + scope checks
β βββ wipe-engagement.sh β encrypted archive + destruction cert
β βββ capture-evidence.sh β headless Chromium screenshots
β βββ convert-docs.py β MarkItDown: PDF/DOCX β markdown
βββ reports/
β βββ templates/report.html β unified Jinja2 template (v2)
β βββ findings-library.json β π 15 pre-approved, pre-tagged finding templates
βββ tools/
β βββ tool-catalog.yaml β tools with version, fallback, rate limits
βββ skills/
β βββ pentest-context.md β system map β loaded every session
β βββ pentest-engage.md β orchestrator β dispatches 7 subagents
β βββ pentest-ops.md β startup/shutdown/repair/troubleshooting
β βββ pentest-verify.md β π 7th subagent β independent reproduction skill
β βββ pentest-mcp.md β π driving the toolchain over MCP
β βββ pentest-findings/SKILL.md β finding encyclopedia β 14 interpretations + library
β βββ subagent-{osint,recon,web,net,report,scope}.md
β βββ safety-guards.md β 13-item refusal list + rate limits
βββ scope/
βββ _template.json β scope template (copied into engagements)
βββ contract-template.md β rules of engagement
Engagement Directory (created by init-engagement.sh)
engagements/<name>/
βββ ENGAGEMENT.yaml β client, dates, status, assessor
βββ scope.json β scope definition (IPs, domains, signed)
βββ findings.db β SQLite v5 database (6 tables, verdict + ATT&CK/OWASP + retest columns)
βββ findings.json β machine-readable findings export
βββ metadata.json β controls, observations, methodology
βββ audit/
β βββ actions.jsonl β every tool run, scope-validated (incl. verification actions)
βββ evidence/ β client documents (auto-converted via MarkItDown)
βββ screenshots/ β tool evidence (F-XXX-*.png auto-attach in report)
βββ raw/scans/ β nmap XML, nuclei JSON, tool output
βββ reports/ β generated HTML + PDF reports
π How It Compares
Based on publicly available documentation as of June 2026. Features may have changed. Verify independently.
Hermes Pentest Lab is built for the practicing professional β it prioritizes safety, audit trails, and client deliverables over autonomous exploitation.
π Verification Pass (Phase 5.5) β Just Added
Every DRAFT finding is independently reproduced before it reaches the report.
The verification pass sits between discovery (Phases 2-5) and reporting (Phase 6). It runs a benign, independent method against each finding β re-fetching headers with a plain stdlib client, observing TLS with a different tool, checking open ports with a socket probe. It never fires an exploit.
How it works
DRAFT findings β verify-findings.py β 5 possible verdicts:
ββ VERIFIED β manual confirmation
ββ CORROBORATED β independent signal agrees
ββ GATED β destructive class, abstained
ββ UNVERIFIED β couldn't confirm (probe error β refute)
ββ REFUTED β evidence contradicts finding β ruled-out appendix
Design rules (baked in)
Commands
python3 scripts/verify-findings.py <engagement> # write verdicts
python3 scripts/verify-findings.py <engagement> --dry-run # preview only
python3 scripts/migrate-add-verification.py --all # migrate existing DBs
What the report shows
- Verdict badge on every finding card (
CORROBORATED,UNVERIFIED,GATED, etc.) - Confidence driven by verdict β CORROBORATEDβMEDIUM, UNVERIFIEDβLOW, GATEDβTENTATIVE
- Independent Verification block on each finding β method used + observable evidence
- Ruled-Out Candidates appendix β REFUTED findings surfaced for transparency
β Full verification architecture diagram
π Learning Path
- PortSwigger Academy β free, all web security labs
- Juice Shop β
docker compose --profile lab up -dβ http://127.0.0.1:3000 - DVWA β http://127.0.0.1:8080 (admin/password, set security to "low")
- Portfolio reports β see sample reports above in
reports/samples/
β οΈ Legal
This toolkit is for authorized security testing only. Never use it on systems you don't own or have explicit written permission to test. Every engagement requires a signed scope document (scope/contract-template.md). Every tool run is logged to an audit trail. Every report includes a data destruction certificate.
π License
MIT β use it, modify it, share it. Built by @jayelbotvibe-web.

