hermes-pentest-lab · system architecture

A governed pipeline where findings stay claims until independently verified.

The Hermes agent orchestrates seven subagents over native Kali tooling against authorized targets. Every action is bounded by an always-on governance and OPSEC layer; findings are held as DRAFT, reproduced by an independent verification pass, and only non-refuted verdicts reach the report body.

subagents 7 host native Kali Docker lab / sandbox only findings.db SQLite v4 verification Phase 5.5 evidence LUKS · audit.jsonl
L1Operator & authorizationhuman-in-the-loop
Operator
defines and signs the engagement
Signed rules of engagement
scope, exclusions, sign-off
gate
Authorized scope
scope.json · IPs · domains
skills / chat
L2OrchestrationJSON summaries only
Hermes agent
supervises · delegates · interprets — never sees raw tool output
Findings KB
tool output → severity + CVSS language
Skills
pentest-engage · pentest-context · pentest-verify
delegate_task([...])
L3Subagentsisolated context · structured output
Scope
validates every target
guard · first
OSINT
theHarvester · crt.sh
passive
Recon
nmap · masscan
active
Web
ffuf · nuclei · sqlmap
active
Network
nxc · bloodhound · certipy
active · approval
Verify
independent reproduction → verdict
quality · phase 5.5
Report
CVSS · Jinja2 · WeasyPrint
output · read-only
native execution
L4Tool executionnative Kali host · not Docker
Web
ffuf · nuclei · sqlmap · gobuster · wpscan
Network / AD
nmap · nxc · impacket · responder · bloodhound
OSINT
theHarvester · holehe · sherlock · shodan
Native GUI
Burp Suite · Wireshark · Firefox + FoxyProxy
against declared targets
L5TargetsDocker · lab & sandbox only
Juice Shop
profile: lab · :3000
DVWA
profile: lab · :8080
Neo4j · BloodHound
profile: neo4j · :7474 :7687
sandbox-linux
profile: sandbox · isolated · no internet
findings → DRAFT
L6Evidence & reportingverdict-gated output
Findings DB
SQLite v4 · +verdict · verify_method · observable
store
Verification pass
reproduce → verdict → confidence
gate
Report builder
Jinja2 → WeasyPrint · REFUTED → ruled-out
render

The verification pass

The stage that changed the pipeline. Between discovery and reporting, every DRAFT finding is reproduced with a method different from the tool that found it — benign observation only — then routed by verdict. Confidence becomes the output of that step, not a count of tools.

in
DRAFT finding
from the findings DB, with its discovery tool
independent method
≠ discovery tool
hand-crafted PoC, distinct tool, or out-of-band callback. The verdict rests on the observable — never the tool's say-so. Destructive classes abstain.
verdict router
VERIFIED→ report body
CORROBORATED→ report body
UNVERIFIED→ held for review
GATED→ body, flagged
REFUTED→ ruled-out
→ REPORT BODY
VERIFIED · CORROBORATED · GATED, each carrying its verification command, timestamp, and observable as evidence.
→ RULED-OUT APPENDIX
REFUTED candidates — listed, not hidden. A documented false-positive removal, which is the reason the stage exists.

Verdict taxonomy → confidence

Five outcomes, each caused by a reproduction result. The confidence tier is set from the verdict — a probe error is never a verdict, it leaves a finding UNVERIFIED with the error recorded.

VERIFIED

→ high

Reproduced; the observable was captured.

CORROBORATED

→ medium

Independent signal agrees; no full re-exploit fired.

UNVERIFIED

→ low

Could not confirm. No false claim is made.

GATED

→ tentative

Proof needs an authorization-crossing action not granted. Reason recorded.

REFUTED

→ dropped

Independent method contradicts the finding.

Guard / refuted Passive Active Verification / OPSEC Corroborated Output / storage